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などを変更できるようです。
本格的に利用するのであれば、テンプレート側を編集してクラスター名やサービスについても変更できるようにしても良いかもしれませんね。
なお、スタックの更新を行う際にはダウンタイムが発生する場合があります。一時的なサービスの停止が許されているのか、冗長化できているかなども確認する必要がありそうですね。
また、デフォルトではスタックを削除するとその時に作成されたリソースも全て消えてしまいます。その点も注意しましょう。
コメントを残す