2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

備忘録:CFnの組み込み関数まとめ

Last updated at Posted at 2022-12-07

内容

CFnの組み込み関数をサンプルを使用して解説します。

サンプルテンプレート1

Resources:
  TestVpc:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: "10.0.0.0/16"
  TestSubnet:
    Type: AWS::EC2::Subnet
    Properties:
      CidrBlock: !Select [ 0, !Cidr [ !GetAtt TestVpc.CidrBlock, 1, 8 ]]
      VpcId: !Ref TestVpc
      AvailabilityZone:
        !Select [1, Fn::GetAZs: ""]
      Tags:
        - Key: Name
          Value: !Join [":",[test,subnet]]
Outputs:
  TestSubnetId:
    Value: !Ref TestSubnet
    Export:
      Name: TestSubnetId

Fn::GetAtt

テンプレートのリソースから属性の値を返す。
!GetAtt TestVpc.CidrBlock"10.0.0.0/16"を返す。

Fn::Cidr

Cidrブロックの配列を返す。
!Cidr [ !GetAtt TestVpc.CidrBlock, 1, 8 ]TestVpc.CidrBlock="10.0.0.0/16"から1つのCidrをサブネットビット数8(/24)で返す。

Fn::Select

インデックスによってオブジェクトのリストから1つのオブジェクトを返す。
!Select [ 0, !Cidr [ !GetAtt TestVpc.CidrBlock, 1, 8 ]]!Cidr [ !GetAtt TestVpc.CidrBlock, 1, 8 ]=10.0.0.0/24から0番目のオブジェクト10.0.0.0/24を返す。

Fn::GetAZs

指定したリージョンのアベイラビリティーゾーンをアルファベット順にリストした配列を返す。
!Select [1, Fn::GetAZs: ""]
Fn::GetAZs: ""の箇所でap-northeast-1a ap-northeast-1c ap-northeast-1dが返る。
!Select [1, "ap-northeast-1a","ap-northeast-1c","ap-northeast-1d"]となり、1で指定した2つ目のap-northeast-1c が返る。(インデックスは0からスタート)

Fn::Join

区切り文字で区切って 1 つの値に追加する。
Value: !Join [":",[test,subnet]]ではtest:subnetValueの値として返る。

Ref

指定したパラメータまたはリソースの値を返す。
Value: !Ref TestSubnetではTestSubnetで作成されたSubnet IDの値を返す

サンプルテンプレート2

Mappings:
  RegionMap:
    ap-northeast-1:
      AMI: "ami-072bfb8ae2c884cc4"
    ap-northeast-3:
      AMI: "ami-0e0cbf0f03ba99ee7"

Parameters:
  EnvType:
    Description: Environment type.
    Default: dev
    Type: String
    AllowedValues: [prod,dev,test]
    ConstraintDescription: must specify prod, dev, test.
  InstanceName:
    Type: String
    Description: Enter a Instance Name

Conditions:
  CreateProdResources: !Equals [!Ref EnvType, prod]
  CreateDevResources: !Equals [!Ref EnvType, dev]

Resources:
  EC2Instance:
    Type: "AWS::EC2::Instance"
    Properties:
      ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", AMI]
      InstanceType: !If [CreateProdResources, t2.small, !If [CreateDevResources, t2.micro, t2.nano]]
      NetworkInterfaces:
        - AssociatePublicIpAddress: "true"
          DeviceIndex: "0"
          SubnetId: !ImportValue TestSubnetId
      Tags:
        - Key: Name
          Value: !Sub ${InstanceName}

!FindInMap

Mappingsセクションで宣言された 2 つのレベルのマッピングのキーに対応する値を返す。
AWS::Regionは現在のリージョンを返すので東京リージョンであればap-northeast-1が返る。
!FindInMap [RegionMap, ap-northeast-1, AMI]となり、Mappingsセクションのami-072bfb8ae2c884cc4が返る。

!If

Trueの場合1つ目が、Falseの場合2つ目の値が返る。
ConditionsでCreateProdResourcesが指定された場合!If [CreateProdResources, t2.small, !If [CreateDevResources, t2.micro, t2.nano]]ではt2.smallが返る。
その他の場合は!If [CreateDevResources, t2.micro, t2.nano]が評価される。

Fn::ImportValue

OutputsセクションでExportした値を返す。
サンプルテンプレート1のOutputsセクションでExportしたTestSubnetIdSubnetId: !ImportValue TestSubnetIdの箇所で参照している。

Fn::Sub

値を代入する。
Value: !Sub ${InstanceName}の箇所ではParametersセクションで入力した値を受け取ってインスタンス名を設定する。

組み込み関数一覧

下記公式ドキュメント参照

2
4
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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?