CloudFormation組み込み関数をまとめてみた

こんにちは

普段CloudFormationをyamlでガリガリ書いているのですが、

今回は、避けては通れないCloudFormationの組み込み関数や条件関数をまとめてみました。

一度覚えると楽なのですが、Cloudformation初めたばかりの頃はなかなかややこしかったり、あまり使わないものは毎回公式ドキュメントを見ているので、一覧があると便利かなと。

気付いたら直すようにするのですが、もし抜けや漏れがあればコメントいただけると嬉しいです。


| 関数       |       説明 |    構文    |Fn::If 条件での利用 |
|:-----------------|:------------------|:------------------|:------------------|
| Fn::And   |・指定されたすべての条件が true に評価された場合は true を返します。<br>・条件のいずれかが false に評価された場合は false を返します。<br>・含めることができる条件の最小数は 2 で、最大数は 10 です。|・ Fn::And: [条件1,条件2,...]<br>・!And [条件1,条件2,...]|不可|
| Fn::Equals   |・2 つの値が等しいかどうかを比較します。<br>・2 つの値が同じ場合は true を返し、同じでない場合は false を返します。 |・Fn::Equals: [値1, 値2]<br>・!Equals [値1, 値2]|不可|
| Fn::Not   |・false と評価された条件に対しては、true を返します。<br>・true と評価された条件に対しては、false を返します。|・Fn::Not: [条件]<br>・!Not [条件]|不可|
| Fn::Or    |・指定された条件のいずれかが true に評価された場合は true を返します。 <br>・条件のすべてが false に評価された場合は false を返します。<br>・	含めることができる条件の最小数は 2 で、最大数は 10 です。|・Fn::Or: [条件1, 条件2,...]<br>・!Or [条件1, 条件2,...]|不可|
| Fn::If    |・指定された条件が true に評価された場合は 1 つの値を返し、指定された条件が false に評価された場合はもう 1 つの値を返します。<br>・対応するプロパティを削除するために、戻り値として AWS::NoValue 擬似パラメーターを使用できます。|・Fn::If: [条件（真偽値）, 真の場合の処理, 偽の場合の処理]<br>・!If [条件（真偽値）, 真の場合の処理, 偽の場合の処理]|可|
| Fn::Base64 |・入力文字列の Base64 表現を返します。<br>・この関数は通常、UserData プロパティを介して、 Amazon EC2 インスタンスに、エンコードされたデータを渡すために使用されます。|・Fn::Base64: エンコードしたい値<br>・!Base64 エンコードしたい値|可|
| Fn::FindInMap   |・Mappings セクションで宣言された 2 つのレベルのマッピングのキーに対応する値を返します。戻り値は、SecondLevelキー に割り当てられた値です。<br>・この関数は通常、UserData プロパティを介して、 Amazon EC2 インスタンスに、エンコードされたデータを渡すために使用されます。|・Fn::FindInMap: [ Map名, TopLevelキー, SecondLevelキー ]<br>・!FindInMap[ Map名, TopLevelキー, SecondLevelキー ]|可|
| Fn::GetAtt   |・テンプレートのリソースから属性の値を返します。<br>・特定のリソースに対する GetAtt の戻り値の詳細については、「[リソースとプロパティのリファレンス](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html)」でそのリソースのドキュメントを参照してください。|・Fn::GetAtt: [ リソースの論理名（論理ID), 属性名 ]<br>・!GetAtt リソースの論理名（論理ID).属性名|可|
| Fn::GetAzs   |・指定したリージョンのアベイラビリティーゾーンをアルファベット順にリストした配列を返します。|・Fn::GetAZs: リージョン名<br>・!GetAZs リージョン名|可|
| Fn::Join   |・一連の値を特定の区切り文字で区切って 1 つの値に追加します。<br>・区切り文字が空の文字列の場合、一連の値は区切り文字を使用することなく連結されます。|・Fn::Join: [ 区切り文字, [ 文字列1,文字列2,... ] ]<br>・!Join[ 区切り文字, [ 文字列1,文字列2,... ] ]|可|
| Fn::Select   |・インデックスによってオブジェクトのリストから 1 つのオブジェクトを返します。|・Fn::Select: [ インデックス, オブジェクトリスト ]<br>・!Select [ インデックス, オブジェクトリスト ] |可|
| Fn::Sub   |・指定した文字列に変数を埋め込むために通常使われます。<br>・テンプレートで、スタックを作成または更新するまで使用できない値を含むコマンドまたは出力を作成するために、この関数を使用できます。|・マッピングあり<br>Fn::Sub:<br> 　- 文字列（\\$\{変数名\} で変数を含める）<br>　- 変数名1: 値<br>　  変数名2: 値<br>・マッピングなし<br>Fn::Sub: String<br>・マッピングあり<br>!Sub:<br>　- 文字列（\\$\{変数名\} で変数を含める）<br>　- 変数名1: 値<br>　  変数名2: 値<br>・マッピングなし<br>!Sub: 文字列（\$\{変数名\} で変数を含める）|
| Ref       |・組み込み関数 Ref は、指定したパラメータまたはリソースの値を返します。<br>・パラメータの論理名を指定すると、それはパラメータの値を返します。<br>・リソースの論理名を指定すると、それはそのリソースを参照するために通常使用できる値を返します。|・Ref: 論理名（リソース又はパラメータ）<br>・!Ref 論理名（リソース又はパラメータ）|可|
| Fn::Cidr   |・組み込み関数 Fn::Cidr は CIDR アドレスブロックの配列を返します。<br>・返される CIDR ブロックの数はパラメータによって指定します。<br>・パラメータでユーザが入力したIPブロックやCIDR数、CIDRビット数に応じて、計算不要で自動でCIDRアドレスブロックを割り当てることができます。|・Fn::Cidr:<br>　 - IPブロック<br>　 - 生成するCIDRの数<br>　 - CIDRビット数<br>・!Cidr [IPブロック, 生成するCIDRの数, CIDRビット数 ]|不可|
| Fn::ImportValue   |・Fn::ImportValue 組み込み関数は、別のスタックによってエクスポートされた出力の値を返します。<br>・この関数は通常、クロススタック参照を作成するために使用されます。<br>・他スタックのエクスポートされた値の指定には、他スタックでエクスポート時に指定されたnameを利用します。このnameは同一アカウント内で一意になるようになっている（一意でない場合はスタック作成が失敗する）ため、インポート時はスタックの指定は不要で、エクスポートnameの指定のみでOKです。	|・Fn::ImportValue: インポートする値(name)<br>・!ImportValue インポートする値(name)|不可|
| Fn::Length   |・配列内の要素数を返すか、配列を返す組み込み関数が返す配列の要素数を返します。|・Fn::Length : 配列を返す組み込み関数<br>・Fn::Length : 配列|不可
| Fn::Split   |・文字列を文字のリストに分割し、配列を返します。<br>・, (カンマ) などの区切り記号で、分割の場所を指定します。<br>・文字列を分割したら、Fn::Select 関数を使用して特定の要素を選択することができるようになります。|・Fn::Split: [ 区切り文字, 分割したい文字列 ]<br>・!Split[ 区切り文字, 分割したい文字列 ]|不可|
| Fn::ToJsonString   |・Fn::ToJsonString 組み込み関数は、オブジェクトまたは配列を対応する JSON 文字列に変換します。|・Fn::ToJsonString: オブジェクト<br>・Fn::ToJsonString: 配列|不可|
| Fn::Transform   |・組み込み関数 Fn::Transform は、スタックテンプレートの一部に対してカスタム処理を実行するためのマクロを指定します。<br>・マクロを使用すると、検索して置換操作のような単純なアクションからテンプレート全体の広範な変換まで、テンプレートに対してカスタム処理を実行できるようになります。|・Fn::Transform:<br>Name : マクロ名<br>Parameters :<br>Key : パラメータ値<br>・Transform:<br>Name: マクロ名<br>Parameters:<br>Key: パラメータ値<br>|不可|

CloudFormationに取り組む方の役に立てば幸いです。

追伸：各関数のサンプルコードや注意点、つまづいた点などもここか別の記事に備忘していこうかなと思っています。