はじめに
CloudFormation(以降 Cfn)を使用していて設定値を一部間違えた。
テンプレを更新し再デプロイしたけどリソースに反映されない。
上記のような経験はありませんか。
原因は Prameter 句をテンプレートファイルの更新だけで、
修正しようとしていることかもしれません。
本記事は Parameter 句の更新における躓きと解消方法を記載した内容となります。
結論
Paramete句の記載を修正する場合、
テンプ修正&再デプロイだけではなく CLI or コンソールからParamete値の修正が必要になる。
Cfn の Parameter 句とは
Cfn テンプレートにおける構成要素の一つであり、
「スタック構築時にユーザーに指定させる値を指定」させることができる項目
ユーザーに指定と言ってもデプロイ時に毎回指定が必要になるわではなく、
以下のようにテンプレートファイル内に事前に値を設定してくことが可能。
Parameters:
VPCStack:
Type: String
Default: test
直面した問題
Cfn リソースデプロイ後にテンプレート内で繰り返し、
使用するタグ名を Parametr 句から参照しようとしたところ、誤字を発見。
Parameters:test.yaml
TagName:
Type: String
Default: hoga #正しくはhoge
~
直ぐに修正し再デプロイ
Parameters:test.yaml
TagName:
Type: String
Default: hoge
~
デプロイしたテンプレートは修正されているが、
生成されたリソースの値は修正前の状態となってしまっている。。
そもそも変更点がParamete句だけでは更新点が無いため、再デプロイができない。
そのため、「一時的にタグを付与してデプロイ→付与したタグを削除してデプロイ」といった手間が必要になる
原因
AWS 公式ページで原因確認
AWS CloudFormation により、各パラメータには、NoEcho 属性で宣言されたパラメータを除いて、スタックに現在設定されている値が入力されます
スタックの直接更新に上記記載があった。
テンプレート更新時には、
初回デプロイ時に設定された Parameter 句の情報が存在している。
そのため、テンプレートファイルを更新して再デプロイしても、
初回デプロイ時に設定された値が優先されてしまっているということみたい。
解決方法
解決というより対応方法ですが、
CLI と GUI を用いて Parameter 句の更新が行えます。
CLI を用いてデプロイする際の更新方法
aws cloudformation deploy --stack-name {スタック名} \
--template-file <value>
--parameter-overrides {変更したいパラメータ句}={変更値}
aws cloudformation deploy --stack-name test --template-file ./s3.yaml --parameter-overrides TagName=hoge
コンソール を用いた更新方法
補足
テンプレとリソースが不一致の状況で「ドリフト検出」を行ってみたところ、
ドリフトの検出がされなかった。
Parameter句の更新はCloudformation側にて更新箇所として検知されないみたいです。
最後に
IaC だしコードがいつでも正と思っていると思わぬ落とし穴がありました。
本記事が誰かの役に立てば幸いです。