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

f:id:jotaki:20210321165648p:plain

前回に引き続き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

f:id:jotaki:20210322130752p:plain

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/*** を入力

f:id:jotaki:20210322130807p:plain

クラスターの作成

ECS > クラスター > クラスターの作成 > FARGATE を選択

# クラスターの設定
クラスター名: nuxt-fargate-cluster

f:id:jotaki:20210322130819p:plain

サービスの作成

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

f:id:jotaki:20210322130832p:plain

確認

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

f:id:jotaki:20210322131341p:plain

表示されない場合は、

  • ECS > クラスター > タスク > ステータスが RUNNING になっている
  • EC2 > ターゲットグループ > 該当のターゲットグループ選択 > Targets > Statsが healthy になっている

かを確認して unhealthy などになっていればトラブルシューティングを行う。

最初、ALBのターゲットの種類をインスタンスで設定してしまい、unhealthy でサイトも表示されないままになってしまいました。
ALBの作成、ECSの設定を再度Qiitaの記事参考にやり直して2回目で無事表示できました。
VPCやセキュリティグループも触るの試験勉強のハンズオン以来でしたが、とりあえず表示させる所までできてよかったです。