presents by IT Consulting 109

AWS – CloudFormationで環境構築 サブネット編

概要

CloudFormation を利用した環境構築について連載2回目。

前回は、VPCとInternetGatewayの作成、および、VPCへのアタッチをCloudFormation で構築する方法について記載しました。

本章「サブネット」編では以下の環境について構築を行います。
・サブネットを4つ作成
 サブネットはパブリックゾーン用とプライベートゾーンを想定してわける
 それぞれのゾーンはアベイラビリティーゾーンを分ける

シンプルにサブネットだけを作成する構成です。

 

イメージ図


それでは実際にコードを確認しながら説明していきます。

コード

AWSTemplateFormatVersion: 2010-09-09
Description: Creation of Subnet.

Parameters:
  ProjectCode:
    Type: String
    Default: itc109
    Description: Project Code

  VPC:
    Type: String
    Default: vpc
    Description: Set stack output value

  SUBNETCIDRpublicAZa:
    Type: String
    Default: 10.0.0.0/24
    Description: public AvailabilityZone(A) Subnet CIDR Block

  SUBNETCIDRpublicAZc:
    Type: String
    Default: 10.0.1.0/24
    Description: public AvailabilityZone(C) Subnet CIDR Block

  SUBNETCIDRprivateAZa:
    Type: String
    Default: 10.0.2.0/24
    Description: private AvailabilityZone(A) Subnet CIDR Block

  SUBNETCIDRprivateAZc:
    Type: String
    Default: 10.0.3.0/24
    Description: private AvailabilityZone(C) Subnet CIDR Block


Resources:
  SUBNETpublicAZa:
    DeletionPolicy: Retain
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !ImportValue
        'Fn::Sub': '${VPC}'
      CidrBlock:
        Fn::Sub: ${SUBNETCIDRpublicAZa}
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: 
            Fn::Sub: subnet-${ProjectCode}-public-apne1a

  SUBNETpublicAZc:
    DeletionPolicy: Retain
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !ImportValue
        'Fn::Sub': '${VPC}'
      CidrBlock:
        Fn::Sub: ${SUBNETCIDRpublicAZc}
      AvailabilityZone: ap-northeast-1c
      Tags:
        - Key: Name
          Value:
            Fn::Sub: subnet-${ProjectCode}-public-apne1c

  SUBNETprivateAZa:
    DeletionPolicy: Retain
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !ImportValue
        'Fn::Sub': '${VPC}'
      CidrBlock:
        Fn::Sub: ${SUBNETCIDRprivateAZa}
      AvailabilityZone: ap-northeast-1a
      Tags:
        - Key: Name
          Value: 
            Fn::Sub: subnet-${ProjectCode}-private-apne1a

  SUBNETprivateAZc:
    DeletionPolicy: Retain
    Type: 'AWS::EC2::Subnet'
    Properties:
      VpcId: !ImportValue
        'Fn::Sub': '${VPC}'
      CidrBlock:
        Fn::Sub: ${SUBNETCIDRprivateAZc}
      AvailabilityZone: ap-northeast-1c
      Tags:
        - Key: Name
          Value:
            Fn::Sub: subnet-${ProjectCode}-private-apne1c


Outputs:
  SUBNETpublicAZa:
    Description: 'Subnet For public Range, AZ:apne1a'
    Value: !Ref SUBNETpublicAZa
    Export:
      Name:
        Fn::Sub: subnet-public-apne1a

  SUBNETpublicAZc:
    Description: 'Subnet For public Range, AZ:apne1c'
    Value: !Ref SUBNETpublicAZc
    Export:
      Name:
        Fn::Sub: subnet-public-apne1c

  SUBNETprivateAZa:
    Description: 'Subnet For private Range, AZ:apne1a'
    Value: !Ref SUBNETprivateAZa
    Export:
      Name:
        Fn::Sub: subnet-private-apne1a

  SUBNETprivateAZc:
    Description: 'Subnet For private Range, AZ:apne1c'
    Value: !Ref SUBNETprivateAZc
    Export:
      Name:
        Fn::Sub: subnet-private-apne1c

実行後に出力される値。

キー値エクスポート名
SUBNETprivateAZasubnet-*****************subnet-private-apne1a
SUBNETprivateAZcsubnet-*****************subnet-private-apne1c
SUBNETpublicAZasubnet-***************** subnet-public-apne1a
SUBNETpublicAZcsubnet-*****************subnet-public-apne1c

スタックを実行することでサブネットが4つ作成されたと思います。
出力で求められる値は今後いろんなスタックからサブネットIDの値として参照されます。

AWS::EC2::Subnet

新規にサブネットを作成しています。

      VpcId: !ImportValue
        'Fn::Sub': '${VPC}'

CloudFormationで作成したVPCのIPをインポートしています。

この際、Parameter 項で設定している VPC の Default 値

Parameters:
  VPC:
    Type: String
    Default: vpc

この [ vpc ] という値をもとにCloudFormation内で出力されている値を探しに行きます。

複数のVPCをCloudFormationで作成する際は、環境を識別するコードを付けるなりして一意の値にする必要があります。

Outputs:
  VPCId:
    Value: !Ref VPC
    Export:
      Name: vpc-itc109

という感じで出力して

Parameters:
  VPC:
    Type: String
    Default: vpc-itc109

という感じで参照します。

 

次回は、今回作成したサブネットを利用してルートテーブルを構築する方法を紹介します。

 

補足

AWS CloudFormationテンプレートリファレンス
AWS::EC2::Subnet

 

この記事を書いた人
名前:TRUE's。 千葉県育ち、神奈川県在住のIT系フリーエンジニア。 IT系のナレッジサイトを不定期で更新中。 フォトグラファー兼エンジニアとして日々勤しんでいる。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です