はじめに
CloudFormation のテンプレートに監視と WAF を追記して、cfn-lint で確認しようとしました。
追記して保存 → cfn-lint 実行。…警告1件だけ(W1011 という既知のもの)。「お、きれいに通った」と思って次の追記、また cfn-lint。…やっぱり同じ警告1件だけ。
順調だと思って deploy したら、こう言われました:「そのパラメータはテンプレートに存在しません」。追記したはずなのに?
cfn-lintもdeployも、私が編集していたのとは“別のファイル”を見ていました😅
「lint がずっと同じ結果」=順調、ではなく「そもそも見ているファイルが違う」サインだった、という話です。
環境
- AWS CloudFormation(YAML テンプレート)
- cfn-lint
- エディタ:VS Code / Cursor(複数フォルダを開いていた)
- 同じ
template.yamlが 2か所にあった(Git 管理用のクローンと、デプロイ作業用のコピー)
起きたこと
- エディタで
template.yamlを編集・保存(リソースをいくつか追記) - ターミナルで
cfn-lint template.yaml→ 毎回同じ警告1件だけ(W1011) - 追記を増やしても結果が変わらない(でも「エラーが無い」ので気づけない)
- いざ
deploy:
Parameters: [AlertEmail] do not exist in the template
→ 追記したはずの新パラメータが「無い」と言われる。
原因
template.yaml が2か所に別々に存在していて、編集していたファイルと、cfn-lint / deploy が読んでいたファイルが違ったのが原因でした。
| 操作 | 実際に見ていたファイル |
|---|---|
| エディタで編集・保存 | デプロイ作業用のコピー(古い置き場) |
cfn-lint / deploy(cd した先) |
Git 管理用のクローン(こちらが本命) |
cfn-lint がずっと「警告1件だけ」だったのは、追記が入っていない元テンプレートでも有効だったからです。エラーが出ない=自分の変更が反映されている、ではなく、「追記が反映されていないのに気づけていない」状態でした。
対処
まず「今いる場所」と「実際に読んでいるファイルの絶対パス」を確認すると、切り分けが早いです。
pwd
realpath template.yaml # いま cfn-lint が読むファイルの絶対パスを確認
これで「あれ、編集しているフォルダと違う」と気づけました。次に2つを比べると、片方にだけ追記が入っていました。
diff ~/work/app/template.yaml ~/repo/app/template.yaml
# → 片方にだけ追記行がある=別物だった
編集済みのファイルを、cfn-lint / deploy が見ている方へコピーして1本に統一しました。
cp ~/work/app/template.yaml ~/repo/app/template.yaml
diff ~/work/app/template.yaml ~/repo/app/template.yaml # 差分なし=一致
cfn-lint ~/repo/app/template.yaml # 追記が反映され、内容が変わった
以降は 同じファイルで 編集・lint・deploy・commit するようにして、ズレが起きないようにしました。
学び
-
「いま編集しているパス」と「lint / deploy が読むパス」が同じかを毎回意識する。迷ったら
pwdとrealpathで確認。 - lint の結果が“いつも同じ”なら要注意。「順調」ではなく「本当にそのファイルを見てる?」を疑うサイン。
- できるだけ同じファイルを複数の置き場に持たない。1本に統一する(どうしても2か所必要なら、毎回
diffで同期を確認)。 - ツールは「渡されたファイル」を正直に検査するだけ。人間が渡す先を間違えると、いくら直しても反映されない。
おわりに
「直してるのに変わらない…」の半分くらいは、直している場所が違うやつかもしれません😅 同じ罠にはまった人の、最初に realpath や diff で確認するきっかけになれば嬉しいです🙌