目次Category
はじめに
AWSのリソースへアクセスする上で求められる要素として低レイテンシーと可用性があります。
今回は、それを実現しアクセス効率を向上させるサービスの1つであるGlobal Acceleratorを取り扱っていきます。
Global Acceleratorとは
「世界中のユーザーからAWSアプリケーションへの通信を
AWSグローバルネットワーク経由で最適な正常エンドポイントへルーティングするサービス」
つまり、ユーザーからAWSリソースまでのネットワーク経路を最適化するサービスです。
類似のサービスだと、コンテンツを近くのエッジロケーションに持ってくるサービスのCloudFrontがあります。
料金形態
Global Acceleratorの料金は、3つの要素で算出されます。
固定料金は、Acceleratorを作成してから完全に削除するまでの間発生します。Acceleratorの削除手順に”Accleratorの無効”があるのですが、無効化しても存在する限り料金は発生します。
DT-Premiumは、Accelerator経由で通信した際にグローバルネットワークを利用した通信量に応じた料金が発生します。リージョンをまとめた地域ごとで料金が変わってきます。
例えば、
・「Asia Pacific – Asia Pacific」(東京リージョンとアジア圏のリージョン) : “0.010 USD/GB”
・「Asia Pacific – North America」(東京リージョンと米国圏のリージョン) : “0.035 USD/GB”
Public IPv4は、Acceleratorに割り振られたIPv4アドレスの利用時間による料金が発生します。
今回使用するサービス

構成

構築手順
2-0.構築するにあたって
本構築では、EC2でWebサーバの構築ができること前提で進めていきます。
分からない方がいれば、下記を参照してください。
EC2でWebサーバ構築、ALBで負荷分散、オートスケーリングを行う | YAZエンジニアが運営するメディア Blilliant Engineer
2-1.別々のリージョンにWeb構築
Webサイトを3つのリージョンに構築していきます。(面倒な人は2つでやってみましょう)
東京・ソウル・バージニアリージョンを使います。(2つでやる方は東京とバージニアで)
次の順序でAWSリソースを各リージョンで作成します。
VPC作成 -> サブネット作成(2つ) -> ルートテーブル作成 -> インターネットゲートウェイ作成
-> Security Groupの作成 -> EC2の作成 -> ターゲットグループの作成
->Application Load Balancer(ALB)作成 -> EC2でWeb作成
下記の設定内容でリソースをそれぞれ作成していきましょう。指定していない箇所はデフォルトでOKです。東京リージョンでの設定を記載しています。
他のリージョンで変更する箇所は(ソウル:xxxx, バージニア:yyyy )と表示します。
再利用できそうなリソースがあれば、使ってもらっても大丈夫です。
作成するリソースの数は多いですが、各リソースで設定する箇所は少ないので頑張りましょう!
VPC
【名前】vpc-[リージョン名]-[名前]-01
【IPv4 CIDR】10.0.0.0/16
Subnet
サブネットは2つ作成してください。
【名前】subnet-[name]-01 | subnet-[name]-02
【CIDRブロック】10.0.0.1/24 | 10.0.0.2/24
RouteTable
【名前】rtb-[name]-01
ルートテーブル作成後に詳細画面から”サブネットの関連付け”タブを開く。
“明示的なサブネットの関連付け”を編集して、作成した2つのサブネットを追加してください。
Internet Gateway
【名前】itgw-[name]-01
インターネットゲートウェイの作成後、詳細画面から
“アクション -> VPCアタッチ”をクリックしてください。
そのあとに、ルートテーブルの詳細を開いて、
”ルート”にインターネットゲートウェイを追加してください。
【送信先】0.0.0.0/0 【ターゲット】インターネットゲートウェイ -> itgw-[name]-01
Security Group
Security GroupはEC2用とALB用をそれぞれ作成します。
【名前】 sgp-alb-[name]-01 | sgp-ec2-[name]-01
【vpc】 vpc-[リージョン名]-[名前]-01
【インバウンドルール】
・ sgp-alb-[name]-01
タイプ:HTTP ソース:0.0.0.0/0
・sgp-ec2-[name]-01
タイプ:HTTP ソース:sgp-alb-[name]-01
タイプ:SSH ソース:0.0.0.0/0
EC2
【名前】ec2-[name]-01
・ネットワーク設定
【VPC】vpc-[リージョン名]-[名前]-01
【サブネット】subnet-[name]-01 (02でもOK)
【パブリック IP の自動割り当て】有効化 (絶対に忘れないで)
【ファイヤーウォール】既存のセキュリティグループ -> sgp-ec2-[name]-01
Target Group
【ターゲットの種類】インスタンス
【グループ名】tgp-[name]-01
【VPC】vpc-[リージョン名]-[名前]-01
【使用可能インスタンス】ec2-[name]-01
”保留として以下を含める”をクリック
【ターゲット】ec2-[name]-01
Application Load Balancer
EC2のサイドバーにあるロードバランサーを開く。
”Application Load Balancer”を選択
【名前】alb-[name]-01
【AZ】1a , 1c
【セキュリティグループ】sgp-alb-[name]-01
【ターゲットグループ】tgp-[name]-01
Web構築
ec2-[name]-01を選択して”接続”をクリックしてください。
”EC2 Instance Connect”のタブを開き、接続してください。
接続が完了したら、下記のコマンドを順に実行して下さい。
最後のコマンドは[リージョン名]と[リージョンコード]を記載してから実行してください。
1. sudo su - 2. dnf install -y httpd 3. systemctl enable httpd 4. systemctl start httpd 5. cat <<'EOF' > /var/www/html/index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Global Accelerator Test</title> </head> <body> <h1>[リージョン名] Server</h1> <h2>[リージョンコード]</h2> </body> </html> EOF
alb-[nam]-01の詳細を開いて、DNS名で検索して作成したWebが表示されれば完了です。
3リージョン分のWeb構築が出来たら、本命のGlobal Acceleratorの設定をやっていきましょう。
2-2.Global Acceleratorの設定
Global Acceleratorを検索して開いてください。
”アクセラレータの作成”を押しましょう


