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

More than 5 years have passed since last update.

Cloudformationで3AZVPCの環境を作ってみた

Last updated at Posted at 2020-08-25

Cloudformationをきちんと触ったことがなかったので定番の3AZ環境を作ってみました。
(↓こういつやつ)
image.png

コード

CloudFormation.yml
---
    AWSTemplateFormatVersion: '2010-09-09'
    Description: AWSCloudformationTest
######################################################################
    Metadata:
      AWS::CloudFormation::Interface:
      #コンソールでパラメータをグループ化およびソートする方法を定義するメタデータキー
        ParameterGroups:
        #パラメーターグループタイプ、グループ名を指定する場所、各グループ内のパラメーター、パラメーターが表示される順序のリスト
        #VPC_ConfigurationというLabelに明示的に指定したParametersを紐づけてマネジメントコンソールで表示させる
        - 
            Label:
                default: VPC_Configuration
            Parameters:
                - VPCName
                - CidrBlock
                - EnableDnsSupport
                - EnableDnsHostnames
                - InstanceTenancy
        - 
            Label:
                default: Subnet01Configuration
            Parameters:
                - PrivateSubnet01Name
                - PublicSubnet01Name
                - PrivatePublicSubnet01AvailabilityZone
                - PrivateSubnet01CidrBlock
                - PublicSubnet01CidrBlock
        - 
            Label:
                default: Subnet02Configuration
            Parameters:
                - PrivateSubnet02Name
                - PublicSubnet02Name
                - PrivatePublicSubnet02AvailabilityZone
                - PrivateSubnet02CidrBlock
                - PublicSubnet02CidrBlock
        - 
            Label:
                default: subnet03Configuration
            Parameters:
                - PrivateSubnet03Name
                - PublicSubnet03Name
                - PrivatePublicSubnet03AvailabilityZone
                - PrivateSubnet03CidrBlock
                - PublicSubnet03CidrBlock
        ParameterLabels:
        #スタックが作成または更新されたときに AWS CloudFormation コンソールに表示されるパラメーターとそのフレンドリ名のマッピング
        #ParameterGroups:とParameters:を紐づけている
                VPCName:
                    default:"VPCName"
                CidrBlock:
                    default:"CidrBlock:"
                EnableDnsSupport:
                    default:"EnableDnsSupport"
                EnableDnsHostnames:
                    default:"EnableDnsSupport"
                InstanceTenancy:
                    default:"InstanceTenancy"
                PrivateSubnet01Name:
                    default:"PrivateSubnet01Name"
                PrivatePublicSubnet01AvailabilityZone:
                    default:"PrivatePublicSubnet01AvailabilityZone"
                PrivateSubnet01CidrBlock:
                    default:"PrivateSubnet01CidrBlock:"
                PrivateSubnet02Name:
                    default:"PrivateSubnet02Name"
                PrivatePublicSubnet02AvailabilityZone:
                    default:"PrivatePublic02AvailabilityZone"
                PrivateSubnet02CidrBlock:
                    default:"PrivateSubnet02CidrBlock:"
                PrivateSubnet03Name:
                    default:"PrivateSubnet03Name"
                PrivatePublicSubnet03AvailabilityZone:
                    default:"PrivatePublicSubnet03AvailabilityZone"
                PrivateSubnet03CidrBlock:
                    default:"PrivateSubnet03CidrBlock:"
                PublicSubnet01Name:
                    default:"PublicSubnet01Name"
                PublicSubnet01CidrBlock:
                    default:"PublicSubnet01CidrBlock:"
                PublicSubnet02Name:
                    default:"PublicSubnet02Name"
                PublicSubnet02CidrBlock:
                    default:"PublicSubnet02CidrBlock:"
                PubliceSubnet03Name:
                    default:"PublicSubnet03Name"
                PublicSubnet03CidrBlock:
                    default:"PublicSubnet03CidrBlock:"      
