CloudFormation으로 VPC, Subnet, InternetGateway, RouteTable 생성해 보기

CloudFormation으로 VPC, Subnet, InternetGateway, RouteTable 생성해 보기

CloudFormation으로 Network를 생성해 보는 과정을 정리해 봤습니다.
Clock Icon2022.02.02 02:55

この記事は公開されてから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와 서브넷 등이 정상적으로 생성 된 것을 확인할 수 있습니다.

참고

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.