以下の内容で設定してください。
【アクセラレータ名】ga-[name]-01
【リスナー】ポート : 80 プロトコル : TCP
【リスナー:80TCP】
エンドポイントグループを3つ作成
リージョン名:各リージョンコード(東京・ソウル・バージニア)
トラフィックダイヤル:デフォルト(100)
【エンドポイント追加】
各エンドポイントグループにalb-[name]-01を指定
*トラフィックダイヤル:エンドポイントグループへ流すトラフィックの割合を調整する値
全て100の場合、ユーザーにとって最適なエンドポイントグループへトラフィックが送られる。
値が小さくなれば、本来送られるトラフィックの一部が、他の正常なエンドポイントグループへ振り分けられる。
例:東京を10%に設定した時、東京に来るトラフィックの90%は他に送られる。
これでGlobal Acceleratorの設定は以上になります。
動作確認へ移りましょう!
2-3.動作確認
Global Acceleratorの詳細を開いてください。
すると、静的IPアドレスが2種類あります。(可用性のための2種類)
どちらでもよいのでそのIPアドレスをコピーして検索してください。
3つのリージョンで最も近い東京が最適になるので、Tokyo Serverと書かれたページが表示されればOKです。
アクセラレータの詳細でリスナーを開き、東京リージョンのエンドポイントを
選択して”編集”を押してください。
トラフィックダイヤルを”0”にしましょう。
しばらく待って(4分くらい)、Webを更新してください。
東京へトラフィックを送らせないようにしたので、次に近いソウルが最適となるので、
Seoul Serverと表示されればOKです。
これでGlobal Acceleratorが最適な経路を選んでいることが確認できました。
トラフィックダイヤルを元に戻して、再度Tokyo Serverが表示されるようにしましょう。
戻せたら、次のフェイルオーバーテストに移ります。
2-4.フェイルオーバーテスト
フェイルオーバー
「稼働中のシステムに障害が発生したとき、正常な予備システムへ自動的に切り替える仕組み」
東京リージョンのEC2を停止させてください。
東京リージョンのWebサーバにアクセスができない障害が発生して、予備システムへ切り替わります。
しばらくして、Webを更新するとSeoul Serverになるか確認してください。
次にソウルリージョンのhttpdを停止させてみましょう。
次のコマンドをEC2内で実行してください。
1. systemctl stop httpd 2. systemctl status httpd ↳runningになっていればOK
またしばらくまって、Webを更新してVerzinia Serverになるか確認してみましょう。
しばらくエラコードが表示された後にVerzinia Serverが表示されればOK。
(一つ目より時間がかかります。もしかしたらVerzinia Serverでないかも💦)
両方とも同様の障害でしたが、フェイルオーバーまでの時間に違いが出ました。
Global Acceleratorはエンドポイントのヘルス状態を監視して、UnHealthyになれば正常な別リージョンのエンドポイントへトラフィックを切り替えます。今回だとエンドポイントはALBです。
EC2を停止した場合
ALBのヘルスチェックはターゲットグループを対象としているので、EC2自体が停止してターゲットに異常を検知する。
結果、ALBはすぐにUnHealthyとなる。
httpdを停止した時
ALBは定期的なヘルスチェックの失敗が一定回数続いたことを確認してからターゲットをUnhealthyと判定するため、異常の検知・反映に時間がかかります。結果、EC2が稼働している状態では時間を要してしまう。
まとめ
以上でGlobal Acceleratorのハンズオンは終了です。
片づけるものを記載します。
・VPC
・サブネット2つ
・ルートテーブル
・インターネットゲートウェイ
・SG
・EC2
・ターゲットグループ
・ALB
・アクセラレータ
関連付けなどを行っているので、スムーズに削除できる順番を考えながらやってみましょう。
再利用したリソースはまた使うかもなので残しておいてください。
普段使っていないリージョンのリソースは全て削除しておきましょう。
*アクセラレータは”アクション” -> 無効化した後に削除を実行してください。
ちゃんとリソースが消えていることも確認してください!!
同じカテゴリーの記事
同じカテゴリの記事を読む