Nuxt.js + AWS ECS Fargate その2(ALBとECS Fargate展開)

前回に引き続きAWS側の設定を行っていきます。
コンテナのタスク、サービスについては改めて理解するため下記が参考になりました。
基礎から応用までじっくり学ぶECS Fargateを利用したコンテナ環境構築 #Fargate | DevelopersIO
構築手順の参考にした記事は Amazon Fargate でコンテナを動かす - Qiita になります。
ALB の構築
Application Load Balancer を作成。
関係ないですが、ALBがEC2のメニューの中にあること、Gateway Load Balancer という新しい種類のロードバランサーがあるのを初めて知りました。
# ロードバランサーの設定
名前: nuxt-fargate-load-balancer
スキーム: インターネット向け
リスナー: HTTP:80
VPC: デフォルトVPC
AZ: ap-northeast-1a, ap-northeast-1c のサブネット
# セキュリティグループの設定
セキュリティグループ名: nuxt-fargate-sg
タイプ: カスタムTCP
プロトコル: TCP
ポート範囲: 80
ソース: カスタム 0.0.0.0/0, ::/0
# ルーティングの設定
ターゲットグループの名前: nuxt-fargate-target-group
ターゲットの種類: IP
プロトコル: HTTP
ポート: 80

ECS Fargate設定
タスク → クラスター → サービスの順で作成。
認定試験勉強でもごっちゃになるやつですが、クラメソさんの下記の説明が個人的には一番しっくりきます。
- ECS クラスタ → 以下のサービスとタスクの器、かたまり
- ECS サービス → タスク(以下)を指定し、何個起動するのか指定、ALBと関連付けするもの
- ECS タスク → CPU/メモリの割り当て、ポート設定などDockerコンテナの起動方法を指定する設定書みたいなもの
タスク実行ロールを作成(ない場合)
事前にロール ecsTaskExecutionRole がない場合は作成しておく。
※ Amazon ECS タスク実行 IAM ロール の「タスク実行 IAM ロールの作成」通りに作成する。
タスク定義の作成
ECS > タスク定義 > 新しいタスク定義の作成 > FARGATE を選択
# タスクとコンテナの定義の設定
タスク定義名: nuxt-fargate-task
タスクロール: ecsTaskExecutionRole
タスクメモリ (GB): 0.5GB
タスク CPU (vCPU): 0.25vCPU
## コンテナの追加
コンテナ名: nuxt-fargate-container
イメージ: <イメージURI>
ポートマッピング: 80
イメージURIはECRのイメージURI .dkr.ecr.ap-northeast-1.amazonaws.com/ を入力

クラスターの作成
ECS > クラスター > クラスターの作成 > FARGATE を選択
# クラスターの設定
クラスター名: nuxt-fargate-cluster

サービスの作成
ECS > クラスター > 「サービス」タブ > 作成
# サービスの設定
起動タイプ: FARGATE
タスク定義: nuxt-fargate-task
クラスター: nuxt-fargate-cluster
サービス名: nuxt-fargate-service
タスクの数: 2
最小ヘルス率: 50
最大率: 200
# ネットワーク構成
クラスター VPC: デフォルトVPC
サブネット: ap-northeast-1a, ap-northeast-1c
ロードバランサーの種類: ALB
ロードバランサー名: nuxt-fargate-load-balancer
## ロードバランス用のコンテナ
プロダクションリスナーポート: 80:HTTP
ターゲットグループ名: nuxt-fargate-target-group

確認
EC2 > ロードバランサー > 該当のELB選択 > DNS名
http://nuxt-fargate-load-balancer-*******.ap-northeast-1.elb.amazonaws.com/ にアクセスするとサイトが無事表示されました。

表示されない場合は、
- ECS > クラスター > タスク > ステータスが
RUNNINGになっている - EC2 > ターゲットグループ > 該当のターゲットグループ選択 > Targets > Statsが
healthyになっている
かを確認して unhealthy などになっていればトラブルシューティングを行う。
最初、ALBのターゲットの種類をインスタンスで設定してしまい、unhealthy でサイトも表示されないままになってしまいました。
ALBの作成、ECSの設定を再度Qiitaの記事参考にやり直して2回目で無事表示できました。
VPCやセキュリティグループも触るの試験勉強のハンズオン以来でしたが、とりあえず表示させる所までできてよかったです。