Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

AWS CloudFormationの組み込み関数を使って柔軟なCFnテンプレートを作成しよ...

Tanuki
July 27, 2023

AWS CloudFormationの組み込み関数を使って柔軟なCFnテンプレートを作成しよう #devio2023

■イベントページ
【2023年7月7日(金)8日(土)】DevelopersIO 2023 〜 GETだけじゃもったいない、POSTしてPUTする2日間 〜
https://event.classmethod.jp/developers-io/2023

■Youtube 動画
AWS CloudFormationの組み込み関数を使って柔軟なCFnテンプレートを作成しよう

Tanuki

July 27, 2023
Tweet

More Decks by Tanuki

Other Decks in Technology

Transcript

  1. Ref

  2. • 指定された論理名に対応するリソースやパラメーターの 値を返す 例:VpcId: !Ref VPC → “VPC”というVPCのVPCID 組み込み関数 -

    Ref AWSTemplateFormatVersion: "2010-09-09" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: 10.0.0.0/24 AWSTemplateFormatVersion: "2010-09-09" Resources: SampleVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref SampleVPC CidrBlock: 10.0.0.0/24
  3. 組み込み関数 - Ref 例:VPCのReturn values Amazon EC2 resource type reference

    - AWS CloudFormation https://docs.aws.amazon.com/ja_jp/AWSCloudFormatio n/latest/UserGuide/AWS_EC2.html
  4. 組み込み関数 - Select 例:リストからパラメータで指定して、EC2インスタンスを起動 するアベイラビリティゾーンを選択 Parameters: AvailabilityZones: Type: List<AWS::EC2::AvailabilityZone::Name> Default:

    - ap-northeast-1a - ap-northeast-1c - ap-northeast-1d Resources: EC2Instance: Type: AWS::EC2::Instance Properties: AvailabilityZone: !Select [0, !Ref AvailabilityZones]
  5. 組み込み関数 - Cidr テンプレートを使い回すために可変であってほしい箇所 AWSTemplateFormatVersion: "2010-09-09" Resources: VPC: Type: AWS::EC2::VPC

    Properties: CidrBlock: 10.0.0.0/16 Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: 10.0.0.0/24
  6. 組み込み関数 - Cidr CidrとSelectを組み合わせてテンプレートに組み込み AWSTemplateFormatVersion: "2010-09-09" Parameters: VpcCidrBlock: Type: String

    Default: "10.0.0.0/16" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCidrBlock Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: !Select [0, !Cidr !Ref VpcCidrBlock, 1, 8]
  7. 組み込み関数 - Cidr !Cidr !Ref VpcCidrBlock, 1, 8 VpcCidrBlock =

    分割前のCidrブロック (10.0.0.0/16) 1 = 生成するサブネットのCidrブロックの数 8 = 生成するサブネットビット数 !Cidr !Ref VpcCidrBlock, 1, 8 = 10.0.0.0/24
  8. 組み込み関数 - Cidr !Select [0, !Cidr !Ref VpcCidrBlock, 1, 8]

    0 = 1番目の要素 !Cidr !Ref VpcCidrBlock, 1, 8 = 10.0.0.0/24 !Select [0, !Cidr !Ref VpcCidrBlock, 1, 8] = 10.0.0.0/24
  9. 組み込み関数 - Cidr !Cidr !Ref VpcCidrBlock, 2, 8 VpcCidrBlock =

    分割前のCidrブロック (10.0.0.0/16) 2 = 生成するサブネットのCidrブロックの数 8 = 生成するサブネットビット数 !Cidr !Ref VpcCidrBlock, 2, 8 = 10.0.0.0/24, 10.0.1.0/24
  10. 組み込み関数 - Cidr !Select [1, !Cidr !Ref VpcCidrBlock, 2, 8]

    1 = 2番目の要素 !Cidr !Ref VpcCidrBlock, 2, 8 = 10.0.0.0/24, 10.0.1.0/24 !Select [1, !Cidr !Ref VpcCidrBlock, 2, 8] = 10.0.1.0/24
  11. 組み込み関数 - Join AWSTemplateFormatVersion: "2010-09-09" Parameters: VpcCidrBlock: Type: String Default:

    "10.0.0.0/16" Environment: Type: String Default: "prod" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCidrBlock Tags: - Key: Name Value: !Join [ "-", [ !Ref Environment, "sample", "VPC"]] Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: !Select [0, !Cidr !Ref VpcCidrBlock, 1, 8] Tags: - Key: Name Value: !Join [ "-", [ !Ref Environment, "sample", "subnet"]]
  12. Sub

  13. 組み込み関数 - Sub AWSTemplateFormatVersion: "2010-09-09" Parameters: VpcCidrBlock: Type: String Default:

    "10.0.0.0/16" Environment: Type: String Default: "prd" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCidrBlock Tags: - Key: Name Value: !Sub ”${Environment}-sample-VPC" Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: !Select [0, !Cidr !Ref VpcCidrBlock, 1, 8] Tags: - Key: Name Value: !Sub ”${Environment}-sample-subnet"
  14. 組み込み関数 - JoinとSub CloudFormation の組み込み 関数 Fn::Sub 対 Fn::Join |

    DevelopersIO https://dev.classmethod.jp/a rticles/cloudformation-fnsub -vs-fnjoin/
  15. テンプレートの比較 AWSTemplateFormatVersion: "2010-09-09" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16

    Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: 10.0.0.0/24 AWSTemplateFormatVersion: "2010-09-09" Parameters: VpcCidrBlock: Type: String Default: "10.0.0.0/16" Environment: Type: String Default: "prod" Resources: VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCidrBlock Tags: - Key: Name Value: !Join [ "-", [ !Ref Environment, "sample", "VPC"]] Subnet: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC CidrBlock: !Select [0, !Cidr !Ref VpcCidrBlock, 1, 8] Tags: - Key: Name Value: !Join [ "-", [ !Ref Environment, "sample", "subnet"]]