Cloud/IaC

IaC) AWS CloudFormation

Adım Kim 2022. 9. 19. 20:41
실습 환경 : AWS Console (2022/09), Visual Studio Code
실습 목적 : IaC 서비스인 AWS CloudFormation에 대해 알아보고 적용해본다.

AWS CloudFormation 이란?

  • AWS의 대표적인 IaC 구성조정 도구.
  • 스택을 생성할 때마다 템플릿에 설명된 리소스를 수동으로 생성하거나 구성할 필요없이 자동으로 설정한다.
  • JSON 또는 YAML으로 작성한다.


AWS CloudFormation 의 장점

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


AWS CloudFormation 구성요소

탬플릿 [ Template ]

    - 스택 리소스 프로비저닝 및 구성을 위해 필요한 텍스트 파일

    - JSON 또는 YAML 형식의 파일로 작성

    - AWS CloudFormation Designer를 사용하여 GUI 기반으로 작성할 수 있다.

    - AWS CloudFormation 템플릿을 AWS 리소스 구축을 위한 blueprint로 사용.

 

스택 [ Stack ]

    - 하나의 단위로 관리할 수 있는 AWS 리소스 모음

    - 스택의 생성, 업데이트, 삭제를 통해 리소스 모음의 생성, 업데이트, 삭제 가능

    - 스택의 모든 리소스는 AWS Cloud Formation 템플릿을 통해 정의된다.

    - 스텍을 삭제하면 모든 리소스는 모두 삭제된다.



AWS CloudFormation 작동 방식

  1. JSON 또는 YAML 포맷으로 AWS CloudFormation 템플릿 작성 - 구성하려하는 AWS 리소스에대한 정보 기술
  2. 작성된 템플릿을 S3 버킷에 저장 - 템플릿 파일은 로컬 저장 또는 S3버킷 저장 선택 가능
  3. 템플릿 위치를 지정하여 AWS CloudFormation 스택 생성
  4. 템플릿에 지정된 스택을 통해 AWS리소스에 대한 프로비저닝 및 구성작업 진행


CloudFormation 탬플릿  구성 요소

AWS TemplateFormationVersion (선택사항)

    - 템플릿버전

    - 탬플릿 문자는 문자열 형태 사용

    - 값을 지정하지 않은 경우 최신 버전 템플릿 포맷버전으로 지정

 

Metadata (선택사항)

    - 템플릿에 대한 추가정보 제공

    - CloudFormation은 Metadata섹션에 포함된 정보를 변환, 수정, 삭제하지 않음

    - 민감 정보는 포함하지 않는것이 좋다

 

Parameter (선택사항)

    - 스택을 생성하거나 업데이트할 때, 실행 시간에 템플릿에 전달하는값

    - 템플릿의 Resource 및 Outputs 섹션에서 파라미터 참조가능

    - 최대 60개 파라미터 지정가능

    - 각 파라미터마다 CloudFormation이 스택을 프로비저닝할 실행 시간에 대한 값을 할당해야 함

    - 파라미터는 동일한 템플릿에서 선언하고 참조해야함

    - 파라미터 참조시에는 !ref<파라미터 이름> 형식을 사용한다

 

Mapping (선택사항)

    - 조건부 파라미터 값을 지정하는데 사용할 수 있는 키와관련된 값의 매핑

    - Mappings 섹션은 "키 이름" "Mappings"로 이루어져있다

    - 매핑키 이름은 문자열 사용

 

Resources (필수사항)

    - AWS 리소스 및 해당 속성 지정

    - Logical ID : Resource 식별자, 논리적 ID (영숫자여야 하고, 고유한 값을 가져야한다)

    - Resource type : 선언하려는 리소스 유형을 식별한다

    - 리소스 속성(Properties) : 리소스에 지정할 수 있는 추가옵션

 

Outputs (선택사항)

    - 스택 속성을 볼 때마다 반환하는 값  설명

    - CloudFormation은 outputs 섹션에 포함된 정보를 삭제하거나 난독화 하지 않는다.

    - 최대 60개 출력 가능



AWS CloudFormation 구현 (Sample)


샘플 탬플릿 다운로드


AWS 홈페이지 ->  Documentation> AWS CloudFormation > User Guide -> Sample templates에서 Asia Pacific (Seoul) Region> Application frameworks -> LAMP stack basic 의 View 클릭 후 JSON 저장

참고 : https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/sample-templates-appframeworks-ap-northeast-2.htm


스택 생성


CloudFormation 메뉴 -> 스택에서 스택 생성(새 리소스 사용 선택) -> 스택 생성, 스택 세부 정보 지정

스택 생성

    - 템플릿 준비 : 준비된 템플릿

    - 템플릿 지정 : 템플릿 파일 업로드 - 파일선택 (샘플 템플릿 파일)

 

스택 세부 정보 지정

    - 스택 이름 : 스택 이름 설정

    - 파라미터 : 각 파라미터 값 입력

 

스택 옵션 구성 설정 후, 스택 생성 -> 스택이 정상적으로 생성되었는지 스텍의 이벤트 확인

스택 옵션 구성

    - 태그 : Name 태그 설정

    - 권한 : default

    - 스택 실패 옵션 : 모든 스택 리소스 롤백

    - 고급옵션 : default


결과 확인


스택 생성 완료 후, EC2 메뉴 인스턴스 -> 생성된 EC2 instance의 퍼블릭 IPv4 주소 확인 -> 브라우저에 주소 입력


스택 생성 요소 설명

스텍 세부정부 지정

파라미터 : templeate 파일에 지정된 파라미터 정보 표시, 해당 template를 이용하여 AWS리소스 생성시
필요한 파라미터 입력 시 사용

 

스택 옵션 구성

스택 실패 옵션 :

  • 모든 스택 리소스 롤백 - 이전 정상실행 버전으로 복원
  • 성공적으로 프로비저닝된 리소스 보존 - 성공한 리소스는 보존하고 실패한 리소스는
    이전 정상실행 버전으로 복원
  • 스택 생성 후 이벤트 정보를 확인하면 해당 스택이 템플릿을 이용하여 수행하는 과정 정보가 출력 된다. 과정 중 에러가 발생하면(예. ROLLBACK_IN_PROGRESS - VPC의 CIDR범위를 지정하지 않아 발생)원인을 파악하여 템플릿 내용을 수정하고 다시 수행하는 과정을 반복한다.
  • 스택을 삭제하면 스택에 의해 생성된 모든 AWS 리소스는 삭제된다.