AWS 코드로 관리하기 :: CloudFormation

adam2·2020년 7월 31일
0

AWS

목록 보기
1/2
post-thumbnail

CloudFormation은 Amazon Web Services(AWS) 리소스를 자동으로 생성해 주는 서비스이다.
우리가 흔히 사용하는 서버리스 프레임워크도 CloudFormation을 이용해 람다를 배포한다. aws cdk또한 내부적으로는 Cfn을 사용한다.
사용하려는 AWS 리소스를 템플릿 파일로 작성하면, CloudFormation이 이를 분석해서 AWS 리소스를 생성한다. 이렇게 생성된 리소스를 스택이라고 한다.

장점

인프라 관리의 간소화

aws의 여러가지 기능을 사용해서 인프라를 구성한다고 생각해보자. 콘솔에서 s3들어가서 버킷 만들어주고.. aipgateway가서 설정해주고... 람다 만들고,,, cdn도 연결해주고... 람다에 트리거 따로 설정... 각각의 설정페이지에 들어가서 이것들을 일일이 설정하는것이 매우 귀찮고 시간이 많이 든다. 그리고 무언가 빼먹었을 수도 있고 전체적인 흐름을 파악하는데도 어렵다.

CloudFormation은 템플릿을 작성하는 것 하나로 모든 리소스와 해당 속성에 대한 설정을 한번에 할 수 있다. 리소스를 단 한곳에서만 관리하면 되기 때문에 전체적인 흐름도 파악할 수 있게 되고 변경 작업도 매우 편해진다.

단순히 입문용으로 aws를 사용하는 사람에게는 크게 와닿지 않을 수 있지만 프로덕션 레벨에서는 복잡한 리소스 세트를 구축하기 때문에 정말 필요한 기능이라고 생각한다.

인프라 복제

CloudFormation은 작성한 템플릿을 이용해서 다른 리전에도 어플리케이션을 복제할 수 있다. (그렇지 않는다면 모든 리전마다 각각의 서비스설정을 다 해줘야하는 ... 끔찍함^^)

인프라 변경 사항을 쉽게 제어 및 추적

IaC 서비스의 특징이다. 코드로 인프라를 관리하기 때문에 이 코드만 버전관리한다면 초기부터 인프라 변경 과정을 추적할 수 있다.

CloudFormation 구성

CloudFormation은 템플릿스택 으로 작업을 한다. 템플릿 을 생성해 AWS 리소스를 할당하고 속성을 설정한다. 그리소 스택 을 생성할 때마다 CloudFormation이 템플릿에 작성된 리소스를 프로비저닝한다.

스택

CloudFormation은 스택 이라는 하나의 단위로 리소스를 관리한다. 스택 단위로 인프라를 만들고 지울 수 있다.

스택에서 관리하는 모든 리소스는 CloudFormation만의 템플릿 으로 정의를 해야 한다.

템플릿

템플릿은 우리가 기존에 aws 웹 콘솔에서 한땀한땀 클릭하며 생성했던 aws 리소스를 선언하는 곳이다. AWS의 어떤 리소스를 어떤 속성으로 생성할 것인지 작성할 수 있다.

예를 들어, 템플릿에서 인스턴스 유형, AMI ID, 블록 디바이스 매핑, Amazon EC2 키 페어 이름 등과 같은 Amazon EC2 인스턴스를 설명할 수 있다.

템플릿은 YAML이나 JSON으로 작성해야 한다.

템플릿 구조

섹션:

필드:

---
AWSTemplateFormatVersion: "version date"

Description:
  String

Metadata:
  template metadata

Parameters:
  set of parameters

Mappings:
  set of mappings

Conditions:
  set of conditions

Transform:
  set of transforms

Resources:
  set of resources

