흰 스타렉스에서 내가 내리지

AWS CloudFormation 의 개념과 구성요소 본문

AWS

AWS CloudFormation 의 개념과 구성요소

주씨. 2024. 9. 13. 19:03
728x90

CloudFormation 은 AWS 리소스를 코드로 정의하고 이를 통해 일관된 인프라 배포를 할 수 있도록 돕는 서비스이다. 

 

# 장점 

1. 자동화된 인프라 관리 

- 여러 AWS 리소스를 하나의 템플릿으로 정의하고 배포함으로써 수동으로 설정하는 수고를 덜어준다. 이를 통해 시간 절약 및 효율성이 증대된다. 

 

2. 인프라 버전 관리 

- 템플릿 파일을 코드처럼 버전 관리할 수 있어, 변경 사항을 추적하고 롤백할 수 있다. 이는 IaC 원칙을 따른다. 

 

3. 일관성 

- 동일한 템플릿을 사용하여 다양한 환경 (예: 개발, 테스트, 프로덕션) 에 일관된 리소스를 배포할 수 있다. 

 

4. Rollback 기능

- 배포 중에 오류가 발생하면 CloudFormation 은 자동으로 이전 상태로 롤백하여 안정성을 보장한다. 

 


# 구성요소

동작 방식

 

1. 템플릿 

---
AWSTemplateFormatVersion: "version date"

Description:
  String

Metadata:
  template metadata

Parameters:
  set of parameters

Rules:
  set of rules

Mappings:
  set of mappings

Conditions:
  set of conditions

Transform:
  set of transforms

Resources:
  set of resources

Outputs:
  set of outputs

 

- Resources : 실제로 배포할 AWS 리소스를 정의하는 가장 필수적인 섹션이다. 예를 들어, EC2 인스턴스, S3버킷 , IAM 역할 등을 정의할 수 있다.

- Parameters : 템플릿에 사용자 입력 값을 받을 수 있는 변수이다. 예를 들어, EC2 인스턴스 유형이나 S3 버킷 이름과 같은 값을 템플릿에 동적으로 제공할 수 있다. 

- Outputs : 생성된 리소스에서 사용자에게 유용한 정보를 출력하는 섹션이다. 예를 들어, EC2 인스턴스의 퍼블릭 IP 주소를 반환할 수 있다. 

- Mappings : 서로 다른 환경에 맞게 리소스를 정의할 수 있도록 키-값 매핑을 정의하는 섹션이다. 예를 들어, 특정 리전에 따라 다른 AMI 를 사용할 수 있다. 

- Conditions : 특정 조건에 따라 리소스를 생성할지 여부를 정의할 수 있는 섹션이다. 예를 들어, 프로덕션 환경에서는 특정 리소스를 생성하고 개발 환경에서는 생성하지 않도록 조건을 설정할 수 있다. 

- Transform : 다른 템플릿이나 매크로를 탐조해 템플릿을 재사용하거나 AWS 에서 제공하는 템플릿 기능을 사용할 수 있다. 

- Metadata : 추가 정보나 설명을 제공할 수 있는 섹션이다. 

 

예시

AWSTemplateFormatVersion: "2010-09-09"
Description: A sample template
Resources:
  MyEC2Instance: #An inline comment
    Type: "AWS::EC2::Instance"
    Properties: 
      ImageId: "ami-0ff8a91507f77f867" #Another comment -- This is a Linux AMI
      InstanceType: t2.micro
      KeyName: testkey
      BlockDeviceMappings:
        -
          DeviceName: /dev/sdm
          Ebs:
            VolumeType: io1
            Iops: 200
            DeleteOnTermination: false
            VolumeSize: 20

 

 

 

2. 스택 (Stack)

CloudFormation 템플릿을 기반으로 생성된 AWS 리소스의 모음을 스택(Stack) 이라고 한다. 스택은 템플릿을 사용하여 생성되며, 템플릿의 변경사항을 반영하여 리소스를 없데이트하거나 삭제할 수 있다. 모든 리소스는 스택 단위로 관리되며, 스택을 삭제하면 스택 내 모든 리소스가 함께 삭제된다. 

 

- Create Stack : 템플릿을 사용해 새로운 스택을 생성하는 프로세스이다. 이 과정에서 사용자가 템플릿에 필요한 파라미터 값을 입력하게 된다. 

- Update Stack : 기존 스택을 수정할 때 사용한다. 템플릿을 업데이트하여 새로운 리소스를 추가하거나, 기존 리소스를 변경할 수 있다. 

- Delete Stack : 스택을 삭제하면 해당 스택에서 생성된 모든 AWS 리소스가 삭제된다.

 

3. Change Set

스택을 업데이트하기 전, 변경 사항을 미리 확인할 수 있는 기능이다. 

Change Set 을 통해 스택에 적용된 변경 사항을 미리 보고, 예상치 못한 영향을 최소화할 수 있다. 

변경 사항을 적용하기 전 반드시 검토하고 승인을 받을 수 있어, 실수로 인한 문제를 방지하는 데 유용한다. 

 

4. StackSets

여러 AWS 계정과 여러 리전에 걸쳐 동일한 CloudFormation 스택을 배포하고 관리할 수 있는 기능이다. 

예를 들어, 여러 리전이나 계정에서 일관된 네트워크 설정을 구성해야 할 때, StackSets 를 사용하면 여러 스택을 한번에 배포할 수 있다. 

 

 

* 요약

1. 템플릿 : 리소스를 정의하는 문서 (JSON or YAML)

2. Stack : 템플릿을 사용해 생성된 AWS 리소스의 모음 

3. Change Set : 스택 업데이트 시 미리 변경 사항을 검토할 수 있는 기능

4. StackSets : 여러 계정 및 리전에 스택을 배포할 수 있는 기능

5. Drift Detection : 스택의 리소스가 실제 환경과 일치하는지 감지하는 기능 

6. Designer : 템플릿을 시각적으로 설계하는 도구