かきかけ
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のプレフィックスを付けています。
- 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
条件関数
そのうち覚える?条件複雑にすると管理/読み解きも大変なので極力使いたくないな
- 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 を返します。
コメント