AWS CloudFormationの「テンプレートが変更されました」という警告について調べてみた。

マネコンははかなきものにて、かく程なくうつろひさぶらふなり
2022.01.25

こんにちは、AWS事業本部 福岡オフィスのべこみん(@beco_minn)です。

AWS CloudFormation(以下、Cfn)初心者の私がマネジメントコンソール上からCfnを触っていると、「テンプレートが変更されました」という警告が出てきました。
今回はその警告の原因と対処方法について調べてみた記事になります。
※本記事で使用したテンプレートは全てjson形式です。

いきなりまとめ

  • マネジメントコンソール上からCfnテンプレートファイルをアップロードする場合、ファイル名は半角で、記号は一部半角記号のみ使うようにしましょう。
    • -(ハイフン)、.(ドット)、 _(アンダースコア)、 *(アスタリスク)は使ってもOK
    • 上記以外の半角記号は使用非推奨
    • 全角文字、¥(円マーク)は使用不可
  • 対処したい場合、一度スタック作成をキャンセルし、修正したファイル名でもう一度アップロードしましょう。
  • 今回のケースではテンプレートの中身そのものは変更されていない。

本題

何が起きたの?

私が先日マネージメントコンソール上からCfnでスタック作成→テンプレートファイルをアップロード→...と手順を進めていると、スタック作成 ステップ4「レビュー」の画面最下部にこんな警告文が。

テンプレートが変更されました
CloudFormationは、アップロードされたテンプレートと、このオペレーションに使用されているテンプレートとの間に変更を検出しました。変更が意図的であることを確認します。

いや、テンプレートの変更なんてしてないっすけど。。。

一旦スタックの作成をキャンセルし、ファイル名はそのままでテンプレートファイルのアップロードを再度行ってみると。。。

はい。
ファイル名「template(test).json」がUTF-8でエンコーディングされ、「template%28test%29.json」と表示されていました。

どうやらこれが原因っぽい。

対処方法

行っているスタックの作成を一旦キャンセルし、ファイル名を修正した後に再度スタックの作成を行いました。
ファイル名に使用しても警告文が表示されない文字種は下記の通りです。

  • 半角英数字
  • 一部半角記号
    • -(ハイフン)
    • .(ドット)
    • _(アンダースコア)
    • *(アスタリスク)

また、あまり推奨はしませんが、警告文内のこのオペレーションに使用されるテンプレートには、コンソールからアップロードされたテンプレートとは異なる変更が含まれている可能性があることを了承します。にチェックを入れてスタックの作成を行っても正常にスタックは作成されました。

おまけ

気になったのでファイル名として使用可能な各文字について調べてみました。
※ファイル名以外でこの警告が出るバターンもあるかもしれませんが、本記事では触れていません。

テンプレートファイル名に使える文字、使えない文字

半角英数字、半角記号、全角文字を試してみました。

文字種 使用の可否
半角英数字 全て使用可
半角記号 -(ハイフン)
.(ドット)
_(アンダースコア)
*(アスタリスク)
のみ使用推奨
全角文字 全て使用不可

半角英数字

全文字使用可能。
半角英数字のみのファイル名の場合、今回の警告文は出ません。

半角記号

半角記号は上述の4つのみ正常にファイル名が表示され、警告文は出ませんでした。
また、¥(円マーク)と\(バックスラッシュ)の使用は特に注意が必要です。
今回はMacOSでファイル名に使用可能な各記号について一覧にまとめました。

記号 変換後 備考
- - 推奨
. . 推奨
_ _ 推奨
* * 推奨
(半角スペース) %20 非推奨
! %21 非推奨
" %22 非推奨
# %23 非推奨
$ %24 非推奨
% %25 非推奨
& %26 非推奨
' %27 非推奨
( %28 非推奨
) %29 非推奨
+ %2B 非推奨
, %2C 非推奨
; %3B 非推奨
%3E 非推奨
? %3F 非推奨
@ %40 非推奨
[ %5B 非推奨
] %5D 非推奨
^ %5E 非推奨
` %60 非推奨
{ %7B 非推奨
| %7C 非推奨
} %7D 非推奨
~ %7E 非推奨
" %2522 非推奨
¥ %C2%A5 使用不可
後述の全角文字同様、この記号が入っているとそもそもS3からのロード時にアクセスが拒否される。
\ 非推奨
この記号より前のファイル名が表示されない。

全角文字

¥と同様に、(恐らくS3からのロード時に)S3へのアクセスが拒否されるため、テンプレートファイル名に全角文字を含めることは出来ません。

S3バケットを確認したところ該当のファイルは存在したため、アップロードは出来ているようです。
恐らくこの辺りが関係しているのかな?と推測していますが、この件については本記事のテーマから逸れるので原因特定はしていません。

S3上のマルチバイトファイル名でハマった話

最後に

マネジメントコンソールは表示内容がちょくちょく変更されるのでこの警告文も表示されなくなる可能性はありますが、今回は気になったので調べてみました。
ぽちぽちオプションを選択していただけなのに「テンプレートが変更されました。」なんて出てきたらびっくりしますよね。
この記事がどなたかのお役に立てれば幸いです。
以上、べこみんでした。