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やセキュリティグループも触るの試験勉強のハンズオン以来でしたが、とりあえず表示させる所までできてよかったです。