これまであまり物理的なネットワークに触れてこなかったエンジニアを対象に、AWSを用いてネットワークの基礎知識を解説する連載。今回は、サーバ公開で利用するネットワーク機能について解説し、DNSのサービスの「Amazon Route 53」の設定を通して、名前解決を行う方法を示す。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
これまであまり物理的なネットワークに触れられてこなかったSEやサーバ管理者、情シスなどの方を対象にネットワークの基本を「Amazon Web Services」(AWS)を用いて解説する本連載「AWSで学ぶクラウド時代のネットワーク基礎知識」。
今回は、サービスをインターネットに公開する方法についてネットワークに特化して解説します。DNSサービスによるドメイン名からのIPアドレスの解決を主として、負荷分散などについても補足します。
皆さんは日々さまざまなインターネットサービスを利用していると思います。また、会社や個人でインターネット向けにサービスを提供しているかもしれません。インターネットでサービスを提供するに当たり、必要となる要素、機能として主に次の5つが挙げられます。
連載第2回で記載した内容ですが、インターネット上で通信するには「グローバルIPアドレス」を用いたアクセスが必要です。
ただしサービスを提供するサーバ自身に直接グローバルIPアドレスを割り当てて直接インターネットに公開すると、インターネットからさまざまな攻撃を受けることになりかねず、セキュリティの観点で避けるべきです。
そのため一般的には、サーバでもNAT(Network Address Translation)機能を用いてグローバルIPアドレスから「プライベートIPアドレス」に変換してサーバにアクセスさせたり、グローバルIPアドレスを割り当てたプロキシサーバがクライアントからの通信をリバースプロキシ機能で代理応答しながらプライベートIPアドレスを割り当てたサーバと通信したりするといった方法が採られます。
IPアドレスは一見するとランダムな数字と「.」の羅列であり、非常に覚えにくいものです。アドレスを見てもアクセス先の情報は一切分からず、この値を直接指定して通信することは現実的ではありません。そこで「ドメイン名による宛先の特定」によって宛先として意味のある文字列で指定して通信を行える仕組みが実装されています。
例えば、何らかのWebサービスを利用する際には、「http://」「https://」から始まる「URL(Uniform Resource Locator)」という文字列を利用してアクセスしていると思います。URLは「https://」などに続けて宛先の情報を指定しますが、その際皆さんがグローバルIPアドレスを指定して通信することはほぼなく、「www.netone.co.jp」などの「FQDN」(完全修飾ドメイン名)というホスト名とドメイン名をつなげた文字列を指定すると思います。このFQDNが相手を特定する情報となります。
このFQDNの文字列はあくまでも便宜的な名前にすぎず、これだけでは相手の場所を特定できません。インターネットでは上述のようにグローバルIPアドレスを用いて通信します。そこでFQDNとIPアドレスがマッピングされたデータベースから宛先のIPアドレスを特定し、そのIPアドレスを用いて通信します。
このために必要となるシステムプロトコルのことを「DNS(Domain Name System)」、DNSの機能でFQDNからIPアドレスを特定することを「名前解決」といいます。
DNSサービスはインターネット上にある多数の事業者の連携によって提供されています。ユーザーはインターネットを契約しているサービスプロバイダーやGoogleなどが無料公開しているDNSサービスを利用することで、名前解決が可能になっています。
DNSの詳細については本稿では述べませんが、興味がある方はこちらの記事を参照してください。
サーバ公開における重要な要素として、「3. セキュリティの保証」があります。サービスを公開できたとしても、セキュリティ対策が不十分なサービスは問題を起こす原因となり得ます。
ネットワークに関するセキュリティ対策の方法については次回解説します。
サービスを提供するに当たって、物理機器や仮想マシン、プログラムといったものを利用しますが、物理的な故障をはじめ、サービスの利用頻度増大に伴う高負荷、CPUやメモリなどのパフォーマンス不足、ソフトウェアのバグなどによってサービスが利用できなくなる、あるいは利用しにくい状況が発生し得ます。
この対策として、各サービスの構成要素を複数用意し、「ロードバランサー」などで各要素に通信を振り分ける構成が取られます。これによって、単体では処理が難しい高負荷でもサービスレベルを維持することが可能となります。
またロードバランサーが振り分け先の構成要素を監視し、故障や異常が発生したノードの発見時に振り分け対象から除外することで冗長なサービスを提供できます。
ここまでの対応でサービス利用者とサービス環境が近ければサービスレベルの高いサービス提供が可能となります。しかし、例えば日本のサービス利用者がブラジルのサービスを利用する場合など離れた環境間での通信は遅延が大きくなり、サービスレベルの維持が難しくなります。そこで「高速なサービスの提供」が必要となります。
その方法の一つとして、画像や音楽など静的なコンテンツをあらかじめワールドワイドに展開しておき、利用者は自身の場所に近いコンテンツを取得することで高速なサービス提供を可能とする機能があります。この機能を、サービスとして提供するものを「CDN(Content Delivery Network)」といいます。
また世界の複数の地点に同様のサービスを展開しておき、利用者がサービスを利用するに当たり、FQDNから名前解決する際に利用者に近いサービスのグローバルIPアドレスを返すことによって高速なサービス提供を実現することも可能です。
ここからはAWS環境でのサーバ公開方法を紹介します。前項で解説した機能はそれぞれ以下のAWSのネットワーク機能で実現可能です。
項目 | 機能 | AWSサービス名称 |
---|---|---|
グローバルIPアドレスでの通信 | グローバルIP | Elastic IPアドレス |
NAT | インターネット ゲートウェイ Elastic Load Balancing(Network Load Balancer) |
|
リバースプロキシ(ロードバランサー) | Elastic Load Balancing(Classic Load Balancer、Application Load Balancer) | |
ドメイン名による宛先の特定 | DNS | Amazon Route 53 |
セキュリティの保証 | IPフィルター | セキュリティグループ ネットワークACL |
ファイアウォール | AWS Network Firewall | |
サービス提供の継続 | ロードバランサー | Elastic Load Balancing(Classic Load Balancer、Network Load Balancer、Application Load Balancer) |
高速なサービスの提供 | CDN | Amazon CloudFront |
DNS | Amazon Route 53 | |
本稿では、このうちDNSサービスの「Amazon Route 53」(以下、Route 53)の設定を通して、名前解決を行う方法を紹介します。セキュリティに関する機能は次回紹介します。その他、ロードバランサーやCDNについて興味がある方は以下の記事を参照してください。
それでは、Route 53の設定を元に名前解決の実現方法を解説します。
まず、名前解決にはドメイン名が必要です。ドメイン名は外部サービスで契約しその管理をRoute 53に移管して運用することもできますが、Route 53自身で契約することもできます。
下図は、Route 53でドメイン名を契約する画面です。
ドメイン名は「.」で区切られた複数のラベルから構成され、「TLD」(Top Level Domain)という、一番右側のラベルとして「.com」や「.jp」などを選択するとともにその左隣のラベル「2LD」(Second Level Domain)を指定することで設定します。ただし、上図のように既に取られているなどで利用できない場合、複数の似たような候補が表示され利用したいドメイン名を選択できるようになっています。ここでは「tmpdomain.link」というドメイン名を選択しています。
ドメイン名を取得すると、そのドメインを用いた名前解決を管理できるようになります。今回はインスタンスにひも付けたElastic IPのアドレス「56.68.x.x」を取得したFQDNに解決させることを考えており、ドメインの設定で下図のようにドメイン名に「A」レコードでIPv4アドレスのひも付けを設定します。
下図はオンプレの端末で名前解決した結果ですが、「tmpdomain.link」は「56.68.x.x」と名前解決されるようになっていることが分かります。
下図は、このFQDNから名前解決されるElastic IPをひも付けたインスタンスにアクセスした結果です。期待通りにアクセスできていることが分かります。
本稿ではサーバ公開で必要となるネットワーク機能、AWSの対応するサービスの紹介とDNSに焦点を当てて設定方法を紹介しました。インターネットでサービスを公開する場合、セキュリティの対策が必須です。そこで次回は、ネットワークレベルのセキュリティ対策について説明します。
本稿の環境の作成手順について連載第1回で作成した「VPC01」の構成をベースに追加する形で記載しています(今回不要となる「Subnet02」は除外しています)。環境を作って動作を確認したい方は本手順を参考に環境を構築し、試してください。
なお、インスタンスにひも付けるグローバルIPアドレスはインスタンス作成時の設定によってデフォルトで割り当てられていたPublic IPからElastic IPとして確保しているアドレス「52.68.x.x」に変更しています。
まずは、グローバルIPアドレスをひも付けるドメインが必要です。外部サービスで登録してRoute 53に管理を移管することもできますが、本稿ではRoute 53でドメインの登録から行います。
そのためには、Route 53の設定ページの「登録済みドメイン」というページを開き、「ドメインの登録」ボタンからドメイン登録画面に移動します。
表示されたページで、取得したいドメイン名を入力し「チェック」ボタンをクリックすると、指定したドメイン名の取得可否と、その他に関連するドメイン名の候補として取得が可能なドメイン名の候補が表示されます。今回は、その中で一番安価な「tmpdomain.link」を取得することにし、選択します。
すると、画面右側にショッピングカートとして指定したドメイン名が表示され、取得期間として最短の1年が選択されています。この内容でドメインを取得するために、画面下部の「続行」ボタンをクリックします。
連絡先を聞かれるので、必要な情報を入力して「続行」ボタンをクリックします。
その次のページで、ドメインのレコード情報を登録するホストゾーンが自動で作成される旨が記載されています。ドメインの自動更新の選択と規約への同意を行って「注文を完了」ボタンをクリックすると、ドメインが登録されます。
注文が完了すると、下図のページに遷移します。
内容を確認後、「ドメインに移動」ボタンでリクエストの状況が確認できるページに遷移します。なお、AWSから登録したメールアドレスに対して確認のメールが転送されます。「確認しなければ2週間でドメインが失効する」とのことなので、忘れず確認してください。
リクエスト申請直後は下図のように「ドメインの登録が進行中」となっていることを確認できます。
ここから進めるにはドメインの登録を待つ必要がありますが、今回の申請では20分もかからないうちに登録したメールアドレス宛てに登録成功の旨のメールが来ました。
そこで登録済みドメインの画面に移動し、下図のようにドメインが登録されていることを確認します。
ドメインの登録時に自動で作成されたホストゾーンを確認します。左のメニューの「ホストゾーン」をクリックし、タイプが「パブリック」、つまりインターネット向けのホストゾーンが作成されていることを確認できます。次に、ドメイン名をクリックし、ホストゾーンの詳細を参照します。
ホストゾーンの詳細が表示されます。現在存在しているレコードは「NS」と「SOA」の2つだけを確認できます。ドメイン名からIPv4アドレスへの名前解決にはIPv4アドレスをひも付けた「A」レコードが必要となります。そこで「レコードを作成」ボタンをクリックし、「A」レコードを設定します。なお、IPv6アドレスの名前解決をしたい場合は「AAAA」レコードを設定してください。
表示される画面で、「レコード名」は空欄、レコードタイプは「A」、情報欄にElastic IPとして取得したグローバルIP「52.68.x.x」(ドキュメント上、後半2オクテットをx.xと記載していますが、実際にはアドレスを記載しています)を設定し、「レコードを作成」ボタンをクリックします。
その結果、「tmpdomain.link」というFQDNに、「56.68.x.x」というグローバルIPがひも付きました。なお、画面上に「60秒以内に変更を伝達します」と記載されていますが、筆者のローカル環境で名前解決できるようになるまでの時間を確認したところ、30秒強で解決されるようになりました。
下図はオンプレミス環境の端末での確認結果です。取得したドメイン「tmpdomain.link」からElastic IPのアドレス「52.68.x.x」に名前解決できるようになっていることを確認できます。
下図は「Instance01」に建てたWebサーバにFQDNでアクセスした結果です。Web画面が見えています。なお、httpでアクセスできるようにセキュリティグループを変更しています。
通信自体はFQDNではなくIPアドレスで実施するので、グローバルIPアドレスの指定でもアクセスは可能です。
Copyright © ITmedia, Inc. All Rights Reserved.