この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
【小ネタ】CloudFormationで文字列内に変数を入れる。(YAML版)
こんにちは、岩本です。
CloudFormationを利用する際に、ある特定の値を変数として利用するケースは多いと思いますが、
ある文字列中に変数を挿入したい場合があるかと思います。
今回は、CloudFormationでIAM Policyを設定する際を例に、
ARN内に記載するリージョン
とAWS ID
を変数として利用する場合を記載します。
サンプル
AWSTemplateFormatVersion: '2010-09-09'
Description: TEST-Policy
Resources:
TestPolicy:
Properties:
PolicyDocument:
Statement:
- Action: lambda:InvokeFunction
Effect: Allow
Resource: !Sub arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:hogehoge
Version: '2012-10-17'
PolicyName: AWSLambdaTestPolicy
Roles:
- test-hogehoge-role
Type: AWS::IAM::Policy
解説
やりたい事
- 事前に設定した変数を元に
Resource: arn:aws:lambda:[AWSのリージョン]:[AWSのアカウントID]:function:hogehoge
と入力したい。
やった事
Resource:
以後に!Sub
関数を記載し、必要な箇所に${AWS::Region}
${AWS::AccountId}
と記載した。!Sub
とは?- CloudFormationに組み込まれている関数
Fn::Sub
の短縮記載で、ある値の入力文字列にある変数の代わりとなります。
- CloudFormationに組み込まれている関数
${AWS::Region}
${AWS::AccountId}
とは?- CloudFormationで事前に定義されたパラメータで、それぞれCloudFormationの実行リージョン・アカウントを取得します。
指定の変数を利用したい場合
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Label:
default: AWS Account
Parameters:
- AWSAccountID
Parameters:
AWSAccountID:
ConstraintDescription: AWS ID is Only Number with 12digit
Default: 123456789012
MinLength: 12
MaxLength: 12
AllowedPattern: "[0-9]*"
Description: Please enter Gambit System AWS ID!
Type: String
Resources:
TestPolicy:
Properties:
PolicyDocument:
Statement:
- Action: lambda:InvokeFunction
Effect: Allow
Resource: !Sub arn:aws:lambda:${AWS::Region}:${AWSAccountID}:function:hogehoge
Version: '2012-10-17'
PolicyName: AWSLambdaTestPolicy
Roles:
- test-hogehoge-role
Type: AWS::IAM::Policy
${AWS::AccountId}
を${AWSAccountID}
と変更しました。${AWSAccountID}
は、Parameters
で指定した値となり、上記のように任意の変数を利用する事も可能です。