CloudFormationでパラメータごとにEC2インスタンスのUserDataを切り替える

AWS運用自動化サービス「Cloud Automator」

EC2インスタンス作成時に状況に応じて、異なるUserDataを実行したいことがあります。
例えば、CloudFormationのパラメータでインストールするPHPのバージョンを切り替えたいとします。

方法1

調べるとよく見る例です。
– Resourceを2つ定義する
– Conditionにマッチした一方のResourceのみが実際に作成される

問題点として、以下を感じました。
– UserData以外も重複して書くので行数が増える
– 他からRefで参照する場合、Resource名が複数になってしまう

方法2

Fn::If: を使って、Resource内でUserData部分だけを分岐させる方法です。

この場合は、コードの重複は減ります。
また、Resouceが単一なのでRefで参照が簡単です。

ただ、以下の状況だと面倒かもしれません。
– 3パターン以上になると、 Fn::If: で分岐が難しい

感想

今回、CloudFormationの説明ページの条件関数を見ました。
If文の書き方の説明に以下のように一行で書いてあります。

Fn::If: [condition_name, value_if_true, value_if_false]

ただ、UserDataは複数行になるので、書き方が最初わかりませんでした。
Yamlのリストの書き方を調べたところ、以下のように変形できることが分かり解決しました。

今回の仕事でyaml力が少し上がりました。

AWS運用自動化サービス「Cloud Automator」