~~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}}