■ はじめに
https://dk521123.hatenablog.com/entry/2021/10/26/224812
https://dk521123.hatenablog.com/entry/2021/12/01/170326
の続き。 AWS CloudFormation (CFn) で、大体な仕組みは理解できたのだが サンプルをみていて、組み込み関数なるものがでてきたので よく使いそうなものをピックアップしてメモしておく。
目次
【0】組み込み関数・仕様 【1】Ref 【2】Fn::Sub 【3】Fn::GetAtt 【4】Fn::ImportValue 【5】Fn::FindInMap 【6】条件関数
【0】組み込み関数・仕様
* 以下の公式サイトから参照。
【1】Ref
* 指定したパラメータまたはリソース値を返却
構文
# 完全名関数の構文 Ref: <logicalName> # 短縮形の構文 !Ref <logicalName>
サンプル
Parameters: EnvironmentType: Description: Enter environment type Type: String Default: dev AllowedValues: - dev - stage - prod ... Name: !Ref EnvironmentType
【2】Fn::Sub
* 文字列内に変数をいれる => 変数と文字列を結合する際に使用
構文
# 完全名関数の構文 Fn::Sub: - String - Var1Name: Var1Value Var2Name: Var2Value # 短縮形の構文 !Sub - String - Var1Name: Var1Value Var2Name: Var2Value # 完全名関数の構文 Fn::Sub: String # 短縮形の構文 !Sub String
サンプル
Name: !Sub - www.${Domain} - { Domain: !Ref DomainName } BucketName: !Sub data-${AWS::Region}-${EnviromentType}-source
使用上の注意
* Bashとは異なり、「${変数}」「$変数(=${!変数})」と異なる動作になるので注意。 => 以下の関連記事のトラブルも参照。
https://dk521123.hatenablog.com/entry/2024/02/27/211050
公式ドキュメント
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-sub.html
より抜粋 ~~~~~~ 実行時に、AWS CloudFormation が関連する値と置き換わる変数のある文字列。 変数を ${MyVarName} として書き込みます。 ・・・略・・・ USD 記号と中括弧 (${}) をそのまま書き込むには、 最初の中括弧の後に感嘆符 (!) を追加します (${!Literal} など)。 CloudFormation は、このテキストを ${Literal} として解決します。 ~~~~~~
参考文献
https://chariosan.com/2019/08/11/cfn_fnsub/
【3】Fn::GetAtt
* テンプレートのリソースから属性値を返却 => リソースで生成した値(例:ARNなど)を取得したい場合に使用
構文
# 完全名関数の構文 Fn::GetAtt: [ <logicalNameOfResource>, <attributeName> ] # 短縮形の構文 !GetAtt <logicalNameOfResource>.<attributeName>
サンプル
Resources: # IAMRole CodePipelineServiceRole: Type: AWS::IAM::Role Properties: RoleName: CodeBuildServiceIamRole ... # CodePipeline CodePipeline: Type: AWS::CodePipeline::Pipeline Properties: Name: CodePipeline RoleArn: !GetAtt CodePipelineServiceRole.Arn
参考文献
https://dev.classmethod.jp/articles/cloudformation-tempate-reference-intrinsic-function/#getatt
【4】Fn::ImportValue
* 別のスタックによってエクスポートされた出力値を返却
構文
# 完全名関数の構文 Fn::ImportValue: sharedValueToImport # 短縮形の構文 !ImportValue sharedValueToImport
使用上の注意
* !ImportValue が含まれている場合、!Sub の短縮形を使用することはできない => 代わりに、完全な関数名を使用する必要がある
サンプル
# OK Fn::ImportValue: !Sub "${NetworkStack}-SubnetID" # NG # !ImportValue # !Sub "${NetworkStack}-SubnetID"
【5】Fn::FindInMap
* Mappings セクションで宣言されたマップのキーに対応する値を返却 * Mappings セクションの詳細は、以下の関連記事を参照
CloudFormation ~ Mappings ~
https://dk521123.hatenablog.com/entry/2024/03/09/000428
構文
# 完全名関数の構文 Fn::FindInMap: [ MapName, TopLevelKey, SecondLevelKey ] # 短縮形の構文 !FindInMap [ MapName, TopLevelKey, SecondLevelKey ] # MapName : Mappings セクションで宣言された、キーと値を含むマッピングの論理名。 # TopLevelKey : 最上位のキー名。この値は、キーと値のペアのリストです。 # SecondLevelKey : 2 番目のレベルのキー名で、 # TopLevelKey に割り当てられたリストのキーの 1 つに設定されます。
サンプル
Mappings: EnvMap: dev: Ec2InstanceType: t2.micro stage: Ec2InstanceType: t2.medium prod: Ec2InstanceType: t2.large Resources: MyEC2Instance: Type: "AWS::EC2::Instance" Properties: InstanceType: !FindInMap - EnvMap - !Ref EnvironmentType - Ec2InstanceType
【6】条件関数
* 以下の関連記事を参照のこと
CloudFormation ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2022/07/02/214543
関連記事
AWS CloudFormation ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/10/26/224812
AWS CloudFormation ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2021/12/01/170326
CloudFormation ~ 条件分岐 ~
https://dk521123.hatenablog.com/entry/2022/07/02/214543
CloudFormation ~ Mappings ~
https://dk521123.hatenablog.com/entry/2024/03/09/000428
AWS CloudFormation ~ 疑似パラメータ ~
https://dk521123.hatenablog.com/entry/2021/12/05/134313
AWS CloudFormation ~ DeletionPolicy 属性 ~
https://dk521123.hatenablog.com/entry/2021/12/27/211328
AWS CloudFormation ~ 認証情報の扱い ~
https://dk521123.hatenablog.com/entry/2021/12/28/224501
CloudFormation で Github/CodePipeline/CodeBuild を構築する
https://dk521123.hatenablog.com/entry/2021/12/26/155956
CloudFormationで変数を参照したら、エラー「Unresolved resource dependencies」が表示
https://dk521123.hatenablog.com/entry/2024/02/27/211050