######################################################################
    #パラメータの入力値               
    Parameters:
        VPCName:
            Type: String
        CidrBlock:
            Type: String
            Default: 10.0.0.0/16
        EnableDnsSupport:
            Type: String
            Default: true
            AllowedValues:
                - true
                - false
        EnableDnsHostnames:
            Type: String
            Default: true
            AllowedValues:
                - true
                - false
        InstanceTenancy: 
            Type: String
            Default: default
            AllowedValues:
                - default
                - dedicated          
        PrivateSubnet01Name:
            Type: String
            Default: privatesubnet-01
        PrivatePublicSubnet01AvailabilityZone:
            Type: AWS::EC2::AvailabilityZone::Name
            Default: ap-northeast-1a
        PrivateSubnet01CidrBlock:
            Type: String
            Default: 10.0.1.0/24
        PrivateSubnet02Name:
            Type: String
            Default: privatesubnet-02
        PrivatePublicSubnet02AvailabilityZone:
            Type: AWS::EC2::AvailabilityZone::Name
            Default: ap-northeast-1c
        PrivateSubnet02CidrBlock:
            Type: String
            Default: 10.0.2.0/24
        PrivateSubnet03Name:
            Type: String
            Default: privatesubnet-03
        PrivatePublicSubnet03AvailabilityZone:
            Type: AWS::EC2::AvailabilityZone::Name
            Default: ap-northeast-1d
        PrivateSubnet03CidrBlock:
            Type: String
            Default: 10.0.3.0/24
        PublicSubnet01Name:
            Type: String
            Default: publicsubnet-01
        PublicSubnet01CidrBlock:
            Type: String
            Default: 10.0.4.0/24       
        PublicSubnet02Name:
            Type: String
            Default: publicsubnet-02
        PublicSubnet02CidrBlock:
            Type: String
            Default: 10.0.5.0/24       
        PublicSubnet03Name:
            Type: String
            Default: publicsubnet-03
        PublicSubnet03CidrBlock:
            Type: String
            Default: 10.0.6.0/24       
