1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CloudFormationの参照系の技

Posted at

記事の概要

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の場合だとリソースネームが返却されると明記されている。
参照.PNG
↓例

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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?