[AWS]Fargateでコンテナイメージを実行する

今回は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です。

おわりに


Fargateを実行するECSを作成しました。

上記画像のように、登録済みコンテナインスタンスが0個にも関わらずタスクコンテナが2台正常に起動していることが分かりますね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)