目次

かきかけ

3.組み込み関数

まずCloudFormationのテンプレートを見たときに最初に絶望する!Ref!Joinなどの組み込み関数を理解する。
cfn初心者なので誤り不足があっても許してください・・・。

前提

・YAML形式で記載しています。

参照系

関数名 概要 備考
Ref [Parameters](指定値)、[Resources](戻り値)、[擬似パラメータ]を参照 スタック内で参照
ImportValue 他スタックのOutputsパラメータを参照 スタック外から参照
FindInMap [Mappings]セクションのSecondLevelKeyに割り当てられた値を参照 スタック内で参照
GetAtt リソースで取得可能な属性の値を参照 スタック内で参照
GetAZs アカウント内のデフォルトサブネットを参照 スタック外から参照
Ref
スタック内で参照を行う関数、下記3種類(だと思う)のパラメータを参照する。
・[Parameters]セクションのパラメータ(指定値)を参照
・[Resources]セクションのパラメータ(戻り値)を参照 戻り値の各リソースの[Return values]-[Ref]
・事前定義された[擬似パラメータ]を参照 疑似パラメータ
参照先と参照元の関連性がわかりやすいように、テンプレート内で宣言するIDにParameters=Prm、Resources=Resのプレフィックスを付けています。
ImportValue
他スタックのOutputsパラメータを参照する関数。
FindInMap
スタック内で参照を行う関数、下記のパラメータを参照する。
・[Mappings]セクションのSecondLevelKeyに割り当てられた値を参照します。

■形式
!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
 
■パラメータ
・MapName:マッピングの論理名
・TopLevelKey:キー
・SecondLevelKey:バリュー

■戻り値:
SecondLevelKey に割り当てられた値。

GetAtt
まだ理解が追い付いていない、取得できる値とエラーとなる値の違いがわかりません。
各リソースの[Return values]-[Fn::GetAtt]で定義された値が取得する関数。
■形式
!GetAtt logicalNameOfResource.attributeName
 
■パラメータ
・logicalNameOfResource:論理 ID
・attributeName:リソース固有の属性の名前

■戻り値:
属性の値

GetAZs
指定したリージョンのアベイラビリティーゾーンをアルファベット順にリストした配列を、以下のルールによって返します。
■形式
!GetAZs RegionCode
 
■パラメータ
・RegionCode:リージョンコード

■戻り値:
リージョンのアベイラビリティーゾーンのリスト
・デフォルトサブネットが1つでも作成されている場合は、デフォルトサブネットが作成されているAZのみ返す。
・デフォルトサブネットが1つも作成されていない場合は、全てのAZを返す。
アカウント作成後にAZが増えたか中途半端にデフォルトサブネットを削除した場合、全てのAZが返らないこととなります。
配列で返すため、!Selectや!Joinと組み合わせて利用することが殆どかと思います。

文字列操作系

関数名 概要 備考
Join カンマ区切りの配列(リスト)を特定の区切り文字で区切って1つの値にする。
Select 配列(リスト)から1 つの値を抽出する。
Split 文字列を区切り文字で分割しリスト化する。
Sub 文字列と変数を結合して1つの値にする。
Join
■形式
!Join [ delimiter, [ comma-delimited list of values ] ]
 
■パラメータ
・delimiter:区切り文字
・comma-delimited list of values:カンマ区切りの配列(リスト)
Select
■形式
!Select [ index, listOfObjects ]
 
■パラメータ
・index:0 から N-1 のインデックス値
・listOfObjects:オブジェクトが含まれているカンマ区切りの配列(リスト)
Split
配列(リスト)で返すため、!Selectと組み合わせて利用する。
 
■形式
!Split [ delimiter, source string ]
 
■パラメータ
・delimiter:ソース文字列を区切る区切り文字
・source string:ソース文字列
Sub
■形式
①Sub内で変数を定義しない場合
・[String]には疑似パラメータやRef組み込み関数を${}形式で利用可能${AWS::Region}…など
 
!Sub String

②Sub内で変数を定義する場合
・[String]には疑似パラメータやRef組み込み関数を${}形式で利用可能${AWS::Region}…など
・[String]には2つ目の引数で定義した変数を利用可能(複数定義できる)
 
!Sub
- String
- Var1Name: Var1Value
 Var2Name: Var2Value

■パラメータ
・String:文字列と変数を${}形式で指定する。
・Var1Name:Sub関数内で定義する変数名
・Var2Value:Sub関数内で定義する変数の値

特殊系

Cidr
CIDR アドレスブロックをカンマ区切りの配列(リスト)で返します。
配列(リスト)で返すため、!Selectと組み合わせて利用する。
 
以下の形式/パラメータで記載します。
■形式
!Cidr [ ipBlock, count, cidrBits ]
 
■パラメータ
・ipBlock:より小さい CIDR ブロックに分割されるユーザー指定の CIDR アドレスブロック。
・count:生成する CIDR の数。有効な範囲は 1~256 です。
・cidrBits:CIDR のサブネットビット数。(例:8=/24、6=/27、1=/32)

Transform
そのうち覚える、きっと玄人が使う関数
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-transform.html
Base64
そのうち覚える
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-base64.html

条件関数

そのうち覚える?条件複雑にすると管理/読み解きも大変なので極力使いたくないな

Condition
[Resources]セクションのパラメータ、指定した[Conditions]セクションの論理IDの結果がTrueの場合リソースを作成し、Falseの場合作成しません。

■形式
!Condition conditionName

■パラメータ
・conditionName:[Conditions]セクションの論理IDを指定します。

Conditions
■形式
!Conditions:
 Logical ID:
 Intrinsic function

■パラメータ
・Logical ID:論理ID
・Intrinsic function:下記関数を用い、条件を記載します。

関数名 構文 概要 備考
And !And [条件1 ,条件2…] 指定されたすべての条件が true に評価された場合は true を返します。
条件のいずれかが false に評価された場合は false を返します
Equals !Equals [比較する値1, 比較する値2] 2 つの値が等しいかどうかを比較します。2 つの値が同じ場合は true を返し、同じでない場合は false を返します。
If !If [条件式, trueの値, falseの値] 指定された条件が true の場合は 2つ目の引数の値を返し、指定された条件が false の場合はもう 3つ目の引数の値を返します。
メタデータ属性、更新ポリシー属性、 [Resources] セクションと [Outputs]セクションのプロパティ値でサポートされています。
対応するプロパティを削除するために、戻り値として AWS::NoValue 擬似パラメーターを使用できます。
Not !Not [条件式] false と評価された条件に対しては、true を返し、true と評価された条件に対しては、false を返します。
Or !Or [条件1 ,条件2…] 指定された条件のいずれかが true に評価された場合は true を返します。条件のすべてが false に評価された場合は false を返します。