Outputs:
  set of outputs
  1. AWSTemplateFormatVersion : 포맷 버전 (OPTIONAL)

    템플릿이 따르는 AWS CloudFormation 템플릿 버전. 최신 템플릿 포맷 버전은 2010-09-09이며 현재 유일한 유효 값이다.

  2. Description (OPTIONAL)

    템플릿을 설명하는 섹션이다. 항상 AWSTemplateFormatVersion 섹션 다음에 와야 한다.

  3. Metadata (OPTIONAL)

    템플릿에 대한 세부 정보를 기술

  4. Parameters (OPTIONAL)

    스택을 생성할 때 필요한 파라미터를 기술

    ResourcesOutputs 에서 사용할 수 있다.

  5. Mappings (OPTIONAL)

    key-value 형식의 map을 선언할 수 있다.

    키는 문자열, 값은 문자열이나 list가 될 수 잇다.

    Fn::FindInMap 내장 함수를 사용하여 맵에서 값을 불러올 수 있습니다.

  6. Conditions (OPTIONAL)

    스택이 프로덕션용인지 테스트 환경용인지에 따라 달라지는 리소스를 조건부로 생성

  7. Transform (OPTIONAL)

    서버리스 어플리케이션의 경우 사용할 AWS SAM 버전 지정

  8. Resources

    AWS 리소스 및 속성을 설정한다.

    Resources:
      Logical ID:
        Type: Resource type
        Properties:
          Set of properties
  9. Outputs (OPTIONAL)

템플릿 하나에 위처럼 하나의 리소스가 아니라 여러가지 리소스를 구성할 수 있다.

아래의 템플릿을 사용해 스택을 생성하게 되면 아래의 예시는 EC2에 ElasticIP를 CFn이 프로비저닝하게 된다.

AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
  MyEC2Instance:
    Type: "AWS::EC2::Instance"
    Properties: 
      ImageId: "ami-0ff8a91507f77f867"
      InstanceType: t2.micro
      KeyName: testkey
      BlockDeviceMappings:
        -
          DeviceName: /dev/sdm
          Ebs:
            VolumeType: io1
            Iops: 200
            DeleteOnTermination: false
            VolumeSize: 20
  MyEIP:
    Type: AWS::EC2::EIP
    Properties:
      InstanceId: !Ref MyEC2Instance

변경 세트

스택에서 실행중인 리소스를 변경해야 하는 경우 변경 세트를 사용해 스택을 업데이트 한다.

변경 세트를 사용하면 변경 전 리소스에 미치는 영향을 확인하고 미리 대비를 할 수 있도록 한다.

작동 방식

스택을 생성하기 위해서 CloudFormation은 해당 인스턴스를 생성할 권한이 필요하다. 때문에 IAM을 이요해 권한설정을 꼭 해주어야 한다.

  1. 템플릿 작성

    CloudFormation 디자이너에서 작성할 수 있다.

  2. 템플릿 업로드

    로컬 또는 s3 버킷에 저장

  3. 업로드한 템플릿을 이용해 스택 생성

  4. CloudFormation이 템플릿에 기술된 서비스를 호출해 리소스를 프로비저닝하고 구성

  5. 모든 리소스 생성 후 스택 생성 완료 보고

스택 업데이트 과정

스택의 리소스를 수정하기 위해서 새로운 스택을 만들 필요는 없다.

스택을 업데이트 하기 위해서 원본 스택 템플릿의 수정된 버전을 업로드하면 CloudFormation이 원본과 비교하여 변경 세트 를 생성한다. 변경 세트에는 수정시 어떤 부분이 변경될 것인지 예측한 내용들이 기술이 되어 있고, 이를 검토 한 후에 변경 세트를 실행하면 스택을 업데이트 할 수 있다.

스택 삭제

스택을 삭제할 경우 스택에서 생성한 모든 리소스를 삭제하게 된다.

이때 일부 리소스는 남겨두고 삭제할 수 있다고 한다.

참고

https://medium.com/pplink/aws-cloudformation으로-인프라-자동화-시작하기-9fe13cdf08c9#:~:text=CloudFormation이란,AWS 리소스를 생성한다.

AWS CloudFormation 시작 안내서

AWS CloudFormation이란 무엇입니까?

AWS CloudFormation 작동 방식

0개의 댓글