CloudFormation を利用した環境構築について連載4回目。
これまでCloudFormationの初歩として、「VPC編」「サブネット編」「ルートテーブル編」を個別に説明してきましたが、これらのスタックを一括にまとめて実行した方が手っ取り早いので、今回はスタックをまとめる説明となります。
イメージ図
AWSTemplateFormatVersion: 2010-09-09
Description: Creation of VPC and Internet gateway, Subnet.
Parameters:
ProjectCode:
Type: String
Default: itc109
Description: Project Code
IPv4CIDRblock:
Type: String
Default: 10.0.0.0/16
Description: VPC CIDR Block
Tenancy:
Type: String
Default: default
Description: Tenancy
AllowedValues:
- default
- dedicated
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
TAGpublic:
Type: String
Default: public
Description: Please set a name
TAGprivate:
Type: String
Default: private
Description: Please set a name
Resources:
AttachGateway:
DeletionPolicy: Delete
Type: 'AWS::EC2::VPCGatewayAttachment'
Properties:
VpcId: !Ref VPC
InternetGatewayId: !Ref InternetGateway
VPC:
DeletionPolicy: Delete
Type: 'AWS::EC2::VPC'
Properties:
CidrBlock:
Fn::Sub: ${IPv4CIDRblock}
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
InstanceTenancy: !Ref Tenancy
Tags:
- Key: Name
Value:
Fn::Sub: vpc-${ProjectCode}
InternetGateway:
DeletionPolicy: Delete
Type: 'AWS::EC2::InternetGateway'
Properties:
Tags:
- Key: Name
Value:
Fn::Sub: igw-${ProjectCode}
SUBNETpublicAZa:
DeletionPolicy: Delete
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref VPC
CidrBlock:
Fn::Sub: ${SUBNETCIDRpublicAZa}
AvailabilityZone: ap-northeast-3a
Tags:
- Key: Name
Value:
Fn::Sub: subnet-${ProjectCode}-public-apne1a
SUBNETpublicAZc:
DeletionPolicy: Delete
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref VPC
CidrBlock:
Fn::Sub: ${SUBNETCIDRpublicAZc}
AvailabilityZone: ap-northeast-3c
Tags:
- Key: Name
Value:
Fn::Sub: subnet-${ProjectCode}-public-apne1c
SUBNETprivateAZa:
DeletionPolicy: Delete
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref VPC
CidrBlock:
Fn::Sub: ${SUBNETCIDRprivateAZa}
AvailabilityZone: ap-northeast-3a
Tags:
- Key: Name
Value:
Fn::Sub: subnet-${ProjectCode}-private-apne1a
SUBNETprivateAZc:
DeletionPolicy: Delete
Type: 'AWS::EC2::Subnet'
Properties:
VpcId: !Ref VPC
CidrBlock:
Fn::Sub: ${SUBNETCIDRprivateAZc}
AvailabilityZone: ap-northeast-3c
Tags:
- Key: Name
Value:
Fn::Sub: subnet-${ProjectCode}-private-apne1c
ROUTETABLEpublic:
DeletionPolicy: Delete
Type: 'AWS::EC2::RouteTable'
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value:
Fn::Sub: rtb-${ProjectCode}-${TAGpublic}
ROUTETABLEprivate:
DeletionPolicy: Delete
Type: 'AWS::EC2::RouteTable'
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value:
Fn::Sub: rtb-${ProjectCode}-${TAGprivate}
ROUTE:
DeletionPolicy: Delete
Type: 'AWS::EC2::Route'
Properties:
RouteTableId: !Ref ROUTETABLEpublic
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref InternetGateway
ASSOCIATIONpublicAZa:
DeletionPolicy: Delete
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref ROUTETABLEpublic
SubnetId:
Fn::Sub: ${SUBNETpublicAZa}
ASSOCIATIONpublicAZc:
DeletionPolicy: Delete
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref ROUTETABLEpublic
SubnetId:
Fn::Sub: ${SUBNETpublicAZc}
ASSOCIATIONprivateAZa:
DeletionPolicy: Delete
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref ROUTETABLEprivate
SubnetId:
Fn::Sub: ${SUBNETprivateAZa}
ASSOCIATIONprivateAZc:
DeletionPolicy: Delete
Type: 'AWS::EC2::SubnetRouteTableAssociation'
Properties:
RouteTableId: !Ref ROUTETABLEprivate
SubnetId:
Fn::Sub: ${SUBNETprivateAZc}
Outputs:
VPCId:
Value: !Ref VPC
Export:
Name:
Fn::Sub: vpc
InternetGatewayId:
Value: !Ref InternetGateway
Export:
Name:
Fn::Sub: igw
SUBNETpublicAZa:
Description: 'Subnet For public Range, AZ:a'
Value: !Ref SUBNETpublicAZa
Export:
Name:
Fn::Sub: subnet-public-apne1a
SUBNETpublicAZc:
Description: 'Subnet For public Range, AZ:c'
Value: !Ref SUBNETpublicAZc
Export:
Name:
Fn::Sub: subnet-public-apne1c
SUBNETprivateAZa:
Description: 'Subnet For private Range, AZ:a'
Value: !Ref SUBNETprivateAZa
Export:
Name:
Fn::Sub: subnet-private-apne1a
SUBNETprivateAZc:
Description: 'Subnet For private Range, AZ:c'
Value: !Ref SUBNETprivateAZc
Export:
Name:
Fn::Sub: subnet-private-apne1c
シンプルなVPC構成となりますが、サブネットを増やすなど応用しやすいテンプレートとなっています。