AWS CloudFormation
개요
CloudFormation은 완전 관리형 AWS 서비스로, YAML, JSON 등의 코드 템플릿을 이용하여 클라우드 인프라를 구축하는 Infrastructure as Code(IaC)와 선언 방식을 지원한다.
- 예시
- 미국 리전에 배포할 거야
- SSH와 HTTP에 대해 모두 허용하는 보안 그룹을 추가해 줘
- 로드 분배를 위해 로드 밸런서와 오토 스케일링 그룹을 사용할 거야
위 같은 방식은 사용할 서비스를 선언할 수 있어 간단하고, 비용/시간적으로 경제적 / 생산적이고, 버전 관리하기가 쉽다.
Infrastructure as Code (IaC)
"인프라로써의 코드(IaC)"는 DevOps와 현대 클라우드 컴퓨팅의 핵심으로, 기계어로 정의된 파일을 통해 컴퓨터 인프라를 관리하고 환경 설정하는 방식이다. IaC는 코드 기반 도구와 자동화를 이용하는 IT 인프라를 위해 human-error는 줄이면서 일관성과 반복 가능성, 그리고 책임을 향상하는데 의의가 있다.
IaC의 핵심은 자동화와 형상 관리, 일관된 결과, 그리고 선언/명령형 방식이다.
- 자동화 : 인프라 환경 설정을 자동화하여 이를 반복 가능하고 일관성 있게 만든다.
- 형상 관리 : 시간에 따라 버전 추적이 가능하고, 문제가 발생하면 이전 버전으로 rollback
- 일관된 결과 : 스크립트를 여러 번 반복 실행해도 항상 동일한 결과를 보장한다.
- 선언/명령형 : 원하는 형태의 시스템을 요구하면 tool이 어떻게 이를 성취할지 파악하고, 원한다면 이를 어떻게 실행할 것인지 명령할 수 있다.
IaC를 구현한 대표적인 도구들로는 Terraform과 AWS CloudFormation, Ansible 등이 있다.
IaC를 구현하면서 얻을 수 있는 혜택은 신속성과 간편함, 일관성과 표준화, 비용 감소, 그리고 수월한 위험 관리가 존재한다.
YAML
YAML은 "YAML Ain't Markup Language"를 의미하는 재귀적 두문자어로, 모든 프로그래밍 언어와 결한 되어 사용될 수 있는 인간친화적 데이터 직렬화 표준이다. 주로 환경 설정 파일을 작성하는 데 사용한다.
특히 DevOps 분야에서 선호되는데 이는 YAML이 가진 직관성과 깔끔한 구조 때문이다. YAML의 특징은 인간친화적이고, 다양한 데이터 타입과 프로그래밍 언어를 지원하며, 주석도 달 수 있는 것이다.
앞서 설명했듯 DevOps 도구나 소프트웨어 애플리케이션 내의 환경 설정 파일로 사용되거나 JSON 같은 데이터 스토리지 및 디버깅 역할을 수행한다.
YAML과 같이 자주 언급되는 JSON은 유사한 계층적 데이터 구조를 사용한다는 특징이 있지만 YAML은 읽기/쓰기 쉬운 것에 더 중점을 둔 반면, JSON은 JavaScript와의 호환성을 토대로 웹 애플리케이션과 API를 위해 주로 사용된다는 차이점이 있다.
구성 요소
Descryption
- Comments
Resources (MANDATORY)
- { service provider } - { service name } - { product id } 구조
Parameters
- CF의 resource가 바뀔 수 있다면 기존 템플릿에서 그대로 수정하는 것이 방안.
- !REF 함수 적극 사용! - 인스턴스 ID 같은 logical ID 참조 시 자주 사용
Mapping
- fixed variable
- !FindInMap 함수 사용
Output
- optional
- Export 블록 사용하여 수출
- !ImportValue 함수를 사용하여 수입
Conditional
기타 함수
!GetAtt
- AZ, Id, publicDomainName etc..
!Base64 "ValueToEncode"
- 일반 텍스트를 Base64 방식으로 변환
추가 기능
Rollback
- CloudFormation 스택 생성 및 수정 시 실패 시 Rollback을 수행하는 것이 기본이다.
- Rollback이 실패한 경우, 수동으로 고쳐야 하며, 주로 ContinueUpdateRollback API를 실행함으로써 해결된다.
Service Role
- CloudFormation 스택 내 리소스의 생성 / 수정 / 삭제에 관여하는 IAM role
Deletion Policy
- 스택 제거 시, 스택과 함께 생성했던 리소스의 삭제 정책을 지정하며, default = Deletion
- Deletion, Retain, Snapshot의 세 가지 옵션이 존재한다.
- 스택과 함께 생성된 S3 삭제 시도 시, custom resource 등의 방식으로 S3를 비우는 작업이 선행되어야 한다!!
Stack Policy
- 스택 환경설정을 방지하는 JSON 기반 정책
- 해당 설정 후 스택 변경을 원한다면 명시적 허락(explicit allow)이 필요하다.
Termination Protection
- 생성 및 실행 중인 스택의 의도적 / 비의도적 삭제를 방지하기 위한 옵션
Custom Resources
- CloudFormation의 Resources 탭에 포함될 수 없는 일부 AWS 서비스 혹은 등록되지 않은 제3자 서비스를 사용하기 위한 태그
- "Custom::MyCustomResourceType::TypeName"
Dynamic Reference
- SSM의 Parameter store나 secret store에 저장된 값을 참조하기 위한 기능
- ex. '{{resolve:service-name:reference-key}}' or '{{resolve:ssm:parameter-name:vertion}}'
CloudFormation Helper Scripts
- cfn-init
- CF 스택 생성 시, 설정한 자원 메타데이터, 설치 패키지, 시작 프로그램 등을 확인할 수 있는 기능 제공
- cfn-signal
- cloudformation 스택 생성 결과가 성공인지 실패인지 알리는 신호 역할 수행
- `Wait Condition`을 통해 생성 완료를 기다릴 resource의 name을 기입한다.
- cfn-get-md
- `cat /var/log/cfn-init.log`
- `cat /var/log/cfn-init-cmd.log`
Cross Stack vs. Nested Stack
- Cross Stack
- 여러 스택이 공용으로 사용할 스택
- ex. 애플리케이션 스택은 여러 개지만 이를 담을 네트워크 VPC 스택은 하나이다. (1:M)
- Nested Stack
- 반드시 재사용되어야 할 스택 묶음
- ex. ALB configuration 처럼 한번만 사용되는 것이 아니라 동일한 설정을 여러 번 사용할 때
DependsOn
- 리소스 설치 순서를 명시한다.
'자격증 공부 > AWS SysOps Administrator - Associate' 카테고리의 다른 글
AWS SOA(02) - S3 (1) | 2024.07.22 |
---|---|
AWS SOA(02) - Lambda (1) | 2024.07.14 |
AWS SysOps Administrator - Associate 7일차 (1) | 2024.07.06 |
AWS SysOps Administrator - Associate 6일차 (1) | 2024.07.05 |
AWS SOA(02) - Systems Manager (1) | 2024.07.03 |