今回はECS on Fargate構成を作成するCloudFormationテンプレートを作成しました。
Fargateを採用すればECSのホストとなるEC2インスタンスを管理する手間がなくなりますね。
EC2インスタンスをホストにする方が基本的にはコストが安く抑えられますが、Fargateにもスポットタイプがあったりするのでうまく利用すればコストを抑えつつ管理工数を減らすことができますね。
今回は必要なセキュリティグループ、ECSクラスター、ロードバランサー、タスク定義とサービスを作成するテンプレートをそれぞれ作成したので、是非とも参考にしてみてください。
◆Github (テンプレートはこちら)
https://github.com/noname-work/aws-cloudformation/tree/master/ecs/ecs-on-fargate
構成図
基本的には以前作成したECS on EC2と同じですが、ホストインスタンスの作成がない分シンプルになっています。
ただしFargateを実行するためにタスク実行ロールを作成していたり、タスク定義周りの細かなオプションが追加されているなど所々でテンプレートの内容に差異があることには注意が必要ですね。
事前準備
初めてECSを作成するアカウントではサービスにリンクしたECS用のロールが作成されていません。
今回のテンプレートではサービスリンクロールを利用するため、[AWSServiceRoleForECS]があるか確認してください。
まだ作られていなかった場合は以下のコマンドで発行できます。
aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com
構成図ではPrivateSubnetが作成してありますが、今回のテンプレートでは作成しませんので必要に応じて作成しておいてください。
また、Fargateを利用する上ではプライベートリンクの作成が望ましいので、別途設定しておくと良いでそう。
その他、ロードバランサーにアタッチするACMも事前に用意する必要がありますのでご留意ください。
作成順序
今回は関連リソースが多いためテンプレートを分担しています。
そのため、順番に必要なリソースを作成する必要があります。
また、汎用性を重視しているため、スタックが分割しますがOutputsを使っていません。
ECSクラスター名やセキュリティグループのIDなどをOutputsで出力しておくと、パラメータを減らせるため用途に応じて調整すると良いですね。
◆作成順
・セキュリティグループの作成
・ECSクラスターの作成
・ロードバランサーの作成
・タスク定義とサービスの作成
サービスのパラメータ
ClusterName | 作成予定のECSクラスター名を入力します。 |
ServiceName | ECSで実行するサービスの名前を設定します。 |
DesiredServiceCount | サービスコンテナの希望数を入力します。 |
ImageURI | 実行するコンテナイメージのURIを入力します。デフォルトではApacheを実行します。 |
ContainerPort | コンテナポートを入力します。デフォルトのApacheを実行する場合のポートは80です。 |
ContainerName | タスク定義で利用するコンテナの名前を入力します。 |
ServiceTargetGroup | ECSサービスを管理するためのターゲットグループのARNを入力します。 |
FargateSubnetIDs | Fargateを実行するサブネットを1つ以上指定します。 |
ECSSecurityGroups | Fargateにアタッチするセキュリティグループを指定します。 |
基本的な設定はEC2の時と同じなので大きな差分があるタスク定義とサービス作成の部分のみ記載します。
該当するテンプレートはcreate-ecs-service.ymlです。
おわりに
上記画像のように、登録済みコンテナインスタンスが0個にも関わらずタスクコンテナが2台正常に起動していることが分かりますね。
コメントを残す