0. CloudFormation 템플릿이란?
CloudFormation 템플릿은 AWS 리소스(EC2, S3, IAM 등)를 코드(.yaml 또는 .json)로 정의한 문서이다.
템플릿을 구성하는 섹션은 다음과 같다.
• Resources: EC2 인스턴스, Lambda 함수, RDS 데이터베이스 등 생성할 AWS 자원 정의
• Parameters: 템플릿을 실행할 때마다 다르게 설정할 수 있는 변수 값 정의
• Mappings: 조건에 따라 사용할 리소스를 선택하거나 설정할 때 사용하는 키-값 맵 정의
• Outputs: 생성된 리소스의 정보를 출력으로 제공하여 다른 템플릿이나 서비스와 연계 가능
• Conditions: 특정 조건에 따라 리소스를 생성하거나 생성하지 않게 설정 가능
1. 템플릿을 보관하는 곳
Amazon S3 버킷
템플릿은 S3 버킷에 저장할 수 있다.
스택을 생성하거나 업데이트할 때 직접 업로드하는 대신 S3 URL을 지정할 수 있다.
콘솔이나 CLI를 통해 템플릿을 직접 업로드하는 경우에는 S3 버킷이 자동으로 생성되고 해당 템플릿이 저장된다.
Git 레포지토리
Git Sync를 사용하여 템플릿을 Git 레포에 저장할 수 있다.
스택을 생성하거나 업데이트할 때 템플릿이 포함된 Git 레포지토리 위치와 브랜치를 지정할 수 있다.
템플릿 코드가 변경될 때마다 Cloudformation이 해당 템플릿을 실행하여 배포할 수 있다.
2. 템플릿 유효성 검사
Syntax 유효성 검사
validate-template CLI 명령어를 사용하거나 콘솔에서 템플릿을 지정해서 Syntax을 검사할 수 있다.
이 방법은 Syntax(들여쓰기, key-value, 구조)만 확인하고, 리소스의 Properies values는 검사하지 않는다.
Resources:
MyBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-example-bucket
AccessControl: Private
예를 들어, 위 템플릿에서 Resources, MyBucket, Type, Properties, BucketName, AccessControl 등이 모두 올바른 YAML 문법인지 검사한다.
그러나 Properties 내부 BucketName, AccessControl의 value인 my-example-bucket, Private이 올바른지는(
올바른 버킷 이름 형식인지?, 유효한 접근 제어 설정인지?) 검사하지 않는다.
Properties value은 스택 생성 시나 CloudFormation Linter(cfn-lint) 같은 툴을 이용해 검사할 수 있다.
왜 속성 값까지 검증하지 않을까?
CloudFormation 템플릿에서는 !Ref, !Join 같은 내재 함수를 사용하여 동적으로 값을 생성할 수 있다.
따라서 static한 syntax 검사 단계에서는 평가하기 어렵다.
또한 속성 값의 유효성은 리소스의 상태나 특정 리전에 따라 달라질 수 있다.
예를 들어 스택 생성 시 해당 리전에 존재하지 않는 VPC ID나 key pairs를 참조하려고 하면 에러가 난다.
존재하는지 여부는 스택 생성 전까지는 알 수 없다.
3. 템플릿 작성하기
템플릿 작성 시 다음 단계를 따라 진행해보자.
- Resources 선택 - EC2 인스턴스, VPC, Security Group과 같이 스택에 포함하려는 리소스를 정한다.
- 템플릿 작성 및 저장 - Resources와 Properties을 정의하여 yaml 파일로 작성 후 저장한다.
- 템플릿 유효성 검사 - validate-template이나 cfn-lint를 활용하여 템플릿의 유효성을 검사한다.
- 스택 생성 - 템플릿을 Cloudformation에 올려 스택을 생성한다.
템플릿 Resource와 Property
템플릿에 적용할 수 있는 다양한 Resource의 종류와 문법은 AWS Resource 및 Property 타입 참조 문서에서 확인할 수 있다.
내장 함수(Intrinsic Function), 리소스 속성(Resource Attribute)
대부분의 템플릿은 runtime에 결정되는 property value을 할당하기 위해 내장 함수를 사용하고,
Resource의 동작을 제어하기 위해 특별한 속성들도 사용한다.
자주 사용하는 내장 함수:
• Ref: 파라미터의 값이나 리소스의 실제 ID를 가져온다.
• Sub: 문자열 내의 placeholder를 값으로 대체한다.
• GetAtt: 템플릿에 정의된 리소스의 속성(attribute) 값을 가져온다.
• Join: 여러 값을 하나의 문자열로 결합한다.
자주 사용하는 리소스 속성:
• DependsOn: 한 리소스가 다른 리소스 생성 후에 생성되어야 한다는 것을 지정한다.
• DeletionPolicy: 리소스 삭제 시 CloudFormation이 어떻게 처리할지(삭제, 보존, 스냅샷 생성 등)를 지정한다.
4. 샘플 템플릿
CloudFormation은 시작할 때 사용할 수 있는 샘플을 오픈소스로 제공한다.
샘플 템플릿은 프로덕션에 바로 사용하는 것이 아니라 템플릿의 동작 방식을 배우는 데 사용하고, 우리 서비스에 맞게 적용해보자.
Reference
https://docs.aws.amazon.com/ko_kr/AWSCloudFormation/latest/UserGuide/template-guide.html
'CloudFormation' 카테고리의 다른 글
2. AWS CloudFormation으로 스택 생성하기 (0) | 2025.03.12 |
---|---|
1. CloudFormation 기초 개념 (0) | 2025.03.11 |