만자의 개발일지

[AWS] CloudFormation이란 본문

AWS

[AWS] CloudFormation이란

박만자 2022. 7. 11. 21:41

CloudFormation

AWS CloudFormation은 AWS에서 제공하는 대표적인 IaC기반의 서비스입니다.

CloudFormation을 사용하면 VPC, EC2, Lambda 등과 같은 리소스를 수동으로 생성할 필요 없이 리소스들을 템플릿(코드)으로 구성하고 Stack을 생성하여 인프라를 구성할 수 있습니다.

 

장점

  • 인프라 관리 간소화
  • 신속하게 인프라 복제
  • 인프라 변경 사항을 쉽게 제어 및 추적

 

CloudFormation 구성

CloudFormation은 크게 두 가지로 구성됩니다.
AWS의 리소스를 코드로 정의하는 템플릿해당 템플릿을 읽고 실제 리소스를 생성하고 관리하는 스택으로 구성됩니다.

 

템플릿(Template)

  • AWS 리소스를 프로비저닝 및 구성을 위해 필요한 파일
  • JSON 또는 YAML 형식을 사용합니다.

 

스택(Stack)

  • 하나의 단위로 관리할 수 있는 AWS 리소스 모음
  • 스택을 통해 템플릿을 읽고 실제 리소스를 생성하고 인프라를 관리합니다.
  • 스택의 모든 리소스는 템플릿을 통해 정의합니다.
  • 스택을 삭제하면 스택이 관리하는 모든 리소스 삭제합니다.

 

CloudFormation 작동 방식

스택 생성

  1. 구성하고자 하는 인프라에 대한 리소스를 JSON 또는 YAML 형식의 템플릿으로 작성한다.
  2. 작성한 템플릿을 S3 혹은 로컬에 저장한다.
  3. 템플릿 파일의 위치를 지정하여 스택을 생성하고 리소스를 구성한다.

 

스택 업데이트

  1. 템플릿을 수정한다.
  2. 수정된 템플릿을 S3 혹은 로컬에 저장한다.
  3. CloudFormation은 수정된 템플릿 혹은 파라미터를 기반으로 변경 세트(Change Set)을 생성한다.
  4. 변경 세트를 통해 변경 사항을 확인 후 변경 세트를 실행시킨다.
  5. 실행된 변경 세트는 스택을 업데이트한다.

 

CloudFormation 시작하기

간단한 예시를 통해 CloudFormation을 어떻게 사용하는지에 대해 알아보도록 하겠습니다.

 

먼저 다음과 같이 템플릿(YAML) 파일을 작성해 줍니다.

AWSTemplateFormatVersion: "2010-09-09"
Resources:
  WebInstance:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0fd0765afb77bcca7
      KeyName: 	test
      SecurityGroupIds:
        - sg-0436b57eb40d26100
      SubnetId: subnet-0d31d7fbf86019577
      Tags:
        -
          Key: Name
          Value: webserver

 

그 다음 AWS CloudFormation 페이지로 이동합니다.

오른쪽 상단에 Create stack 버튼을 클릭한 후 With new resources 버튼을 클릭합니다.

 

첫 번째 단계에서는 템플릿을 지정할 수 있습니다.

템플릿은 사용자가 직접 작성한 템플릿일 수도 있고 AWS에서 제공하는 샘플 템플릿 혹은 CloudFormation 디자이너를 통해 생성된 템플릿일 수도 있습니다.

이번 포스팅에서는 템플릿을 직접 작성하였기 때문에 Template is ready를 선택해줍니다.

그다음은 템플릿을 업로드하는 방법입니다.

템플릿을 S3에 업로드한 후 Object URL을 지정해주거나 로컬에있는 템플릿을 업로드하는 방법이 있습니다.

템플릿을 업로드한 후 Next 버튼을 눌러 다음 단계로 넘어갑니다.

 

두번째 단계에서는 파라미터와 스택명을 지정할 수 있습니다.

템플릿에 파라미터 섹션을 작성하지 않았기 때문에 파라미터는 지정할 수 없다고 뜰것입니다.

따라서 스택명만 지정한 후 Next 버튼을 눌러 다음 단계로 넘어갑니다.

 

세 번째 단계에서는 스택에 대한 태그와 권한, 정책 과 SNS 등등 다양한 옵션을 지정해 줄 수 있습니다.

세 번째 단계에서 가장 중요한 부분은 권한입니다. 권한은 스택이 리소스를 생성할 때 필요한 권한(IAM Role)을 지정해줘야하는데, 예를 들어 EC2를 생성하는 템플릿을 지정해줬다면 EC2를 생성하는 권한을 부여해야 합니다.

다만 주의해야할 점은 이 스택에대한 접근 권한이 없는 IAM User도 해당 권한에 접근할 수 있기 때문에 스택에 대한 권한은 항상 최소한으로 주는것이 바람직합니다.

권한을 지정해준 후 Next 버튼을 눌러 다음단계로 넘어갑니다.

 

네 번째 단계에서는 앞에서 설정한 옵션들을 한번에 확인할 수 있습니다.

잘못 설정한게 없는지 확인한 후 하단에 Create stack 버튼을 눌러 스택을 생성해줍니다.

 

스택을 생성한 후 Events 메뉴를 클릭하시면 리소스가 생성되는 과정을 확인하실 수 있습니다.

 

스택의 상태가 CREATE COMPLETE로 변경되면 실제로 스택에 의해 EC2 인스턴스가 생성된 것을 보실 수 있습니다.

 

이는 스택에 의해 생성된 것이기 때문에 스택을 삭제하게되면 해당 인스턴스도 같이 삭제되게 됩니다.


이처럼 CloudFormation을 통해 인프라 구성을 코드로 관리하고 손쉽게 리소스를 생성하고 관리할 수 있습니다.

 

참고

Comments