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周りです。