はじめに
前々回の記事:はじめてのAWS CloudFormation -S3バケット作成編-
前回の記事:はじめてのAWS CloudFormation -IAMユーザー作成編-
引き続きCloudFormationを学ぼうという試みと取り組んだ内容の記録です。
今回はCloudFormationでVPC(VPC、サブネット、IGW、ルートテーブル)を作成してみます。
方針
作成するVPC環境の方針を考えます。
- 作成するVPCは1つ。
- VPCエンドポイントやEC2間の名前解決に備えDNSホスト名を有効化する。
- サブネットはパブリックとプライベートをAZを分けて2つずつ作成する。
- VPCとサブネットのCIDRは以下の通りとする(デプロイ時にパラメータとして任意に指定できる方式にする)。
- VPC:10.1.0.0/16
- パブリックサブネットA(AZ:ap-northeast-1a):10.1.10.0/24
- パブリックサブネットC(AZ:ap-northeast-1c):10.1.20.0/24
- プライベートサブネットA(AZ:ap-northeast-1a):10.1.30.0/24
- プライベートサブネットC(AZ:ap-northeast-1c):10.1.40.0/24
- IGWを作成し、パブリックサブネットのデフォルトゲートウェイとしてIGWを指定する。
- DHCPオプションセットについてはデフォルトで作成されるものを利用する(テンプレート内で明示的に作成しない)。
- タグ「Key:Env, Value:CFn-test」を付与する。
テンプレート用パラメータの確認
公式ドキュメントから各リソースで指定可能なPropertiesを確認します。
各リソースの細かいパラメータの中身は割愛。
AWS公式ドキュメント - AWS::EC2::VPC
AWS公式ドキュメント - AWS::EC2::Subnet
AWS公式ドキュメント - AWS::EC2::InternetGateway
AWS公式ドキュメント - AWS::EC2::VPCGatewayAttachment
AWS公式ドキュメント - AWS::EC2::RouteTable
AWS公式ドキュメント - AWS::EC2::Route
AWS公式ドキュメント - AWS::EC2::GatewayRouteTableAssociation
完成したCloudFormationテンプレート
AWSTemplateFormatVersion: 2010-09-09
Description: Create VPC
Parameters:
VpcCidr:
Type: String
Default: "10.1.0.0/16"
PubSubnetACidr:
Type: String
Default: "10.1.10.0/24"
PubSubnetCCidr:
Type: String
Default: "10.1.20.0/24"
PriSubnetACidr:
Type: String
Default: "10.1.30.0/24"
PriSubnetCCidr:
Type: String
Default: "10.1.40.0/24"
Resources:
#VPC
CFnVpc:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !Ref VpcCidr
EnableDnsHostnames: true
EnableDnsSupport: true
Tags:
- Key: Env
Value: CFn-test
#Subnet
CFnPubSubnetA:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: "ap-northeast-1a"
VpcId: !Ref CFnVpc
CidrBlock: !Ref PubSubnetACidr
Tags:
- Key: Env
Value: CFn-test
CFnPubSubnetC:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: "ap-northeast-1c"
VpcId: !Ref CFnVpc
CidrBlock: !Ref PubSubnetCCidr
Tags:
- Key: Env
Value: CFn-test
CFnPriSubnetA:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: "ap-northeast-1a"
VpcId: !Ref CFnVpc
CidrBlock: !Ref PriSubnetACidr
Tags:
- Key: Env
Value: CFn-test
CFnPriSubnetC:
Type: AWS::EC2::Subnet
Properties:
AvailabilityZone: "ap-northeast-1c"
VpcId: !Ref CFnVpc
CidrBlock: !Ref PriSubnetCCidr
Tags:
- Key: Env
Value: CFn-test
#InternetGW
CFnIGW:
Type: AWS::EC2::InternetGateway
Properties:
Tags:
- Key: Env
Value: CFn-test
AttachGateway:
Type: AWS::EC2::VPCGatewayAttachment
Properties:
VpcId: !Ref CFnVpc
InternetGatewayId: !Ref CFnIGW
#RouteTable
PubRouteTable:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref CFnVpc
Tags:
- Key: Env
Value: CFn-test
PubRoute:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref PubRouteTable
DestinationCidrBlock: 0.0.0.0/0
GatewayId: !Ref CFnIGW
PubRouteTableAssociationA:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref CFnPubSubnetA
RouteTableId: !Ref PubRouteTable
PubRouteTableAssociationB:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref CFnPubSubnetC
RouteTableId: !Ref PubRouteTable
おわりに
CloudFormationを使ってVPC環境を作成してみました。
今回作成したVPC作成のテンプレートと以前作成したS3バケット作成のテンプレートと組み合わせて、
VPCフローログの設定までやれるように改良していきたいです。