AWSECS

ECS FargateとALBで冗長化&負荷分散された環境を構築する

ECS FargateとALBを用いて、冗長化&負荷分散された環境を構築します。

ECS Fargateを単体で構築したシンプルな構成は、こちらの記事を参照してください。ECS Fagateの基本的な解説もしています。

スポンサーリンク

ECS FargateとALBの構築手順

必要となるAWSリソースが多岐にわたります。ひとつずつ順番に作成します。

なお今回はあらかじめ用意されているデフォルトのVPCとサブネットを利用します。

セキュリティグループの作成

ALB用セキュリティグループ と ECS用セキュリティグループの2つを作成します。

AWSコンソールにログイン後、 画面上部検索窓 [ EC2 ] で検索 → 当該サービスをクリックし、EC2画面の左ペイン [ セキュリティグループ ] → [ セキュリティグループを作成 ] をクリックします。

ALB用セキュリティグループの作成

外部からのHTTPアクセスを許可します。以下のとおり設定し、画面右下の [ セキュリティグループを作成 ] をクリックします。

アウトバウンドルールはデフォルトで設定されている、すべてのトラフィックを許可のままにしておいてください。

基本的な詳細
項目名
セキュリティグループ名demo-sg-for-alb
説明わかりやすい説明を(日本語は不可)
VPCdefault
インバウンドルール

[ ルールを追加] をクリックし、以下のとおり設定します。

項目名
タイプHTTP
ソースマイIP or Anywhere-IPv4

ECS用セキュリティグループの作成

ALBからのHTTPアクセスのみ許可します。以下のとおり設定し、画面右下の [ セキュリティグループを作成 ] をクリックします。

アウトバウンドルールはデフォルトで設定されている、すべてのトラフィックを許可のままにしておいてください。

基本的な詳細
項目名
セキュリティグループ名demo-sg-for-ecs
説明わかりやすい説明を(日本語は不可)
VPCdefault
インバウンドルール

[ ルールを追加] をクリックし、以下のとおり設定します。

項目名
タイプHTTP
ソースセキュリティグループ demo-sg-for-alb を指定

ターゲットグループの作成

ALBに紐付けるサーバ群を定義するため、ターゲットグループを作成します。

EC2画面の左ペイン [ ターゲットグループ ] → [ ターゲットグループの作成 ] をクリックします。以下のとおり入力します。

基本的な設定

項目名
ターゲットタイプの選択IPアドレス
ターゲットグループ名demo-target
プロトコル:ポートHTTP:80
IPアドレスタイプIPv4
VPCdefaultのVPCを選択
プロトコルバージョンHTTP1

ヘルスチェック

項目名
ヘルスチェックプロトコルHTTP
ヘルスチェックパス/

以上を設定したら、[ 次へ ] をクリックし、次画面でそのまま [ ターゲットグループの作成 ] をクリックします。

ALBの作成

EC2画面の左ペイン [ ロードバランサー ] → [ ロードバランサーの作成 ] をクリックし、次画面で、Application Load Balancer の [ 作成 ] をクリックします。

以下を設定し、画面右下の [ ロードバランサーの作成 ] をクリックします。

基本的な設定

項目名
ロードバランサー名demo-alb
スキームインターネット向け
IPアドレスタイプIPv4

ネットワークマッピング

defaultのVPCを選択し、少なくとも 2 つのAZのサブネットを指定します。

セキュリティグループ

demo-sg-for-alb を選択します。

リスナーとルーティング

項目名
プロトコルHTTP
ポート80
デフォルトアクションdemo-target

ECSの作成

ここからECSの作成を行っていきます。画面上部検索窓 [ ECS ] で検索 → 当該サービスをクリックします。

タスク定義の作成

こちらの記事タスク定義の作成を参照してください。任意の名前については、以下のとおり設定します。

項目名
タスク定義ファミリー名demo-task
コンテナ名demo-container

クラスターの作成

ECSトップ画面の左ペイン [ クラスター ] → [ クラスターの作成 ] をクリックし、以下のとおり設定します。設定後、画面右下の [ 作成 ] をクリックします。

項目名
クラスター名demo-cluster
AWS Fargate (サーバーレス)チェックを入れる

サービスの作成

ECS画面の左ペイン [ クラスター ] → 作成したクラスター名 → サービス タブの [ 作成 ] をクリックし、以下のとおりに設定します。明記してないものはデフォルトのままでOKです。

設定後、画面右下の [ 作成 ] をクリックします。

環境
項目名
コンピューティングオプション起動タイプ
起動タイプFARGATE
プラットフォームのバージョンLATEST
デプロイ設定

以下のとおりに設定します。明記していないものはデフォルトのままでOKです。

項目名
アプリケーションタイプサービス
ファミリーdemo-task
リビジョン特定の数字(最新)
サービス名demo-service
サービスタイプレプリカ
必要なタスク2
ネットワーキング

以下のとおりに設定します。明記していないものはデフォルトのままでOKです。

項目名
VPCデフォルトのVPC を選択
サブネットALBで選択したものと同じサブネットを選択
セキュリティグループ既存のセキュリティグループを使用
セキュリティグループ名demo-sg-for-ecs
パブリックIPオン
ロードバランシング

以下のとおりに設定します。明記してないものはデフォルトのままでOKです。

項目名
ロードバランサーの種類Application Load Balancer
Application Load Balancer既存のロードバランサーを使用
ロードバランサーdemo-alb
ロードバランス用のコンテナの選択demo-container 80:80
リスナー既存のリスナーを使用 80:HTTP
ターゲットグループ既存のターゲットグループを使用 demo-target

疎通テスト

ALBに設定されているドメインにアクセスします。ALBの詳細からDNS名を確認できます。

$ curl demo-alb-1234567890.ap-northeast-1.elb.amazonaws.com
<html><body><h1>It works!</h1></body></html>
$

ブラウザなどでアクセスすると、デフォルトの “It works!” という文字が表示されると思います。

Tips

ECS Execでコンテナ内に入ってデバッグする

ECS Execを使用して、ローカルPCからコンテナの中に入ることができます。以下の記事をご参照ください。

今回は以上です〜ノシ

参考

(`・ω・´)ノ アリガトウゴザイマス!!

AWS公式ドキュメント サービスの負荷分散