この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 CloudFormation으로 Network를 생성해 보는 과정을 정리해 봤습니다.
파라미터 설정
AWSTemplateFormatVersion: "2010-09-09"
Description: VPC Network set
Metadata:
"AWS::CloudFormation::Interface":
ParameterGroups:
- Label:
default: "Network Configuration"
Parameters:
- VPCCIDR
- PublicSubnetACIDR
- PublicSubnetCCIDR
- PrivateSubnetACIDR
- PrivateSubnetCCIDR
ParameterLabels:
VPCCIDR:
default: "VPC CIDR"
PublicSubnetACIDR:
default: "PublicSubnetA CIDR"
PublicSubnetCCIDR:
default: "PublicSubnetC CIDR"
PrivateSubnetACIDR:
default: "PrivateSubnetA CIDR"
PrivateSubnetCCIDR:
default: "PrivateSubnetC CIDR"
#-------------------------------------------------------------------
#Input VPC, Subnet Parameters
#-------------------------------------------------------------------
Parameters:
VPCCIDR:
Type: String
Default: "10.0.0.0/16"
PublicSubnetACIDR:
Type: String
Default: "10.0.0.0/18"
PublicSubnetCCIDR:
Type: String
Default: "10.0.64.0/18"
PrivateSubnetACIDR:
Type: String
Default: "10.0.128.0/18"
PrivateSubnetCCIDR:
Type: String
Default: "10.0.192.0/18"
먼저 Metadata를 통해서 하나의 파라미터 그룹과 레이블을 만들어줍니다. 파라미터 그룹에는 하나의 VPC와 4개의 서브넷이 포함되어 있습니다. 이어서 파라미터 레이블을 통해 AWS CloudFormation에서 파라미터를 입력할 때 나타나는 값들을 설정합니다.
CloudFormation에서 확인해 보면, 파라미터 레이블에서 설정했던 값들이 위 이미지와 같이 나오는것을 확인할 수 있습니다. 이어서「Parameters」를 통해서 변수명과 타입, 디폴트 값을 적어주는데, 여기서 디폴트 값은 위 이미지처럼 디폴트로 입력 되는 값들을 타나냅니다.
VPC, Subnet, InternetGateway 생성
#-------------------------------------------------------------------
#Set VPC, InternetGateway, Subnet
#-------------------------------------------------------------------
Resources:
VPC:
Type: "AWS::EC2::VPC"
Properties:
CidrBlock: !Ref VPCCIDR
EnableDnsSupport: "true"
EnableDnsHostnames: "true"
InstanceTenancy: default
Tags:
- Key: Name
Value: !Sub "test-vpc"
이어서「Resources」를 통해서 VPC, Subnet, InternetGateway를 생성합니다.「CidrBlock: !Ref VPCCIDR」를 통해서 파라미터에서 입력한 VPC Cidr를 해당 VPC에 적용합니다. VPC에 대한 자세한 내용은 아래 링크를 참고해 주세요.
InternetGateway:
Type: "AWS::EC2::InternetGateway"
Properties:
Tags:
- Key: Name
Value: !Sub "test-igw"
InternetGatewayAttachment:
Type: "AWS::EC2::VPCGatewayAttachment"
Properties:
InternetGatewayId: !Ref InternetGateway
VpcId: !Ref VPC
이어서 InternetGateway도 생성합니다. AWS::EC2::VPCGatewayAttachment를 통해서 InternetGateway를 VPC에 연결합니다.
PublicSubnetA:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "ap-northeast-2a"
CidrBlock: !Ref PublicSubnetACIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "test-front-subnet-1a"
PublicSubnetC:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "ap-northeast-2c"
CidrBlock: !Ref PublicSubnetCCIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "test-front-subnet-1c"
PrivateSubnetA:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "ap-northeast-2a"
CidrBlock: !Ref PrivateSubnetACIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "test-application-subnet-1a"
PrivateSubnetC:
Type: "AWS::EC2::Subnet"
Properties:
AvailabilityZone: "ap-northeast-2c"
CidrBlock: !Ref PrivateSubnetCCIDR
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "test-application-subnet-1c"
그리고 각각의 서브넷들을 생성합니다.
#-------------------------------------------------------------------
#Route Tables
#-------------------------------------------------------------------
FRONTRTB :
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "test-front-rtb"
APPRTB1A:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "test-application-rtb-1a"
APPRTB1C:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VPC
Tags:
- Key: Name
Value: !Sub "test-application-rtb-1c"
FRONTRTBroute:
Type: "AWS::EC2::Route"
Properties:
RouteTableId: !Ref FRONTRTB
DestinationCidrBlock: "0.0.0.0/0"
GatewayId: !Ref InternetGateway
이어서 라우팅 테이블을 만들고, FRONTRTBroute 라우팅 테이블에는 인터넷 게이트웨이를 연결합니다.
라우팅 테이블에 서브넷 연결
#-------------------------------------------------------------------
#Route Tables Subnet Association
#-------------------------------------------------------------------
FRONTRTBAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetA
RouteTableId: !Ref FRONTRTB
FRONTRTB2Association:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PublicSubnetC
RouteTableId: !Ref FRONTRTB
APPRTB1AAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PrivateSubnetA
RouteTableId: !Ref APPRTB1A
APPRTB1CAssociation:
Type: "AWS::EC2::SubnetRouteTableAssociation"
Properties:
SubnetId: !Ref PrivateSubnetC
RouteTableId: !Ref APPRTB1C
이제 각각의 라우팅 테이블에 서브넷을 연결합니다.
결과 확인
이제 CloudFormation에서 생성을 해보면 문제 없이 Complete되는 것을 확인할 수 있습니다.
VPC에 들어가서 확인해 보면 VPC와 서브넷 등이 정상적으로 생성 된 것을 확인할 수 있습니다.