AWS 認定ソリューションアーキテクトアソシエイトを取得したい人のための AWS ネットワーク入門
はじめに
本記事は AWS 認定ソリューションアーキテクトアソシエイト ( Solution Architect Associate: SAA ) で問われるネットワークに関する知識を、オーソドックスな AWS 構成図を題材に解説する記事である。
本記事の内容を理解すると、以下のような問題が解けるようになるかもしれない。
-
問題 1
カスタマーリレーションシップマネジメント (CRM) アプリケーションは、アプリケーションロードバランサーの背 後にある複数のアベイラビリティーゾーンの Amazon EC2 インスタンスで実行されます。
これらのインスタンスの 1 に障害が発生した場合、どうなりますか?
A) ロードバランサーが、傷害が発生したインスタンスへのリクエストの送信を停止する。
B) ロードバランサーが、障害が発生したインスタンスを終了する。
C) ロードバランサーが、障害が発生したインスタンスを自動的に置換する。
D) ロードバランサーが、インスタンスが置換されるまで、504 ゲートウェイ タイムアウト エラーを返す。
-
問題 2
企業は、VPC で Amazon EC2 インスタンスでモニタリングアプリケーションを実行する予定です。インスタンスへの 接続は、そのプライベート IPv4 アドレスを使用して行われます。ソリューションアーキテクトは、アプリケーション に障害が発生して到達不能になった場合に、トラフィックをスタンバイインスタンスに迅速に送信できるソリューショ ンを設計する必要があります。
これらの要件を満たすアプローチはどれですか?
A) プライベート IP アドレスのリスナーで構成されたアプリケーションロード バランサーをデプロイし、ロード バランサーにプライマリインスタンスを登録する。障害発生時に、インスタンスを登録解除してセカンダリイン スタンスを登録する。
B) カスタム DHCP オプションセットを構成する。プライマリインスタンスで障害が発生したときに、同じプライ ベート IP アドレスをセカンダリインスタンスに割り当てるように DHCP を設定する。
C) プライベート IP アドレスで設定されたインスタンスにセカンダリエラスティックネットワークインターフェイ ス (ENI) を接続する。プライマリインスタンスが到達不能になった場合は、ENI をスタンバイインスタンスに 移動する。
D) Elastic IP アドレスをプライマリインスタンスのネットワークインターフェイスに関連付ける。障害発生時に Elastic IP とプライマリインスタンスの関連付けを解除し、セカンダリインスタンスに関連付ける。
上記 2 つの問題は AWS 認定ソリューションアーキテクト - アソシエイト ( SAA-C02 ) 試験問題サンプル から引用した。
前提
-
ネットワークに関連しない AWS サービス ( 例えば EC2 とか RDS とか ) は解説しない
-
AWS サービスの仕様については 2021 年 2 月時点の情報である
対象読者
-
SAA ( C02 版 ) を取得したい人
-
サブネットやセキュリティグループなどの用語は聞いたことはあるが意味をよく理解していない人
-
AWS 構成図を読み書きできるようになりたい人
本記事で扱う構成図
本記事ではオーソドックスな Web 三層構造を AWS で構築するケースを例題として取り上げる。最終的な構成図は以下の通り。
AWS が提供する主要なネットワークサービス
それでは AWS が提供する主要なネットワークサービスと、そのサービスを構成する要素について順を追って説明していく。
Virtual Private Cloud ( VPC )
-
VPC とは 利用者ごとのプライベートなネットワークを AWS 内に構築するサービス のことである
-
企業で利用する場合は利用者ごとではなく、サービスごとに VPC を構築するケースもある
- VPC は以下で解説するように、サブネットやセキュリティグループやゲートウェイなど、様々な AWS リソースで構成される
サブネット
-
EC2 インスタンスなどを起動するために、VPC 内部に作るアドレスレンジのこと
-
サブネットの CIDR ブロックは VPC に設定した CIDR ブロックの範囲内に収まるよう設定する必要がある
-
上図には パブリックサブネット と プライベートサブネット という 2 種類のサブネットが登場するが、実際はこのようなサブネットが存在するわけではなく、後述するルートテーブルの設定でそのような役割を持たせているに過ぎないことには注意が必要である
-
なお、サブネットの単位で仮想ルータが存在し、仮想ルータは後述するルートテーブルやネットワークアクセスコントロールリスト ( NACL ) を持つ。
ルートテーブル
-
サブネット内にあるインスタンスがどこに通信にいくかのルールを定めたもの
-
イメージとしてはパケットの宛先アドレス ( IP アドレス ) と通信先を整理した以下のような表であり、表に無い宛先アドレスを指定された場合はパケットを送らないので通信できない
-
ルートテーブルはサブネットごとに定める必要がある
- Web サーバは後述する NAT ゲートウェイと通信をさせたいため、Web サーバを配置するプライベートサブネットのルートテーブルには
0.0.0.0/0
の通信を NAT ゲートウェイにルーティングするルールを追記している
ネットワークアクセスコントロールリスト ( NACL )
-
サブネットのインバウンドとアウトバウンドトラフィックを制御する機能のことで、サブネットの仮想ファイアウォールとしての役割を果たす
-
デフォルトでは全ての通信を許可する設定になっている
-
また、NACL は ステートレス なのでセキュリティグループとは異なり明示的に許可設定されていない応答トラフィックは遮断される点に注意が必要である
-
なお、複数ルールが設定されている場合はルールナンバが低いルールから順に評価され、即時で適用されていく
セキュリティグループ
-
EC2 や RDS などのインスタンスのインバウンドとアウトバウンドトラフィックを制御する機能のことで、インスタンスの仮想ファイアウォールとしての役割を果たす
-
各インスタンスには少なくとも 1 つのセキュリティグループをアタッチする必要があり、デフォルトでは同じセキュリティグループがアタッチされたインスタンス間の通信のみ許可する設定になっている
-
また、セキュリティグループは ステートフル なので、明示的に通信許可されていない応答トラフィックも通信が許可される点に注意が必要である
ゲートウェイ
-
VPC の内部と外部との通信をやりとりするための出入り口のことで、接続先がインターネットの場合は インターネットゲートウェイ ( IGW ) を、接続先が VPN や Direct Connect の場合は 仮想プライベートゲートウェイ ( VGW ) を利用する
-
IGW および VGW は共にマネージドサービスのため冗長化や障害時の復旧は AWS が自動で実施してくれるので、単一障害点 ( Single Point Of Failure: SPOF ) になることはなく、VPC に 1 つアタッチすれば良い
-
上図には IGW と VGW の他に NAT Gateway が登場するが、これはライブラリやパッチプログラムを取得するなどの目的で、インターネットから Web サーバへのアクセスを拒否しつつ Web サーバからインターネットへのアクセスを許可するために配置するゲートウェイである
-
なお、NAT インスタンスを使ってもこの目的を達成することは可能だが、NAT Gateway に比べてパフォーマンスが劣る
VPC エンドポイント
-
VPC からインターネット上にある AWS サービスに接続するためのゲートウェイのこと
-
エンドポイントには ゲートウェイエンドポイント と インターフェースエンドポイント ( PrivateLink ) の 2 種類あるが、SAA の範囲ではゲートウェイエンドポイントのみ把握しておけば充分である
-
ちなみに前者は S3 や DynamoDB との接続に利用されるエンドポイントで、後者はそれ以外の AWS サービスとの接続に利用されるエンドポイントである
Elastic Network Interface ( ENI )
-
物理的な環境における Network Interface Card ( NIC ) の役割を果たす VPC のコンポーネントのこと
-
例えば物理環境では、サーバに NIC を複数枚挿すことでサーバが担う役割の数分 IP アドレスを持たせるケースがあるが、AWS では ENI を使って同様なユースケースを実現する
-
他にも ENI でネットワークインターフェースを冗長化することで、障害発生時にダウンタイムを最小にして待機系へ接続を切り替えることなどが可能となる
今までの説明をまとめると構成図は以下の様になる。
さて、上の構成図を見ると分かる通り、現状の構成は
-
ユーザが Web サーバにアクセスする手段が無い
-
Web サーバが 1 台構成のため Web サーバに障害が発生したりするとサービスを提供できなくなる
といった課題がある。そこで先程の構成図を、外部からのアクセスポイントとしてロードバランサ ( LB ) を配置して、さらにサーバの負荷状況に応じて Web サーバを スケールアウト / スケールイン させる構成に変更しよう。
ここで新たに登場した AWS サービス ELB について説明をする。
Elastic Load Balancing ( ELB )
ELB サービス概要
-
ELB は AWS が提供するロードバランシングサービス であり、インターネット ( ユーザ ) からのアクセスポイントになると同時に、アプリケーションの着信トラフィックを複数の Web サーバ間に分散することができる
-
アベイラビリティゾーン ( Availability Zone: AZ ) を跨る負荷分散は可能だが、リージョンを跨るロードバランシングはできない
-
ロードバランシングの他にもヘルスチェックや暗号化および複合化の処理を ELB に任せることも可能である
-
なお、ELB というのは AWS が提供するロードバランシングサービスの総称であり、本記事の執筆時点では下記 3 種類の LB が存在し、配置するレイヤやサポートする機能が下記表のように異なる
-
Application Load Balancer ( ALB )
-
Network Load Balancer ( NLB )
-
Classic Load Balancer ( CLB )
名称 配置するレイヤ 動的ホストポートマッピング パスベースルーティング ALB アプリケーションレイヤ ( L7 ) 利用可能 利用可能 NLB トランスポートレイヤ ( L4 ) 利用可能 利用不可能 CLB L4 または L7 利用不可能 利用不可能 -
ELB 利用時のポイント
-
ELB を起動するサブネットは Web サーバのサブネットと共用にせず、専用のサブネットを用意すること
- Auto Scaling 機能によって Web サーバを増加させたら ELB 自身にアサインするアドレスがなくなって ELB 自身を増設できなくなるリスクを避けるため
-
事前に予測できる負荷増大に対しては、Pre-Warming ( 暖機運転 ) を申請してスケールを済ませておくこと
- 急な負荷増大に対してはスケーリングが間に合わない可能性があるため
- ただし Pre-Warming 申請にはビジネスプラン以上のサポートが必要である
-
特定のクライアントからのリクエストを特定のサーバに振り分けたい場合は スティッキーセッション を利用すること
-
Web サーバを ELB から切り離したタイミングで実行中だったリクエストを切断せずに継続したい場合は Connection Draining を利用すること ( CLB でのみ利用可能 )
- Connection Draining とは、既存の接続を開いたまま登録解除中のインスタンスまたは異常の発生したインスタンスにリクエストを送信しないようにする機能のこと
- 接続を維持する時間は 1-3600 秒で指定できる ( デフォルト 300 秒 )
今までの説明をまとめると構成図は以下の様になる。
ここでユーザへのレスポンス性能を高速化するためにユーザと IGW 間に Global Accelerator を配置してみよう。
Global Accelerator
-
Global Accelerator は AWS が提供するアプリケーションの可用性とパフォーマンスを改善するネットワークサービスである
- 通常のインターネットと比べてどの程度速度が向上するかを比較したい場合は 比較するツール を使うと良い
-
なお、ユーザに提供するサービスが静的コンテンツである場合は AWS が提供する Contents Delivery Network ( CDN ) サービスである CloudFront を使うことで高速化できるが、動的コンテンツに対して CloudFront を利用する場合は充分な検証をした上で適切なキャッシュ設定をする必要がある
現状の構成では独自ドメインを割り当てていないため Web サービスを利用する際は AWS が払い出した IP アドレスまたは DNS 名を使ってアクセスすることになるが、これはアンチパターンであるため、Route 53 を介して、独自ドメイン名でアクセスできる以下の構成に修正しよう。
Route 53
-
Route 53 とは ドメイン管理機能と権威 DNS サーバ機能を提供するサービス である
-
Route 53 は AWS が世界各地に配置したエッジロケーションに分散配置され、可用性 100% の SLA で提供される
-
ちなみに可用性 100% というのは絶対に落ちないことを保証しているわけではなく、落ちた場合は落ちた期間に応じて料金を返金するという意味である
-
詳細は Amazon Route 53 サービスレベルアグリーメント を参照のこと
-
-
また、Route 53 はヘルスチェック機能も提供しており、サーバの正常性確認や、ヘルスチェックで失敗と判定されたサーバを名前解決の対象から外すといったことが可能になる
-
Route 53 では以下に示すように様々なルーティングポリシをサポートしており、用途に応じて使い分けることが大切である
-
シンプルルーティング
- 事前に指定した静的な名前と IP アドレスのマッピングに基づいて名前解決を行う方式
-
加重ルーティング
- 同じ名前、タイプに設定した複数のレコードそれぞれに重みを与え、その比率によって名前解決を行う方式
- 処理性能に偏りがあるとか、利用者を一定の割合で特定の機能に誘導する場合 ( A/B テスト ) に利用する
-
レイテンシルーティング
-
AWS が独自に収集したレイテンシ情報に基づいて名前解決を行う方式
-
サービスリソースをグローバルに展開している場合にこのルーティングポリシを利用すると、世界中のエンドユーザに最も低いレイテンシでサービスを提供できる
-
-
フェイルオーバルーティング
-
各レコードにプライマリ、セカンダリの役割を与え、ヘルスチェックによりプライマリのサービスリソース全てが利用不可と判定された場合、セカンダリのサービスリソースに名前解決する方式
-
災害復旧のために別リージョンに待機系のリソースを用意する場合に利用する
-
-
位置情報ルーティング
-
IP アドレスまたは DNS クエリの送信元から割り出した位置情報に基づいて名前解決する方式
-
特定の地域のみに対する営業ライセンスを持つなど、サービス提供地域を限定したい場合に利用する
-
-
地理的近接ルーティング ( 利用には トラフィックフローでの設定が必要 である )
- リソースの場所に基づいてトラフィックをルーティングする方式
-
複数回答値ルーティング
- 1 つのレコードに異なる IP アドレスを複数登録してランダムに返却された IP アドレスにルーティングする方式
-
以上で最初に示した構成図に登場する AWS サービスの解説は終了である。
最後に、オーソドックスな Web 三層構造からは外れたが、SAA の取得を目指すのであればおさえるべきサービスおよび機能を解説する。
Direct Connect ( DX )
- DX とは オンプレと AWS クラウド間のプライベートネットワーク接続を提供するサービス のことである
-
オンプレと AWS クラウド間を専用線で繋ぐ方法としては DX の他にインターネット VPN があるが、インターネット VPN と比べて DX には以下のようなメリットがある
-
契約した帯域幅が常に利用できるため遅延値の変動幅が小さく、一定のスループットを期待できる
-
データ転送料金がインターネット VPN より安価に設定されている
-
-
一方でインターネット VPN と比べて DX には以下のようなデメリットがある
-
インターネット VPN より高価なことが多い
-
契約した帯域で一定期間の継続利用を契約条件にされることが多い ( お試しで利用するには向かない )
-
再掲: VPC
-
AWS 上に構築された Web サービスと連携する場合は、VPC ピアリング という機能を使って接続することができる
-
VPC ピアリングとは他の VPC と直接接続するためのゲートウェイのことで、VPC ピアリングの作成後は、ルートテーブルで接続先 VPC のアドレスをターゲットとして設定するだけでサービス間連携ができるようになる
-
ただし VPC ピアリングには以下の様な制限があることに注意が必要である
-
接続先の VPC は同一リージョンである
-
作成可能なピアリング数はデフォルトで 50 個 ( 拡張申請時は 125 個 ) までである
-
接続先の VPC にアタッチされた VGW などのゲートウェイにトランジット ( 接続すること ) はできない
-
まとめ
本記事では SAA を取得したい or AWS のネットワークについて基礎を理解したい という方を対象に、AWS のネットワーク関連のサービスやリソースを解説した。
特に解説を載せる予定は無いが、本記事を最後まで読んだ方であれば、本記事の冒頭に掲載した問題を解けるようになったと思う。
Discussion