~~NOCACHE~~
~~DISCUSSION~~
かきかけ
## 3.組み込み関数
まずCloudFormationのテンプレートを見たときに最初に絶望する!Refや!Joinなどの[[https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html|組み込み関数]]を理解する。
cfn初心者なので誤り不足があっても許してください・・・。
### 前提
・YAML形式で記載しています。
### 参照系
^ 関数名 ^ 概要 ^ 備考 ^
| Ref | %%[Parameters](指定値)、[Resources](戻り値)、[擬似パラメータ]を参照%% | スタック内で参照 |
| ImportValue | 他スタックのOutputsパラメータを参照 | スタック外から参照 |
| FindInMap | [Mappings]セクションのSecondLevelKeyに割り当てられた値を参照 | スタック内で参照 |
| GetAtt | リソースで取得可能な属性の値を参照 | スタック内で参照 |
| GetAZs | アカウント内のデフォルトサブネットを参照 | スタック外から参照 |
--> Ref#
スタック内で参照を行う関数、下記3種類(だと思う)のパラメータを参照する。
・[Parameters]セクションのパラメータ(指定値)を参照
・[Resources]セクションのパラメータ(戻り値)を参照 [[https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html|戻り値]]の各リソースの[Return values]-[Ref]
・事前定義された[擬似パラメータ]を参照 [[https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/pseudo-parameter-reference.html|疑似パラメータ]]
参照先と参照元の関連性がわかりやすいように、テンプレート内で宣言するIDにParameters=Prm、Resources=Resのプレフィックスを付けています。
{{:Aws:CloudFormation:pasted:20220323-131347.png?direct 1200x0}}
<--
--> ImportValue#
他スタックのOutputsパラメータを参照する関数。
{{:Aws:CloudFormation:pasted:20220221-160155.png?direct 900x0}}
<--
--> FindInMap#
スタック内で参照を行う関数、下記のパラメータを参照する。
・[Mappings]セクションのSecondLevelKeyに割り当てられた値を参照します。
■形式
!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
■パラメータ
・MapName:マッピングの論理名
・TopLevelKey:キー
・SecondLevelKey:バリュー
■戻り値:
SecondLevelKey に割り当てられた値。
{{:Aws:CloudFormation:pasted:20220323-153749.png?direct 1000x0}}
<--
--> GetAtt#
まだ理解が追い付いていない、取得できる値とエラーとなる値の違いがわかりません。
[[https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-template-resource-type-ref.html|各リソース]]の[Return values]-[Fn::GetAtt]で定義された値が取得する関数。
■形式
!GetAtt logicalNameOfResource.attributeName
■パラメータ
・logicalNameOfResource:論理 ID
・attributeName:リソース固有の属性の名前
■戻り値:
属性の値
{{:Aws:CloudFormation:pasted:20220221-175900.png?direct 1000x0}}
<--
--> GetAZs#
指定したリージョンのアベイラビリティーゾーンをアルファベット順にリストした配列を、以下のルールによって返します。
■形式
!GetAZs RegionCode
■パラメータ
・RegionCode:[[https://docs.aws.amazon.com/ja_jp/general/latest/gr/rande.html#regional-endpoints|リージョンコード]]
■戻り値:
リージョンのアベイラビリティーゾーンのリスト
・デフォルトサブネットが1つでも作成されている場合は、デフォルトサブネットが作成されているAZのみ返す。
・デフォルトサブネットが1つも作成されていない場合は、全てのAZを返す。
アカウント作成後にAZが増えたか中途半端にデフォルトサブネットを削除した場合、全てのAZが返らないこととなります。
配列で返すため、!Selectや!Joinと組み合わせて利用することが殆どかと思います。
{{:Aws:CloudFormation:pasted:20220325-100805.png?direct 1000x0}}
<--
### 文字列操作系
^ 関数名 ^ 概要 ^ 備考 ^
| Join | カンマ区切りの配列(リスト)を特定の区切り文字で区切って1つの値にする。 | |
| Select | 配列(リスト)から1 つの値を抽出する。 | |
| Split | 文字列を区切り文字で分割しリスト化する。 | |
| Sub | 文字列と変数を結合して1つの値にする。 | |
--> Join#
■形式
!Join [ delimiter, [ comma-delimited list of values ] ]
■パラメータ
・delimiter:区切り文字
・comma-delimited list of values:カンマ区切りの配列(リスト)
{{:Aws:CloudFormation:pasted:20220328-165625.png?direct 1000x0}}
<--
--> Select#
■形式
!Select [ index, listOfObjects ]
■パラメータ
・index:0 から N-1 のインデックス値
・listOfObjects:オブジェクトが含まれているカンマ区切りの配列(リスト)
{{:Aws:CloudFormation:pasted:20220328-173247.png?direct 1000x0}}
<--
--> Split#
配列(リスト)で返すため、!Selectと組み合わせて利用する。
■形式
!Split [ delimiter, source string ]
■パラメータ
・delimiter:ソース文字列を区切る区切り文字
・source string:ソース文字列
{{:Aws:CloudFormation:pasted:20220328-174807.png?direct 1000x0}}
<--
--> 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関数内で定義する変数の値
{{:Aws:CloudFormation:pasted:20220403-164337.png?direct 1000x0}}
<--
### 特殊系
--> Cidr#
CIDR アドレスブロックをカンマ区切りの配列(リスト)で返します。
配列(リスト)で返すため、!Selectと組み合わせて利用する。
以下の形式/パラメータで記載します。
■形式
!Cidr [ ipBlock, count, cidrBits ]
■パラメータ
・ipBlock:より小さい CIDR ブロックに分割されるユーザー指定の CIDR アドレスブロック。
・count:生成する CIDR の数。有効な範囲は 1~256 です。
・cidrBits:CIDR のサブネットビット数。(例:8=/24、6=/27、1=/32)
{{:Aws:CloudFormation:pasted:20220325-150144.png?direct 1000x0}}
<--
--> 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 を返します。 | |
<--
{{tag>AWS CloudFormation}}