PHP Slim 環境構築(15) ECS(手動で設定するFargate編)
Introduction
前回は、コンテナをECS(EC2インスタンス)で動作させてみました。
今回は、EC2インスタンスからFargateに変更して同様に構築します。
この一連のシリーズは、自分への備忘録が第一目的のため、相当不親切です。
申し訳ございません。
しかし、もはや、Slimと関係ないですね。
AWS
ECR
前回と同じです。
このリポジトリのURIは、<<AWS-ACCOUNT-ID>>.dkr.ecr.ap-northeast-1.amazonaws.com/hoge-repo
になります。
ビルド
これも前回と同じです。すでにビルド済みのイメージがECRに登録されているものとします。
IAM(ロールの作成)
前回作成したhoge-ecs-userと同様です。
これは、一応新規で作ることにします。なお、前回も書きましたが、これでは権限が強すぎですね。
パラメータ | 値 |
---|---|
ロール名 | fuga-ecs-user |
AWSサービス | Elastic Container Service Task |
ポリシー | AmazonRDSFullAccess, AmazonDynamoDBFullAccess, AmazonS3FullAccess |
EC2(ターゲットグループ)
ロードバランサの設定前に、そのターゲットグループを設定しておきます。
EC2インスタンスを使ったECSと異なり、ターゲットの種類はIPになります。
パラメータ | 値 |
---|---|
名前 | fuga-target |
ターゲットの種類 | インスタンス |
ポート | 3128 |
ヘルスチェック | http /favicon.ico |
EC2(セキュリティグループ)
前回と同じく、以下の二種類のアクセスに対するセキュリティグループを定義します。
- ロードバランサへのアクセス
外部からのhttp(s)のアクセスです。
パラメータ | 値 |
---|---|
名前 | fuga-http-sg |
インバウンド | 80(0.0.0.0/0), 443(0.0.0.0/0) |
- Dockerコンテナへのアクセス
Fargateへのアクセスです。ロードバランスのIPアドレスレンジを指定します。
なお、EC2では動的ポートマッピングを使用していたので可能性のあるポートの範囲を指定していましたが、今回はNginxのポートをそのまま指定します。
パラメータ | 値 |
---|---|
名前 | fuga-instance-sg |
インバウンド | 3128(ロードバランサのVPC) |
AWS Certificate Manager
SSLを使う場合は、こちらで証明書を発行します。今回も説明は割愛します。
EC2(ロードバランサ)
ALBの設定を行います。これはEC2もFargateも変わりません。
パラメータ | 値 |
---|---|
名前 | fuga-alb |
スキーム | インターネット向け |
リスナー | 80, 443(証明書が必要です) |
AZ | ap-northeast-1a, 1c, 1d全部 |
セキュリティグループ | fuga-http-sg |
ターゲットグループ | fuga-target |
ECS(クラスター)
これはEC2インスタンス用のクラスターよりも、かなり単純になります。
パラメータ | 値 |
---|---|
クラスターテンプレート | ネットワーキング |
クラスター名 | fuga-cluster |
ECS(タスク定義)
ECSで生成されたインスタンスにDockerコンテナを載せるためのタスク定義を行います。
EC2インスタンス用と違うのはネットワークモードと、タスクメモリとタスクCPUが指定しなければいけない、ポートマッピングがコンテナ側のみ(ネットワークモードの違い)ぐらいです。
パラメータ | 値 |
---|---|
起動タイプ | FARGATE |
タスク定義名 | fuga-task |
タスクロール | fuga-ecs-user |
ネットワークモード | awsvpc |
タスク実行ロール | ecsTaskExecuteRole(自動生成される) |
タスクメモリ | 0.5GB (本当はちゃんと設定する。とりあえず最低値) |
タスクCPU | 0.25vCPU (本当はちゃんと設定する。とりあえず最低値) |
コンテナ名 | fuga-container |
イメージ | <<AWS-ACCOUNT-ID>>.dkr.ecr.ap-northeast-1.amazonaws.com/hoge-repo:latest |
メモリ制限 | 設定なし |
ポートマッピング | コンテナ(3128) (ホスト側のポート指定はなし) |
ECS(サービス追加)
タスクを元にECSにサービスを追加します。
パブリックIPをDISABLEDにすると、ECRからイメージが読み込めませんでした。
VPCエンドポイントを指定したりするなどが必要かもしれませんので、今後調査したいところです。
パラメータ | 値 |
---|---|
起動タイプ | FARGATE |
タスク定義 | fuga-task |
クラスタ | fuga-cluster |
サービス名 | fuga-service |
サービスタイプ | REPLICA |
タスクの数 | 1 |
デプロイ | ローリングアップデート |
ロードバランサー | fuga-alb |
セキュリティグループ | fuga-instance-sg |
パブリックIPの自動割り当て | ENABLED |
プロダクションリスナーポート | 80 |
ロードバランス用のコンテナターゲット | fuga-target |
AutoScaling | 無効 |
次
次はCI/CD周りです。