######################################################################
    Resources:
    #VPCの作成
        CreateVPC:
            Type: AWS::EC2::VPC
            Properties:
                CidrBlock: !Ref CidrBlock
                EnableDnsSupport: !Ref EnableDnsSupport
                EnableDnsHostnames: !Ref EnableDnsHostnames
                InstanceTenancy: !Ref InstanceTenancy
                Tags:
                - Key: Name
                  Value: !Ref VPCName
    #インターネットゲートウェイの作成とVPCへのアタッチ
        CreateInternetGateway:
            Type: AWS::EC2::InternetGateway
            Properties:
                Tags:
                - Key: Name
                  Value: !Sub ${VPCName}-igw
        AttachInternetGateway:
            Type: AWS::EC2::VPCGatewayAttachment
            Properties:
                VpcId: !Ref CreateVPC
                InternetGatewayId: !Ref CreateInternetGateway
    #プライベートサブネットの作成             
        CreatePrivateSubnet01:
            Type: AWS::EC2::Subnet
            Properties: 
                #AssignIpv6AddressOnCreation: false
                AvailabilityZone: !Ref PrivatePublicSubnet01AvailabilityZone
                CidrBlock: !Ref PrivateSubnet01CidrBlock
                #Ipv6CidrBlock: String #IPv6を使う場合はv6のCIFRブロックの指定が必須。
                MapPublicIpOnLaunch: false #PrivateSubnetの定義なのでfalse
                Tags: 
                - Key: Name
                  Value: !Ref PrivateSubnet01Name
                VpcId: !Ref CreateVPC
        CreatePrivateSubnet02:
            Type: AWS::EC2::Subnet
            Properties: 
                AvailabilityZone: !Ref PrivatePublicSubnet02AvailabilityZone
                CidrBlock: !Ref PrivateSubnet02CidrBlock
                MapPublicIpOnLaunch: false #PrivateSubnetの定義なのでfalse
                Tags: 
                - Key: Name
                  Value: !Ref PrivateSubnet02Name
                VpcId: !Ref CreateVPC
        CreatePrivateSubnet03:
            Type: AWS::EC2::Subnet
            Properties: 
                AvailabilityZone: !Ref PrivatePublicSubnet03AvailabilityZone
                CidrBlock: !Ref PrivateSubnet03CidrBlock
                MapPublicIpOnLaunch: false #PrivateSubnetの定義なのでfalse
                Tags: 
                - Key: Name
                  Value: !Ref PrivateSubnet03Name
                VpcId: !Ref CreateVPC
    #パブリックサブネットの作成
        CreatePublicSubnet01:
            Type: AWS::EC2::Subnet
            Properties: 
                AvailabilityZone: !Ref PrivatePublicSubnet01AvailabilityZone
                CidrBlock: !Ref PublicSubnet01CidrBlock
                MapPublicIpOnLaunch: true #PublicSubnetの定義なのでtrue
                Tags: 
                - Key: Name
                  Value: !Ref PublicSubnet01Name
                VpcId: !Ref CreateVPC
        CreatePublicSubnet02:
            Type: AWS::EC2::Subnet
            Properties: 
                AvailabilityZone: !Ref PrivatePublicSubnet02AvailabilityZone
                CidrBlock: !Ref PublicSubnet02CidrBlock
                MapPublicIpOnLaunch: true #PublicSubnetの定義なのでtrue
                Tags: 
                - Key: Name
                  Value: !Ref PublicSubnet02Name
                VpcId: !Ref CreateVPC
        CreatePublicSubnet03:              
            Type: AWS::EC2::Subnet
            Properties: 
                AvailabilityZone: !Ref PrivatePublicSubnet03AvailabilityZone
                CidrBlock: !Ref PublicSubnet03CidrBlock
                MapPublicIpOnLaunch: true #PublicSubnetの定義なのでtrue
                Tags: 
                - Key: Name
                  Value: !Ref PublicSubnet03Name
                VpcId: !Ref CreateVPC
    #プライベートルートテーブルの作成
        CreatePrivateRouteTable01:
            Type: AWS::EC2::RouteTable
            Properties:
                Tags: 
                - Key: Name
                  Value: !Sub ${VPCName}-private-rt01 
                VpcId: !Ref CreateVPC
        CreatePrivateRouteTable02:
            Type: AWS::EC2::RouteTable
            Properties:
                Tags: 
                - Key: Name
                  Value: !Sub ${VPCName}-private-rt02
                VpcId: !Ref CreateVPC
        CreatePrivateRouteTable03:
            Type: AWS::EC2::RouteTable
            Properties:
                Tags: 
                - Key: Name
                  Value: !Sub ${VPCName}-private-rt03
                VpcId: !Ref CreateVPC
    #プライベートテーブルの関連付け
        PrivateSubnetRouteTableAssociation01: 
            Type: AWS::EC2::SubnetRouteTableAssociation
            Properties: 
                SubnetId: !Ref CreatePrivateSubnet01
                RouteTableId: !Ref CreatePrivateRouteTable01
        PrivateSubnetRouteTableAssociation02:
            Type: AWS::EC2::SubnetRouteTableAssociation
            Properties: 
                SubnetId: !Ref CreatePrivateSubnet02
                RouteTableId: !Ref CreatePrivateRouteTable02
        PrivateSubnetRouteTableAssociation03:
            Type: AWS::EC2::SubnetRouteTableAssociation
            Properties: 
                SubnetId: !Ref CreatePrivateSubnet03
                RouteTableId: !Ref CreatePrivateRouteTable03
    #パブリックルートテーブルの作成
        CreatePublicRouteTable01:
            Type: AWS::EC2::RouteTable
            Properties:
                Tags: 
                - Key: Name
                  Value: !Sub ${VPCName}-public-rt01
                VpcId: !Ref CreateVPC
        AddPublicRoute01: 
            Type: AWS::EC2::Route
            Properties: 
                RouteTableId: !Ref CreatePublicRouteTable01
                DestinationCidrBlock: "0.0.0.0/0"
                GatewayId: !Ref CreateInternetGateway
            DependsOn: CreatePublicRouteTable01
        CreatePublicRouteTable02:
            Type: AWS::EC2::RouteTable
            Properties:
                Tags: 
                - Key: Name
                  Value: !Sub ${VPCName}-public-rt02
                VpcId: !Ref CreateVPC
        AddPublicRoute02: 
            Type: AWS::EC2::Route
            Properties: 
                RouteTableId: !Ref CreatePublicRouteTable02
                DestinationCidrBlock: "0.0.0.0/0"
                GatewayId: !Ref CreateInternetGateway
            DependsOn: CreatePublicRouteTable02
        CreatePublicRouteTable03:
            Type: AWS::EC2::RouteTable
            Properties:
                Tags: 
                - Key: Name
                  Value: !Sub ${VPCName}-public-rt03
                VpcId: !Ref CreateVPC
        AddPublicRoute03: 
            Type: AWS::EC2::Route
            Properties: 
                RouteTableId: !Ref CreatePublicRouteTable03
                DestinationCidrBlock: "0.0.0.0/0"
                GatewayId: !Ref CreateInternetGateway
            DependsOn: CreatePublicRouteTable03
0
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
0
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?