[AWS]ECS環境を作成するCloudFormationのテンプレート

今回は基本的なECS on EC2構成を作成するCloudFormationテンプレートを作成しました。

ECSについては個人利用ではあまり使うことはないと思いますが、AWSで実用的な環境を構築する上では必須だと思います。

今回は必要なセキュリティグループ、ECSクラスター周り、ロードバランサー、タスク定義とサービスを作成するテンプレートをそれぞれ作成したので、是非とも参考にしてみてください。

◆Github (テンプレートはこちら)
https://github.com/noname-work/aws-cloudformation/tree/master/ecs/ecs-on-ec2

構築環境


ユーザーがパブリックサブネット上に構築されたロードバランサーのエンドポイントにアクセスすることで、ECS上で実行されているコンテナにアクセスをする想定で環境を作成しています。

本来であればロードバランサーの前にはCDNサービスであるCloudFrontを挟んだり、AutoScalingポリシーを設定して負荷に応じたスケーリングを実装することが望ましいのですが、今回はそこまで触れていません。

必要に応じて追記してみてください。

事前準備


初めてECSを作成するアカウントではサービスにリンクしたECS用のロールが作成されていません

今回のテンプレートではサービスリンクロールを利用するため、[AWSServiceRoleForECS]があるか確認してください。
まだ作られていなかった場合は以下のコマンドで発行できます。

aws iam create-service-linked-role --aws-service-name ecs.amazonaws.com

また、構成図ではPrivateSubnetが作成してありますが、今回のテンプレートでは作成しませんので必要に応じて作成しておいてください。
その他、ロードバランサーにアタッチするACMも事前に用意する必要がありますのでご留意ください。

作成順序

今回は関連リソースが多いためテンプレートを分担しています。
そのため、順番に必要なリソースを作成する必要があります。

また、汎用性を重視しているため、スタックが分割しますがOutputsを使っていません。
ECSクラスター名やセキュリティグループのIDなどをOutputsで出力しておくと、パラメータを減らせるため用途に応じて調整すると良いですね。

◆作成順
・セキュリティグループの作成
・ECSクラスターと関連リソースの作成
・ロードバランサーの作成
・タスク定義とサービスの作成

セキュリティグループのパラメータ

パラメータ
ClusterName 作成予定のECSクラスター名を入力します。
VPCID セキュリティグループを作成するVPCのIDを選択します。これは作成予定のECSクラスターと同じVPCを選択する必要があります。

このテンプレートではECSインスタンスとロードバランサーで利用するセキュリティグループを作成します。

ECSのパラメータ

パラメータ
ClusterName 作成予定のECSクラスター名を入力します。
InstanceType ECSのホストインスタンスで利用するインスタンスタイプを選択します。
ECSSubnetIDs ECSインスタンスを立てるサブネットを選択します。
KeyName ECSインスタンスに接続するためのキーペアを選択します。
ImageId ECSに最適化されたAMIのIDを入力します。
ECSSecurityGroups ECSインスタンスにアタッチするセキュリティグループを選択します。
ScalingDesiredCapacity ECSインスタンスの希望数です。
ScalingMaxSize ECSインスタンスの最大数です。
ScalingMinSize ECSインスタンスの最小数です。

ECSクラスターとホストインスタンスを実行するためのAutoScalingグループを作成します。
先ほど作成したセキュリティグループはこのテンプレートで使用します。

ここで作成されるホストインスタンスにはSSMエージェントの操作を許可するIAMポリシーがアタッチされています。

ALBのパラメータ

パラメータ
ClusterName 作成予定のECSクラスター名を入力します。
VPCID ロードバランサーで使用するVPCのIDを選択します。これはECSクラスターと同じVPCを選択する必要があります。
ALBSubnetIDs ロードバランサーで使用するサブネットを指定します。これは2つ以上を選択する必要があります。
ALBCertificateARN ACMに登録したSSL証明書のARNを入力します。
ALBSecurityGroups ロードバランサーに設定するセキュリティグループを選択します。

ECSのサービスで利用するためのロードバランサーを作成します。

ここではHTTPS通信を許可するためにACMで証明書をアタッチします。

このステップで作成されるターゲットグループはサービスを作成する際に必要になります。

サービスのパラメータ

パラメータ
ClusterName 作成予定のECSクラスター名を入力します。
ServiceName ECSで実行するサービスの名前を設定します。
DesiredServiceCount サービスコンテナの希望数を入力します。
ImageURI 実行するコンテナイメージのURIを入力します。デフォルトではApacheを実行します。
ContainerPort コンテナポートを入力します。デフォルトのApacheを実行する場合のポートは80です。
ContainerName タスク定義で利用するコンテナの名前を入力します。
ServiceTargetGroup ECSサービスを管理するためのターゲットグループのARNを入力します。

タスク定義とサービスを作成します。

ここでは任意のコンテナイメージを実行することができますが、手軽に動作の確認ができるようにApacheの公式イメージをデフォルト値にしています。

パラメータにはロードバランサーを作成した時に一緒に生成しているターゲットグループのARNを渡してください。

環境の構築後


コンソールからECSクラスターとサービスが作成されていることが確認できました。


Apacheのコンテナイメージを立ち上げてみると、ブラウザからロードバランサーのエンドポイントにアクセスした際に「It works!」が表示されます。

正常にApacheが実行していることが分かりますね。

コメントを残す

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

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