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
이후 기본 설정
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
이후 기본 설정
AWS Cloudformation Designer에서 보기와 스택 삭제
스택을 삭제하면 스택에 생성된 리소스는 모두 정리
템플릿 파일을 저장한 S3 버킷은 그대로 유지됨 → 버킷과 객체는 수동으로 삭제해야 함
'AWS' 카테고리의 다른 글
AWS Lambda 실습 (0) | 2021.08.26 |
---|---|
AWS CloudFormation (2)- 웹 애플리케이션 배포 및 관리 실습 (0) | 2021.08.25 |
AWS CodeDeploy를 이용한 현위치 배포 (0) | 2021.08.19 |
AWS 블루/그린 배포 실습 (0) | 2021.08.19 |
AWS 기반 웹서비스 구성 실습(3) (0) | 2021.08.18 |
댓글