Programming

[AWS, Certified Developer Associate] CloudFormation

IaC (Infrastructure as Code, 코드형 인프라)

  • 인프라를 코드 형식으로 정의, 관리하는 방식
  • 수동으로 인프라를 생성/관리하는 방식에서 벗어나 자동화/코드화를 통해 인프라를 생성 및 관리
  • 자동화된 프로비저닝 / 유연성 / 확장성 / 버전 관리
  • ex) 앤서블(Ansible) / 테라폼(Terraform) / AWS CloudFormation

 

 

AWS CloudFormation

  • AWS의 대표적인 IaC 서비스
  • AWS 인프라를 선언하는 방식으로 작성
  • 리소스 생성, 보안그룹 연결 등을 순서대로 생성하도록 선언
  • 자동화 / 버전관리 / 코드검토를 통한 검증 / 스택 비용 추적 가능 / 생산성 / 관심 분리 (VPC stack, Network stack, App stack 분리 가능)

 

 

CloudFormation 동작 원리

  • S3에 템플릿을 업로드 (템플릿 수정 불가, 새로운 버전의 템플릿 업로드, JSON / YAML 지원)
  • CloudFormation에서 템플릿 가져옴
  • CloudFormation에서는 버전1, 2의 차이점 파악 후 업데이트에 필요한 것 파악
  • 스택은 이름으로 구분
  • 스택 삭제 시 리소스 한번에 모두 삭제

 

 

CloudFormation - Recourse

  • 스택 내 AWS 구성요소
  • 서로 참조 가능 (리소스 간 연결 가능, EC2 <-> Security Group)
  • AWS가 리소스의 생성 수정 삭제
  • Type - 유형. AWS::aws-product-name::data-type-name 형식
    • AWS::AutoScaling::AutoScalingGroup (ASG)
    • AWS::EC2::Instance (EC2 Instance)
  • Properties - 프로퍼티. 리소스에 필요한 프로퍼티 정의 (AZ, ImageId, InstanceType(t2.micro) 등)
  • 리소스 양을 동적으로 만들 수 없음 (모든 것은 선언되어야 함)
  • 대부분의 AWS 서비스 지원 (지원 안하는 서비스는 람다 사용자 지정 리소스를 통해 작업 가능)

 

 

CloudFormation - Parameters

  • CloudFormation 템플릿에 입력값을 제공하는 방식
  • 다른 회사 등에 재사용 시 필요할 수 있는 내용
  • 인스턴스에 연결되는 키 페어 등은 파라미터로 지정 불가
  • !Ref 를 통해 매개변수 참조 가능
Parameters:
  SecurityGroupDescription:
    Description: Security Group Description
    Type: String

Resources:
  ServerSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: !Ref SecurityGroupDescription

 

 

 

 

CloudFormation - Mappings

  • 템플릿에서의 고정변수
  • 하드코딩
  • 사용자 환경에 따라 일부 값을 하드코딩 해야 할 때 유용
  • 모든 값은 명시적으로 템플릿에 쓰여야함
  • 사용할 모든 값을 알고 있을 때 (리전, AZ, AWS 계정, 환경) = 매핑
  • 사용자에 따라 값이 바뀌는 경우 = 매개변수
  • !FindInMap [MapName, TopLevelKey, SecondLevelKey] 로 사용
Mappings:
  RegionMap:
    us-east-1:
      "32": "ami-123123"
      "64": "ami-564565"
    us-west-1:
      "32": "ami-383838"
      "64": "ami-181818"
Resources:
  myEC2Instance:
    Type: "AWS::EC2::Instnace"
    Properties:
      ImageId: !FindInMap [RegionMap, !Ref "AWS::Region", 32]

 

 

 

 

CloudFormation - Outputs

  • 선택사항
  • 다른 스택에서 값을 불러올 수 있음
  • 네트워크 CF 템플릿에서 출력을 내보내기 해 VPC ID, Subnet ID를 내보낼 수 있음
  • 해당 값 다른 템플릿에서 재사용 할 수 있음
  • 다른 스택에서 해당 값 참조 시 해당 스택 삭제 불가
  • !ImportValue 통해 값 가져오기 가능

 

 

 

 


Reference

Udemy - AWS Certified Developer Associate 시험 합격을 위한 모든 것!