記事の概要
AWSで技術検証する際にもCloudFormationを使用するようにしています
CloudFormation用のファイルを作成する際にARNやAccountIDを参照する場面が増えてきたので色々と便利だったのでまとめようと思います
使用頻度の高い変数はパラメータ化しておく
リソース名の後にDEVやSTGなどを付ける場合はパラメータ化しておくと便利です
AWSTemplateFormatVersion: "2010-09-09"
Description: "Example1"
Parameters:
Env:
Type: "String"
Default "Dev"
# ↓のようにすると選択形式になる
AllowedValues:
- "Dev"
- "Stg"
- "Prod"
Resources:
TimeStreamDB:
Type: AWS::Timestream::Database
Properties:
DatabaseName: !Sub "TimeStream-${Env}"
RegionやアカウントIDの参照
擬似パラメータ参照ですね
Resources:
TestBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: "GiziBucket"
Tags:
- Key: Region
Value: !Ref 'AWS::Region' # 東京リージョンでこのスタックを立ち上がると'ap-northeast-1'になる
- Key: AccountId
Value: !Ref 'AWS::AccountId' # 自分のAccountIdの値になる
CloudFormationで作成したリソースの参照
cloudformationで立ち上げたリソースのArn等を参照する
そもそも!Refや!GetAttを理解していないと難しい
リソース情報を参照するには!Refや!GetAttで何が返却されるのかを理解しておく必要がある
各リソースで参照した場合に何が返却されるかはCloudFormationドキュメントのReturn Valuesを読むしかない
例えば、IAMRoleの場合だとリソースネームが返却されると明記されている。
↓例
Resources:
VPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref VpcCidr
EnableDnsHostnames: "true"
EnableDnsSupport: "true"
InstanceTenancy: "default"
InternetGateway:
Type: AWS::EC2::InternetGateway
InternetGatewayAttachment:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
InternetGatewayId: !Ref InternetGateway # internetGatewayリソースのIDを参照
VpcId: !Ref VPC # VPCのIDを参照
参照を繋げる
一つの値の中に複数の参照系を活用したい場合
AWSTemplateFormatVersion: "2010-09-09"
Description: "Sample Stack"
Parameters:
Env:
Type: String
Default: "DEV"
AllowedValues:
- "DEV"
- "STG"
- "PROD"
Resources:
TestBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: !Sub
- Bucket-${Region}-${Env}
- Region: !Ref 'AWS::Region'
Env: !Ref EnvName