CloudFormationで3層アーキテクチャ用VPCを作る[②VPC/subnet編]

前回に続き、今回はVPC/Subnet設計。
まずは名称、CIDR、AZ配置方針を固めるところまで。
セキュリティグループやルートテーブル、他のVPCコンポーネント等は次回以降で作成していく。

VPC/Subnet設計

種別 Name CIDR az
VPC mainVPC 172.16.0.0/16
subnet pubWEB1 172.16.10.0/24 ap-northeast-1a
subnet pubWEB2 172.16.11.0/24 ap-northeast-1b
subnet prvAP1 172.16.20.0/24 ap-northeast-1a
subnet prvAP2 172.16.21.0/24 ap-northeast-1b
subnet prvDB1 172.16.30.0/24 ap-northeast-1a
subnet prvDB2 172.16.31.0/24 ap-northeast-1b

●ポイント

  • Nameにpubのつくサブネットはパブリック、prvのつくサブネットはプライベート。
  • Name末尾/CIDRの1の位にのつくサブネットはAZ1(ap-northeast-1a)。
  • Name末尾/CIDRの1の位に1のつくサブネットはAZ2(ap-northeast-1b)。
  • 各層はCIDR第3オクテットで識別。10台はWEB,20台はAP,30台はDB。

これをテンプレート化する。

CloudFormationテンプレート

今回はYAMLで書く。
設定値の管理をしやすくしたり、共通化するため、Mappings/FindInMap関数を活用する。 Mappings
FindInMAp関数

●ポイント

  • Mappingsでパラメータを一括管理する。(CidrBlock,subnetのAZ配置)
  • TagのNameはテンプレート側で挿入する。
  • Mappingsのパラメータを呼び出すときは、FindInMap関数を利用する。
AWSTemplateFormatVersion: 2010-09-09
Description: CloudFormation VPC
Mappings:
  TagsMap:
    EnvName:
      Name: username
  VPCCiderMap:
    mainVPC:
      CidrBlock: 172.16.0.0/16
  SubnetMap:
    pubWEB1:
      CidrBlock: 172.16.10.0/24
      AZ: ap-northeast-1a
    pubWEB2:
      CidrBlock: 172.16.11.0/24
      AZ: ap-northeast-1b
    prvAP1:
      CidrBlock: 172.16.20.0/24
      AZ: ap-northeast-1a
    prvAP2:
      CidrBlock: 172.16.21.0/24
      AZ: ap-northeast-1b
    prvDB1:
      CidrBlock: 172.16.30.0/24
      AZ: ap-northeast-1a
    prvDB2:
      CidrBlock: 172.16.31.0/24
      AZ: ap-northeast-1b

Resources:
# VPC
  mainVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: !FindInMap
        - VPCCiderMap
        - mainVPC
        - CidrBlock
      EnableDnsSupport: 'true'
      EnableDnsHostnames: 'true'
      InstanceTenancy: 'default'
      Tags:
        - 
          Key: Name
          Value: !FindInMap
            - TagsMap
            - EnvName
            - Name
# Subnet
  pubWEB1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref mainVPC
      CidrBlock: !FindInMap
        - SubnetMap
        - pubWEB1
        - CidrBlock
      AvailabilityZone: !FindInMap
        - SubnetMap
        - pubWEB1
        - AZ
      Tags:
        -
          Key: Name
          Value: !FindInMap
            - TagsMap
            - EnvName
            - Name
  pubWEB2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref mainVPC
      CidrBlock: !FindInMap
        - SubnetMap
        - pubWEB2
        - CidrBlock
      AvailabilityZone: !FindInMap
        - SubnetMap
        - pubWEB2
        - AZ
      Tags:
        -
          Key: Name
          Value: !FindInMap
            - TagsMap
            - EnvName
            - Name
  prvAP1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref mainVPC
      CidrBlock: !FindInMap
        - SubnetMap
        - prvAP1
        - CidrBlock
      AvailabilityZone: !FindInMap
        - SubnetMap
        - prvAP1
        - AZ
      Tags:
        -
          Key: Name
          Value: !FindInMap
            - TagsMap
            - EnvName
            - Name
  prvAP2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref mainVPC
      CidrBlock: !FindInMap
        - SubnetMap
        - prvAP2
        - CidrBlock
      AvailabilityZone: !FindInMap
        - SubnetMap
        - prvAP2
        - AZ
      Tags:
        -
          Key: Name
          Value: !FindInMap
            - TagsMap
            - EnvName
            - Name
  prvDB1:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref mainVPC
      CidrBlock: !FindInMap
        - SubnetMap
        - prvDB1
        - CidrBlock
      AvailabilityZone: !FindInMap
        - SubnetMap
        - prvDB1
        - AZ
      Tags:
        -
          Key: Name
          Value: !FindInMap
            - TagsMap
            - EnvName
            - Name
  prvDB2:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref mainVPC
      CidrBlock: !FindInMap
        - SubnetMap
        - prvDB2
        - CidrBlock
      AvailabilityZone: !FindInMap
        - SubnetMap
        - prvDB2
        - AZ
      Tags:
        -
          Key: Name
          Value: !FindInMap
            - TagsMap
            - EnvName
            - Name

シェアする

  • このエントリーをはてなブックマークに追加

フォローする