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
実行後に出力される値。
キー | 値 | 値エクスポート名 |
---|---|---|
SUBNETprivateAZa | subnet-***************** | subnet-private-apne1a |
SUBNETprivateAZc | subnet-***************** | subnet-private-apne1c |
SUBNETpublicAZa | subnet-***************** | subnet-public-apne1a |
SUBNETpublicAZc | subnet-***************** | 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