前回に続き、今回はVPC/Subnet設計。
まずは名称、CIDR、AZ配置方針を固めるところまで。
セキュリティグループやルートテーブル、他のVPCコンポーネント等は次回以降で作成していく。
Contents
VPC/Subnet設計
種別 | Name | CIDR | az |
---|---|---|---|
VPC | mainVPC | 172.16.0.0/16 | – |
subnet | pubWEB1 | 172.16.10.0/24 | ap-northeast-1a |
subnet | pubWEB2 | 172.16.11.0/24 | ap-northeast-1b |
subnet | prvAP1 | 172.16.20.0/24 | ap-northeast-1a |
subnet | prvAP2 | 172.16.21.0/24 | ap-northeast-1b |
subnet | prvDB1 | 172.16.30.0/24 | ap-northeast-1a |
subnet | prvDB2 | 172.16.31.0/24 | ap-northeast-1b |
●ポイント
- Nameにpubのつくサブネットはパブリック、prvのつくサブネットはプライベート。
- Name末尾/CIDRの1の位に のつくサブネットはAZ1(ap-northeast-1a)。
- Name末尾/CIDRの1の位に1のつくサブネットはAZ2(ap-northeast-1b)。
- 各層はCIDR第3オクテットで識別。10台はWEB,20台はAP,30台はDB。
これをテンプレート化する。
CloudFormationテンプレート
今回はYAMLで書く。
設定値の管理をしやすくしたり、共通化するため、Mappings/FindInMap関数を活用する。 Mappings
FindInMAp関数
●ポイント
- Mappingsでパラメータを一括管理する。(CidrBlock,subnetのAZ配置)
- TagのNameはテンプレート側で挿入する。
- Mappingsのパラメータを呼び出すときは、FindInMap関数を利用する。
AWSTemplateFormatVersion: 2010-09-09
Description: CloudFormation VPC
Mappings:
TagsMap:
EnvName:
Name: username
VPCCiderMap:
mainVPC:
CidrBlock: 172.16.0.0/16
SubnetMap:
pubWEB1:
CidrBlock: 172.16.10.0/24
AZ: ap-northeast-1a
pubWEB2:
CidrBlock: 172.16.11.0/24
AZ: ap-northeast-1b
prvAP1:
CidrBlock: 172.16.20.0/24
AZ: ap-northeast-1a
prvAP2:
CidrBlock: 172.16.21.0/24
AZ: ap-northeast-1b
prvDB1:
CidrBlock: 172.16.30.0/24
AZ: ap-northeast-1a
prvDB2:
CidrBlock: 172.16.31.0/24
AZ: ap-northeast-1b
Resources:
# VPC
mainVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: !FindInMap
- VPCCiderMap
- mainVPC
- CidrBlock
EnableDnsSupport: 'true'
EnableDnsHostnames: 'true'
InstanceTenancy: 'default'
Tags:
-
Key: Name
Value: !FindInMap
- TagsMap
- EnvName
- Name
# Subnet
pubWEB1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref mainVPC
CidrBlock: !FindInMap
- SubnetMap
- pubWEB1
- CidrBlock
AvailabilityZone: !FindInMap
- SubnetMap
- pubWEB1
- AZ
Tags:
-
Key: Name
Value: !FindInMap
- TagsMap
- EnvName
- Name
pubWEB2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref mainVPC
CidrBlock: !FindInMap
- SubnetMap
- pubWEB2
- CidrBlock
AvailabilityZone: !FindInMap
- SubnetMap
- pubWEB2
- AZ
Tags:
-
Key: Name
Value: !FindInMap
- TagsMap
- EnvName
- Name
prvAP1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref mainVPC
CidrBlock: !FindInMap
- SubnetMap
- prvAP1
- CidrBlock
AvailabilityZone: !FindInMap
- SubnetMap
- prvAP1
- AZ
Tags:
-
Key: Name
Value: !FindInMap
- TagsMap
- EnvName
- Name
prvAP2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref mainVPC
CidrBlock: !FindInMap
- SubnetMap
- prvAP2
- CidrBlock
AvailabilityZone: !FindInMap
- SubnetMap
- prvAP2
- AZ
Tags:
-
Key: Name
Value: !FindInMap
- TagsMap
- EnvName
- Name
prvDB1:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref mainVPC
CidrBlock: !FindInMap
- SubnetMap
- prvDB1
- CidrBlock
AvailabilityZone: !FindInMap
- SubnetMap
- prvDB1
- AZ
Tags:
-
Key: Name
Value: !FindInMap
- TagsMap
- EnvName
- Name
prvDB2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref mainVPC
CidrBlock: !FindInMap
- SubnetMap
- prvDB2
- CidrBlock
AvailabilityZone: !FindInMap
- SubnetMap
- prvDB2
- AZ
Tags:
-
Key: Name
Value: !FindInMap
- TagsMap
- EnvName
- Name