問題
Name タイプ - AWS CloudFormationで列挙されたリソースの名前をテンプレートで指定すると、そのテンプレート上でそのリソースに変更が加わったときそのままではupdateができなくなる。
対策
A. 名前を明示的につける
絶対にそのリソースのプロパティを変更しないと確信できるなら有効
B. 名前を明示的につけない
CloudFormationが独自のルールで名前をつけることになる。
(2016/06/17時点で)ELBのように「{{stack名}}-{{リソース名}}-{{ランダム文字列}}」のようなわかりやすい形で名前をつけてくれるならこれで事足りるがRDSのように「{{ランダム文字列}}」のような名前をつけられると非常に識別性が低く辛い。
C. 名前を明示的につけ、末尾にバージョン番号をつける
人が識別しやすい形で名前をつけ、その末尾に「-3」や「-11」のようなバージョン番号をつける。
stack更新時にリソース名の問題が出た場合、末尾のバージョン番号を更新する。
D. 名前を明示的につけ、末尾にランダム文字列をつける
人が識別しやすい形で名前をつけ、その末尾に「-tk8ko3e1」のようなランダム文字列をつける。
stack更新時にリソース名の問題が出た場合、末尾のランダム文字列を更新する。
※ 次のようなコマンドでランダム文字列を生成すると便利
cat /dev/urandom | base64 | tr -dc 'a-z0-9' | fold -w 8 | head -n 1
E. 'Name'タグをつけてConsole上の表示カラム設定から'Name'カラムを表示するようにする
EC2インスタンスなどではデフォルトで表示されているNameタグカラムをELB
まとめ
個人的にはDがおすすめ。
D >= B >>>> C >>>>>>>> A
変更しないリソースとかそうそうないのでAはおすすめしない。