AWS CloudFormation 개요
CloudFormation은 코드로 AWS 인프라를 정의하고 자동으로 생성하는 서비스
이를 통해 EC2, S3, 로드밸런서 등 다양한 리소스를 선언만 하면 자동으로 생성되고 연결됨.
인프라 구성 파일은 YAML 또는 JSON 형식의 템플릿으로 작성되며, 이를 이용해 리소스를 선언적 방식으로 구성함.
기존 템플릿은 편집 불가 → 새 버전 업로드 후 업데이트.
삭제 시 스택에서 생성한 모든 리소스가 함께 삭제됨.
CloudFormation의 구성 요소
AWSTemplateFormatVersion: 템플릿 버전 정의.Description: 템플릿 설명.Resources(필수): 생성할 AWS 리소스 정의.Parameters: 외부에서 전달 가능한 입력값.Mappings: 지역별 또는 환경별 값 매핑.Outputs: 다른 스택이나 참조를 위한 출력값.Conditions: 특정 조건에서만 리소스를 생성할지 결정.- Functions : Ref, Fn::Join 등 템플릿 내에서 값 조작용 헬퍼 함수들.
Resource
CloudFormation 템플릿에서 유일하게 반드시 포함되어야 하는 섹션입니다.
AWS가 리소스의 라이프사이클 관리
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
InstanceType: !Ref InstanceType
Parameter
- 매개 변수는 템플릿에서 사용자 입력값을 받아 재사용 가능하고 유연한 구성을 가능하게 함. 미래에 변경 가능성이 있는 값은 매개 변수로 만드는 것이 좋음.
매개 변수 사용법
예:
Parameters:
InstanceType:
Type: String
Default: t2.micro
AllowedValues:
- t2.micro
- t2.small
- t2.medium
의사 매개 변수 (Pseudo Parameters)
- AWS가 자동 제공하는 매개 변수. 생성 필요 없음.
AWS::AccountIdAWS::RegionAWS::StackNameAWS::NoValue등
Mappings
- 매핑(Mapping)은 템플릿 내부에서 고정된 변수 값을 설정하는 방식
- 환경(dev, prod), AWS 리전(us-east-1, eu-west-1), AMI 타입(HVM64, HVMG2) 등 지역이나 환경별 차이를 구분할 때 유용
- 매핑은 하드코딩된 값들로 구성되며, 템플릿 내에서 조건 없이 참조할 수 있음
출력(Outputs)과 클라우드 형성(Stack Linking)
출력(Outputs): CloudFormation에서 선택적으로 선언할 수 있으며, 스택 외부에서 값을 참조할 수 있도록 만듦. 다른 스택(예: 애플리케이션 스택)에서 필요한 값(VPC ID, Subnet ID 등)을 공유하기 위해 사용.
활용 예시:
- 네트워크 스택에서
VPC ID,Subnet ID를 출력하고, - 애플리케이션 스택에서 이를 참조(
ImportValue)하여 재사용.
중요한 점:
- 한 스택이 내보낸 값을 다른 스택이 참조하고 있으면, 해당 스택은 삭제 불가능.
Conditions
특정 상황에 따라 리소스나 출력(Outputs)을 선택적으로 생성하거나 제어할 수 있는 기능. 예를 들어, 개발 환경에서는 특정 리소스를 생성하고, 프로덕션에서는 생략.
본질 함수 요약 (Intrinsic Functions)
CloudFormation에서 템플릿을 동적으로 구성하고 리소스를 참조하거나 조작할 때 사용하는 함수.
이 중 Ref와 GetAtt는 꼭 알아야 하는 핵심 함수이다.
꼭 알아야 할 함수들
Ref : 리소스나 매개변수의 기본 값(ID 또는 지정된 값) 반환
Ref: MyVPC
→ MyVPC의 ID를 반환 (예: VPC-abc123)
GetAtt : 리소스의 속성(특성) 값을 반환
Fn::GetAtt:
- MyInstance
- AvailabilityZone
또는 축약형: !GetAtt MyInstance.AvailabilityZone
기타 자주 쓰이는 함수들
| 함수명 | 설명 |
|---|---|
FindInMap |
Mapping 정의에서 값 찾기 |
ImportValue |
다른 스택에서 Export된 값 가져오기 |
Join |
문자열을 구분자로 연결 |
Sub |
문자열 내 변수 치환 (${} 형식) |
Base64 |
문자열을 Base64 인코딩 (UserData에 사용) |
Cidr |
CIDR 블록 생성 |
GetAZs |
지정된 리전에 대한 가용 영역 리스트 반환 |
Select |
리스트에서 특정 인덱스의 값 선택 |
Split |
문자열을 구분자로 나눠 리스트로 반환 |
Transform |
매크로 적용에 사용 |
ToJsonString |
구조 데이터를 JSON 문자열로 변환 |
Length (Len) |
리스트 길이 반환 |
'Web' 카테고리의 다른 글
| Route53에서 구입한 도메인 ACM발급 실패 (0) | 2025.04.19 |
|---|---|
| AWS DOP - CloudFormation (2) (0) | 2025.04.17 |
| AWS DOP - SDLC Automation 파트 개념 정리 (2) | 2025.04.15 |
| k8s 간략히 따라해보기 (0) | 2025.04.13 |
| AWS EC2 -> 온프레미스 전환 (4) - 절전 모드 방지 (0) | 2025.04.11 |