0
0

【AWS】CloudFormation再デプロイ時の設定値とテンプレの不一致について

Posted at

はじめに

CloudFormation(以降 Cfn)を使用していて設定値を一部間違えた。
テンプレを更新し再デプロイしたけどリソースに反映されない。
上記のような経験はありませんか。

原因は Prameter 句をテンプレートファイルの更新だけで、
修正しようとしていることかもしれません。
本記事は Parameter 句の更新における躓きと解消方法を記載した内容となります。

結論

Paramete句の記載を修正する場合、
テンプ修正&再デプロイだけではなく CLI or コンソールからParamete値の修正が必要になる。

Cfn の Parameter 句とは

Cfn テンプレートにおける構成要素の一つであり、
「スタック構築時にユーザーに指定させる値を指定」させることができる項目
image.png

ユーザーに指定と言ってもデプロイ時に毎回指定が必要になるわではなく、
以下のようにテンプレートファイル内に事前に値を設定してくことが可能。

test.yaml
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
        

デプロイしたテンプレートは修正されているが、
生成されたリソースの値は修正前の状態となってしまっている。。
image.png

image.png

そもそも変更点が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

コンソール を用いた更新方法

image.png

補足

テンプレとリソースが不一致の状況で「ドリフト検出」を行ってみたところ、
ドリフトの検出がされなかった。
Parameter句の更新はCloudformation側にて更新箇所として検知されないみたいです。
image.png

最後に

IaC だしコードがいつでも正と思っていると思わぬ落とし穴がありました。
本記事が誰かの役に立てば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0