AWS CloudFormation
IT 위키
더 많은 작업
- AWS CloudFormation; CloudFormation; 클라우드포메이션
- AWS 리소스를 YAML이나 JSON 템플릿으로 선언하고, 그 템플릿대로 리소스 묶음(스택)을 만들고 바꾸고 지우는 AWS의 코드형 인프라 서비스
콘솔에서 손으로 VPC, 서브넷, 보안 그룹, EC2, RDS를 만들면 같은 환경을 다시 만들 때 빠뜨리거나 다르게 만들기 쉽다. AWS CloudFormation은 원하는 최종 상태를 템플릿에 적으면 생성 순서와 의존 관계를 알아서 계산해 리소스를 프로비저닝한다. 템플릿은 코드처럼 버전 관리하고 리뷰할 수 있으므로 개발·스테이징·운영 환경을 똑같이 찍어 내고, 재해가 나면 다른 리전에 같은 인프라를 다시 세운다. SAA 시험 가이드의 "인프라 무결성을 보장하기 위한 자동화 전략", "변경 불가능한 인프라"가 이 서비스와 연결된다.

| 섹션 | 필수 | 역할 |
|---|---|---|
| AWSTemplateFormatVersion | 아니요 | 템플릿 형식 버전 |
| Description | 아니요 | 템플릿 설명 |
| Parameters | 아니요 | 스택을 만들거나 바꿀 때 입력받는 값(인스턴스 유형, 환경 이름 등) |
| Mappings | 아니요 | 키·값 조회표. Fn::FindInMap으로 리전별 AMI ID 같은 값을 고른다
|
| Conditions | 아니요 | 조건식. 운영 환경에서만 다중 AZ를 켜는 식으로 리소스 생성 여부나 속성을 바꾼다 |
| Rules | 아니요 | 파라미터 값이나 조합을 검증 |
| Transform | 아니요 | 매크로 적용. 서버리스 애플리케이션은 AWS SAM 변환을 지정한다 |
| Resources | 예 | 만들 리소스와 속성. 템플릿의 핵심 |
| Outputs | 아니요 | 스택이 돌려주는 값(ALB DNS 이름 등). 내보내기(Export)로 다른 스택이 참조 |
AWSTemplateFormatVersion: "2010-09-09"
Description: S3 bucket with versioning, deletion protected in prod
Parameters:
Env:
Type: String
AllowedValues: [dev, prod]
Conditions:
IsProd: !Equals [!Ref Env, prod]
Resources:
DataBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
Properties:
VersioningConfiguration:
Status: !If [IsProd, Enabled, Suspended]
Outputs:
BucketName:
Value: !Ref DataBucket
DeletionPolicy: Retain을 주면 스택을 지워도 버킷은 남는다. EBS 볼륨처럼 스냅샷을 지원하는 리소스는 Snapshot을 지정해 삭제 전에 스냅샷을 남길 수 있다. 기본값은 삭제이지만, RDS DB 클러스터와 일부 DB 인스턴스는 기본값이 스냅샷이다.
스택은 하나의 템플릿으로 만든 리소스 묶음이며, 생성·수정·삭제가 스택 단위로 일어난다.
| 기능 | 설명 |
|---|---|
| 롤백 | 생성이나 업데이트 중 리소스 하나라도 실패하면 기본적으로 이전 안정 상태로 되돌린다. 성공한 리소스 보존 옵션을 켜면 실패 지점에서 문제를 고친 뒤 이어서 진행할 수 있다 |
| 변경 세트(change set) | 템플릿 변경을 실제로 적용하기 전에 어떤 리소스가 추가·수정·교체·삭제되는지 미리 보여 준다. 데이터베이스가 교체되는 사고를 막는 검토 단계 |
| 드리프트 감지 | 누군가 콘솔에서 직접 바꾼 설정처럼 스택 밖에서 생긴 변경을 찾아낸다. 실제 구성이 템플릿과 다르면 DRIFTED로 표시 |
| 중첩 스택 | 공통 구성(VPC, 보안 그룹)을 별도 템플릿으로 나눠 재사용 |
| 스택 간 참조 | Outputs의 Export와 Fn::ImportValue로 네트워크 스택 값을 애플리케이션 스택에서 사용
|
| StackSets | 관리자 계정에서 템플릿 하나로 여러 계정과 여러 리전에 스택을 한 번에 만들고 업데이트·삭제 |
- 불변 인프라: 운영 중인 서버를 고치지 않고, 템플릿과 새 AMI로 새 리소스를 만들어 교체한다. 설정이 서버마다 달라지는 문제를 없앤다. 블루 그린 배포와 잘 맞는다.
- 재현 가능한 환경: 같은 템플릿에 파라미터만 바꿔 개발·운영 환경을 만든다.
- DR 재구축: 백업 및 복원, 파일럿 라이트 전략에서는 복구 리전에 인프라를 빠르게 다시 세우는 수단이 CloudFormation이다. 의사 파라미터(
AWS::Region,AWS::AccountId)와 조건으로 DR 리전에서는 축소된 구성만 배포할 수 있다. StackSets로 여러 리전에 같은 기준 구성을 유지한다.
AWS Systems Manager는 EC2, 온프레미스 서버, 다른 클라우드의 VM을 관리형 노드로 묶어 운영 작업을 자동화하는 서비스 모음이다. 노드에 SSM Agent가 설치되어 있고 Systems Manager와 통신할 권한(EC2라면 인스턴스 프로파일의 IAM 역할)이 있어야 한다.
| 도구 | 하는 일 | 시험 단서 |
|---|---|---|
| Session Manager | 브라우저나 CLI로 노드에 셸 접속. 인바운드 포트, 배스천 호스트, SSH 키가 필요 없고 IAM 정책으로 접근을 제어한다. 세션 기록은 S3나 CloudWatch Logs에 남긴다 | "SSH 포트를 열지 않고 안전하게 접속, 접속 기록 감사" |
| Patch Manager | 패치 기준선에 따라 OS와 애플리케이션 패치를 검사·설치. 패치 정책, 유지 관리 기간, 즉시 패치로 실행 | "수백 대 서버의 정기 패치 자동화" |
| Parameter Store | 설정값과 비밀값을 계층 구조로 저장. String, StringList, KMS로 암호화하는 SecureString 유형. 표준 계층은 무료 | "설정값을 코드 밖에 두고 중앙 관리" |
| Run Command | 여러 노드에 명령을 일괄 실행 | "SSH 없이 여러 인스턴스에 스크립트 실행" |
| Automation | 런북(Automation 문서)으로 운영 절차를 자동화. AWS Config 수정 조치도 이것을 쓴다 | "AMI 생성, 인스턴스 재시작 같은 절차 자동화" |
- 데이터베이스 자격 증명처럼 자동 교체가 필요한 비밀값은 Parameter Store보다 AWS Secrets Manager가 맞다. AWS도 비밀값은 Secrets Manager를 권장한다.
- 퍼블릭 IP가 없는 인스턴스도 VPC 엔드포인트(PrivateLink)를 통해 Session Manager로 접속할 수 있다.
- "여러 환경·리전에 같은 인프라를 반복 배포, 수동 작업 제거"는 CloudFormation, 여러 계정·리전에 한 번에 배포하면 StackSets다.
- "운영 스택 변경 전에 영향을 미리 확인"은 변경 세트, "누가 콘솔에서 바꾼 설정 찾기"는 드리프트 감지다.
- "스택을 지워도 데이터는 남겨야 함"은 DeletionPolicy Retain 또는 Snapshot이다.
- DR 시나리오에서 "복구 리전에 인프라를 빠르게 재생성"이 나오면 CloudFormation 템플릿을 준비해 두는 것이 정석이다.
- "배스천 호스트 없이, 22번 포트를 열지 않고 접속"은 Session Manager다.
- "설정값 중앙 관리"는 Parameter Store, "비밀번호 자동 교체"는 Secrets Manager로 구분한다.
- CloudFormation 템플릿 섹션 – AWS
- 변경 세트를 사용하여 스택 업데이트 – AWS
- 드리프트 감지 – AWS
- StackSets로 여러 계정과 리전의 스택 관리 – AWS
- AWS Systems Manager Session Manager – AWS