본문 바로가기
AWS

AWS CloudFormation (1)- VPC생성 실습

by 장중앙 2021. 8. 25.

AWS CloudFormation이란

AWS의 리소스를 모델링하고 설정하여 리소스 관리시간을 줄이고 AWS에서 실행되는 애플리케이션에 집중할 수 있도록 해주는 대표적인 IaC(Infra-structure as a Code)기반의 구성 조정도구로 인프라 관리의 최소화, 신속한 인프라 복제, 쉬운 인프라 변경사항 관리/추적의 특징을 가짐

필요한 AWS 리소스를 설명하는 템플릿을 생성하면 AWS CloudFormation이 해당 리소스의 프로비저닝과 구성을 담당

클라우드 환경 내 모든 인프라 리소스를 설명하고 프로비저닝할 수 있도록 공통언어(HSON, YAML)로 작성된 템플릿을을 통해 코드기반 인프라를 구성할 수 있음

더보기

* 프로비저닝이란?

사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것

 

Cloudformation을 활용한 VPC 생성

AWS Cloudformation을 통해 스택 생성하기

업로드 파일

CreateVPC_01.yml

더보기

AWSTemplateFormatVersion: 2010-09-09
Description: Make a VPC 1

Resources:                          ⇐ 생성할 자원 목록
  ToturialVPC:                      ⇐ 생성할 자원의 이름
    Type: AWS::EC2::VPC             ⇐ 생성할 자원의 종류
    Properties:                     ⇐ 자원의 속성
      CidrBlock: 172.0.0.0/16
      EnableDnsHostnames: true

  InternetGateway:
    Type: AWS::EC2::InternetGateway

  AttachGateway:
    Type: AWS::EC2::VPCGatewayAttachment  
    Properties:
      VpcId: !Ref ToturialVPC
      InternetGatewayId: !Ref InternetGateway

  PublicSubnet01:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref ToturialVPC        ⇐ !Ref ⇒ 다른 리소스를 참조
      CidrBlock: 172.0.0.0/24
      AvailabilityZone: !Select      ⇐ 해당 리전의 가용영역 목록에서 첫번째 가용영역을 반환
        - '0'
        - !GetAZs ''

  PrivateSubnet01:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref ToturialVPC
      CidrBlock: 172.0.1.0/24
      AvailabilityZone: !Select 
        - '0'
        - !GetAZs ''

  PublicRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref ToturialVPC

  PublicRoute:
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway

  PublicSubnetRouteTableAssociation1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PublicSubnet01
      RouteTableId: !Ref PublicRouteTable

  PrivateRouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref ToturialVPC

  PrivateSubnetRouteTableAssociation1:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref PrivateSubnet01
      RouteTableId: !Ref PrivateRouteTable

Outputs:
  VPC:
    Description: Toturial VPC ID
    Value: !Ref ToturialVPC
  AZ1:
    Description: Availability Zone 1
    Value: !GetAtt 
      - PublicSubnet01
      - AvailabilityZone

template 작성시 섹션에 대한 설명 참조

https://docs.aws.amazon.com/en_us/AWSCloudFormation/latest/UserGuide에서 template reference

 

이후 기본 설정

생성된 스택 확인
템플릿으로 생성된 VPC생성

 

AWS Cloudformation을 통해 스택 업데이트

CreateVPC_01.yml 파일 수정

CreateVPC_02.yml (파란색은 수정된 코드)

더보기

AWSTemplateFormatVersion: 2010-09-09

Description: Make a VPC 2

 

Resources:

  ToturialVPC:

    Type: AWS::EC2::VPC

    Properties:

      CidrBlock: 172.0.0.0/16

      EnableDnsHostnames: true

 

  InternetGateway:

    Type: AWS::EC2::InternetGateway

 

  AttachGateway:

    Type: AWS::EC2::VPCGatewayAttachment

    Properties:

      VpcId: !Ref ToturialVPC

      InternetGatewayId: !Ref InternetGateway

 

  PublicSubnet01:

    Type: AWS::EC2::Subnet

    Properties:

      VpcId: !Ref ToturialVPC

      CidrBlock: 172.0.0.0/24

      AvailabilityZone: !Select 

        - '0'

        - !GetAZs ''

 

  PublicSubnet02:

    Type: AWS::EC2::Subnet

    Properties:

      VpcId: !Ref ToturialVPC

      CidrBlock: 172.0.2.0/24

      AvailabilityZone: !Select 

        - '1'

        - !GetAZs ''

 

  PrivateSubnet01:

    Type: AWS::EC2::Subnet

    Properties:

      VpcId: !Ref ToturialVPC

      CidrBlock: 172.0.1.0/24

      AvailabilityZone: !Select 

        - '0'

        - !GetAZs ''

 

  PrivateSubnet02:

    Type: AWS::EC2::Subnet

    Properties:

      VpcId: !Ref ToturialVPC

      CidrBlock: 172.0.3.0/24

      AvailabilityZone: !Select 

        - '1'

        - !GetAZs ''

 

  PublicRouteTable:

    Type: AWS::EC2::RouteTable

    Properties:

      VpcId: !Ref ToturialVPC

 

  PublicRoute:

    Type: AWS::EC2::Route

    Properties:

      RouteTableId: !Ref PublicRouteTable

      DestinationCidrBlock: 0.0.0.0/0

      GatewayId: !Ref InternetGateway

 

  PublicSubnetRouteTableAssociation1:

    Type: AWS::EC2::SubnetRouteTableAssociation

    Properties:

      SubnetId: !Ref PublicSubnet01

      RouteTableId: !Ref PublicRouteTable

 

  PublicSubnetRouteTableAssociation2:

    Type: AWS::EC2::SubnetRouteTableAssociation

    Properties:

      SubnetId: !Ref PublicSubnet02

      RouteTableId: !Ref PublicRouteTable

 

  PrivateRouteTable:

    Type: AWS::EC2::RouteTable

    Properties:

      VpcId: !Ref ToturialVPC

 

  PrivateSubnetRouteTableAssociation1:

    Type: AWS::EC2::SubnetRouteTableAssociation

    Properties:

      SubnetId: !Ref PrivateSubnet01

      RouteTableId: !Ref PrivateRouteTable

 

  PrivateSubnetRouteTableAssociation2:

    Type: AWS::EC2::SubnetRouteTableAssociation

    Properties:

      SubnetId: !Ref PrivateSubnet02

      RouteTableId: !Ref PrivateRouteTable

 

Outputs:

  VPC:

    Description: Toturial VPC ID

    Value: !Ref ToturialVPC

  AZ1:

    Description: Availability Zone 1

    Value: !GetAtt 

      - PublicSubnet01

      - AvailabilityZone

  AZ2:

    Description: Availability Zone 2

    Value: !GetAtt 

      - PublicSubnet02

      - AvailabilityZone

 

이후 기본 설정

업데이트된 스택 확인
업데이트로 추가된 2개의 서브넷

 

AWS Cloudformation Designer에서 보기와 스택 삭제

 

스택을 삭제하면 스택에 생성된 리소스는 모두 정리

템플릿 파일을 저장한 S3 버킷은 그대로 유지됨 → 버킷과 객체는 수동으로 삭제해야 함

댓글