この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
CloudFormationのパラメータって便利ですよね。環境名を定義したり、DynamoDBテーブル名を定義したりです。
そんなパラメータに設定できるDefault
ですが、これは最初の1回しか参照されません。
そのため、値を変更する場合はDefault
の値を変更してもダメです。
やってみる
次のCloudFormationテンプレートがあるとします。SNSトピックを1つ作成しており、トピック名に環境名のdev
を付与しています。
sample.yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Sample Stack
Parameters:
Env:
Type: String
Default: dev
Resources:
FooBarSNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Sub foo-bar-sns-topic-${Env}
1. まずは普通にデプロイする
実際にデプロイしてみます。
aws cloudformation deploy \
--template-file sample.yaml \
--stack-name foo-bar-sample-stack \
--no-fail-on-empty-changeset
CloudFormationのパラメータはDefault
のdev
が反映されています。
SNSトピックもバッチリと作成されています。
2. Defaultの値を変更してデプロイする
開発環境の名前(dev
)をコードネームのorange
に変更することになったとします。
それに伴って、CloudFormationのパラメータのDefault
の値を変更します。
sample.yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Sample Stack
Parameters:
Env:
Type: String
Default: orange
Resources:
FooBarSNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Sub foo-bar-sns-topic-${Env}
この状態でデプロイします。
aws cloudformation deploy \
--template-file sample.yaml \
--stack-name foo-bar-sample-stack \
--no-fail-on-empty-changeset
コマンド実行すると、「変更するものが無いからデプロイしないよ」と言われました。
Waiting for changeset to be created..
No changes to deploy. Stack foo-bar-sample-stack is up to date
3. パラメータを上書きしてデプロイする
Default
が反映されないことを確認するために、CloudFormationテンプレートのパラメータにある環境名をdev
に戻します。
sample.yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: Sample Stack
Parameters:
Env:
Type: String
Default: dev
Resources:
FooBarSNSTopic:
Type: AWS::SNS::Topic
Properties:
TopicName: !Sub foo-bar-sns-topic-${Env}
このファイルをデプロイします。このとき、新しい環境名のorange
をコマンド実行時に指定します。
aws cloudformation deploy \
--template-file sample.yaml \
--stack-name foo-bar-sample-stack \
--no-fail-on-empty-changeset \
--parameter-overrides Env=orange
今度は成功しました。
Waiting for changeset to be created..
Waiting for stack create/update to complete
Successfully created/updated stack - foo-bar-sample-stack
CloudFormationを確認すると、バッチリと変更されています。
SNSトピック名も変更されています。
さいごに
CloudFormationのパラメータの値をあとから変更する事は少ないかもしれませんが、Default
を使っている場合は注意が必要です。
そもそも、Default
は「1回目にパラメータが未指定なら使う値」という動作です。
「パラメータが未指定ならダメ」を望むなら、Default
は使わない方が良いですね。