[AWS]ECSのサンプルCloudFormationを動かす

 AWSによるインフラ構築に慣れていない人はCloudFormationの実行方法もなかなか分からないんじゃないかなと思い、メモがてら公式のECSサンプルテンプレートを実行してみました。

 なお、前提条件としてAWS CLIを利用可能な環境になっている必要があります

公式サイトからECSのテンプレートをコピー

 こちらのドキュメント(クリックで開く)から公式のECSテンプレートをコピーしてきます。
 ※ このテンプレートは2019/04/15現在のものです。

AWS CLIの準備


 AWS CLIの設定が済んでいるのであれば以下のcredentialsにシークレットキーとアクセスキーが保存されているはずです。このシークレットキーとアクセスキーは外部に漏れると悪用されてしまう可能性があるため十分に管理しましょう。

$ cat ~/.aws/credentials

スタックの作成コマンドを実行

aws cloudformation --profile [credentials登録アカウント] \
 create-stack --stack-name [スタック名] \
 --template-body file://[コピペしたテンプレートへのパス] \
 --parameters ParameterKey=KeyName,ParameterValue=[インスタンスのキーペア] \
 ParameterKey=VpcId,ParameterValue=[VPCのID] \
 ParameterKey=SubnetId,ParameterValue='[サブネットのID\,別のサブネットのID]' \
--capabilities CAPABILITY_IAM

 スタックの作成コマンドは上記の通りです。

 今回の私の環境では、

aws cloudformation  --profile my-account \
 create-stack --stack-name ecs-cfn \
 --template-body file://ecs-cfn.yml \
 --parameters ParameterKey=KeyName,ParameterValue=ecs-instance-key \
 ParameterKey=VpcId,ParameterValue=vpc-e238e099 \
 ParameterKey=SubnetId,ParameterValue='subnet-0c86da51\,subnet-a0491b9f' \
--capabilities CAPABILITY_IAM

 となりました。

※ ParameterValueを複数指定する場合にはカンマで区切るのだが、カンマはエスケープしないとダメという不親切設計なので注意。

解説
オプション 内容
–profile AWSアカウントの指定。~/.aws/credentialsの中にあるやつ。
create-stack スタックを新規作成する。
–stack-name CloudFormationのスタック名。
–template-body JSONまたはYMLでのCloudFormationテンプレートを指定。
–parameters テンプレート内の変数と値の組み合わせ。
–capabilities CAPABILITY_IAM CloudFormation側がIAMロールの変更を許容しても良いという設定。

コンソール側での確認


 コマンドが正常に通った場合にはAWSコンソールのCloudFormationから確認ができます。CREATE_COMPLETEになるまでしばらく待ちましょう。万が一失敗するとロールバックされます。


 しばらくすると必要なリソースができていることが確認できるかと思います。


 ECSのコンテナが正常に動作しているか確認するために、CLoudFormationで作成されたALBのDNSを使ってブラウザからアクセスして見ましょう。


 正常に稼働していれば上記のサンプルページが開きます。

ブラウザからのスタック更新

 CloudFormationのスタックを更新するには、テンプレートを書き直してAWS CLIにてスタックの更新コマンドを実行するか、コンソール上から更新を行うことができます。
 ただしコンソール上から更新を行うためには、テンプレート側で設定可能項目を事前に記述しておく必要があります。
 CloudFormationで作成したリソースをスタックの更新以外の方法で変更するとスタックの更新を行うことができなくなります。差分の発生にも注意しましょう。


 コンソールからの更新ではスタックの右上に[スタックの更新]ボタンがあります。


 現在のテンプレートを使用して更新すると・・・


 今回のサンプルテンプレートではインスタンスタイプやVPCなどを変更できるようです。
本格的に利用するのであれば、テンプレート側を編集してクラスター名やサービスについても変更できるようにしても良いかもしれませんね。

 なお、スタックの更新を行う際にはダウンタイムが発生する場合があります。一時的なサービスの停止が許されているのか、冗長化できているかなども確認する必要がありそうですね。
 また、デフォルトではスタックを削除するとその時に作成されたリソースも全て消えてしまいます。その点も注意しましょう。

コメントを残す

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

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