Amazon DVA-C02: CloudFormation 및 코드형 인프라 (SAM, CDK) — 학습 가이드
다음의 일부입니다: AWS Developer Associate DVA-C02 — 학습 가이드. 검증된 답안으로 연습하기: Amazon 시험 허브, 또는 다음에서 시간 제한 모의고사 풀기: ExamRoll.io.
CloudFormation 핵심 패턴 및 템플릿 모범 사례
CloudFormation 템플릿은 선언적이고 멱등성 있는 리소스 설명으로 작성해야 하며, 복잡한 아키텍처의 경우 작고 집중된 스택과 중첩 스택을 사용하는 것이 좋습니다. 명시적인 논리적 ID와 함께 Resources 섹션을 사용하고, 구성 및 재사용을 위해 !Ref, !GetAtt, !Sub, Fn::FindInMap, Fn::If와 같은 내장 함수를 사용하는 것을 선호합니다. 변경 세트를 생성하기 전에
undefined
또는 SAM/CDK의 동등한 명령어(
undefined
,
undefined
)로 템플릿 유효성을 검사하십시오. 검토 및 예기치 않은 교체를 방지하기 위해 변경 세트(ChangeSet)(
undefined
/
undefined
)를 사용하고, 스택이 수행할 작업을 검사하려면
undefined
를 사용하십시오. 큰 인라인 코드를 S3로 이동하여 참조(
undefined
,
undefined
/
undefined
)하거나
undefined
을 사용하여 중첩 스택으로 분할함으로써 템플릿 본문을 CloudFormation 제한 미만으로 유지하십시오.
undefined
및
undefined
을 사용하여 정기적으로 드리프트 탐지를 시행하십시오. 데이터를 포함하는 리소스를 보호하기 위해
undefined
및
undefined
을 사용하고, 중요한 스택에는 종료 방지를 활성화하십시오. 구조적 문제와 정책 위반을 조기에 발견하기 위해 cfn-lint와 cfn-guard를 CI/CD에 통합하십시오. 빠른 반복을 위해 변경 세트와 리소스 수준 업데이트 전략을 활용하여 영향 반경을 최소화하고, Lambda 함수의 경우 버전 관리 배포를 사용하여 업데이트를 안전하고 되돌릴 수 있도록 만드십시오.
파라미터화, 매핑, 보안 암호 및 민감 데이터
CloudFormation 파라미터와 매핑을 사용하여 환경 간 차이점을 파라미터화하고,
undefined
와
undefined
를 사용하여 조기에 실패하도록(fail fast) 하십시오. 파라미터에 보안 암호나 평문 자격 증명을 포함하지 마십시오. 대신 SecureString SSM Parameter Store 또는 Secrets Manager를 사용하고,
undefined
와 같은 동적 참조를 통해 참조하거나
undefined
타입을 사용하십시오. 민감한 파라미터는
undefined
로 표시하여 콘솔에서 값을 마스킹하되, NoEcho는 저장 시 암호화를 제공하지 않는다는 점을 인지하십시오. 감사 및 교체(rotation)를 위해서는 Secrets Manager를 사용하십시오. 리전별 AMI ID와 같이 결정적이고 환경에 특화된 값에는 매핑과
undefined
을 사용하고, 가용 영역 계산에는
undefined
을 사용하십시오. 동일한 리전/계정 내 스택 간 리소스 참조를 위해 출력을 내보내고
undefined
을 통해 가져오십시오. 가져오기는 계정이나 리전을 교차할 수 없다는 점을 기억하십시오. 최소 권한 원칙에 따라 역할의 범위를 지정하여 CloudFormation이 사용하는 IAM 보안 주체를 보호하십시오. 서비스 관리형 StackSet 권한을 선호하거나, 제한된 범위의 관리 역할을 명시적으로 프로비저닝하십시오. 컨테이너나 Lambda에 환경 변수를 전달할 때, Secrets Manager ARN이나 SSM Parameter ARN을 참조하고 코드 내에서 런타임에 검색하는 방식을 선호하거나, SAM/CDK 기능을 사용하여 KMS를 통한 암호화와 함께 보안 값을 환경에 주입하십시오.
교차 계정/리전 배포, CDK 및 SAM 다중 계정 패턴
교차 계정 및 교차 리전 배포는 단일 스택 내보내기를 넘어서는 오케스트레이션이 필요합니다. 다중 계정/다중 리전 배포의 경우, Organizations를 위한 서비스 관리형 권한을 사용하는 CloudFormation StackSets(
undefined
,
undefined
)를 선택하거나, 대상 계정에 실행 역할을 두는 자체 관리형 방식을 선택하십시오. 애플리케이션 코드 아티팩트의 경우, 교차 계정 복제 또는 버킷 정책을 사용하는 중앙 집중식 S3 버킷을 사용하거나, 도구가 리전별로 자산을 게시하도록 하십시오. CDK는 부트스트랩 스택과 cdk-assets를 통해 게시된 자산을 사용하며 각 계정/리전에서
undefined
가 필요합니다. CDK Pipelines(pipelines 모듈) 또는
undefined
옵션을 사용한
undefined
는 교차 계정 프로모션을 지원합니다. SAM은 아티팩트를 S3 버킷에 업로드하는
undefined
/
undefined
를 사용합니다. 다중 계정의 경우 CI/CD를 사용하여 아티팩트를 패키징하고 대상 계정 버킷으로 푸시한 다음, 적절한 자격 증명으로 배포를 실행하십시오. 합성 시점(synth time)에 계정별 권한이 필요한 CDK 컨텍스트 조회(
undefined
등)를 피하십시오. 대신, 합성의 재현성을 유지하기 위해 식별자를 파라미터로 명시적으로 전달하십시오. AWS CodePipeline 또는 GitHub Actions를 수임된 역할(
undefined
)과 함께 사용하여 대상 계정에 배포를 수행하고, 부트스트랩 및 필요한 서비스 연결 역할이 존재하는지 확인하십시오. CloudFormation 내보내기는 리전별로 적용된다는 점을 기억하십시오. 교차 계정 배포에는 StackSets 또는 파이프라인 기반 배포를 선호하십시오.
사용자 지정 리소스, 스택 보호 및 로컬/증분 배포 가속기
CloudFormation에 네이티브 리소스 유형이 없을 때는 사용자 지정 리소스를 사용합니다. 이때 Create/Update/Delete 이벤트에 대한 CloudFormation 응답 프로토콜을 따르는 Lambda 기반 공급자를 구현합니다. 멱등성(idempotent) 핸들러를 구축하고, cfn-response 또는 CloudFormation CLI 프레임워크로 응답하며, 오래 실행되는 작업은 진행률 이벤트(progress events)를 사용하거나 DynamoDB에 상태를 저장하여 처리합니다. 사용자 지정 리소스의 타임아웃에 유의해야 합니다. CloudFormation에는 최대 스택 작업 타임아웃이 있으며, Lambda 기반 리소스는 이 시간 내에 완료되지 않으면 스택 롤백을 유발합니다. 스택 정책(SetStackPolicy)으로 중요 리소스를 보호하여 스택 업데이트 중 지정된 논리적 ID의 교체나 업데이트를 차단하고, 삭제해서는 안 되는 환경에는 종료 보호(termination protection)를 활성화합니다. 증분 및 로컬 개발을 위해서는 AWS SAM CLI(sam build, sam local invoke, sam local start-api)와 빠른 코드 전용 업데이트를 위한 sam sync를 사용하고, 변경된 리소스만 업데이트하기 위해 CDK watch 또는 애셋과 함께 cdk deploy를 사용합니다. 이러한 도구들은 애셋 해시(lambda asset hashing)를 계산하여 변경된 코드만 다시 게시합니다. 안전한 배포를 위해 CloudFormation 변경 세트(ChangeSets), Lambda 버전 관리(SAM의 AutoPublishAlias 또는 CDK의 lambda.Version), 그리고 CodeDeploy 트래픽 전환(traffic-shifting)을 통합합니다. 일반적인 함정으로는 템플릿 또는 파라미터 제한 초과, 계정 간 가져오기(cross-account imports)의 잘못된 사용, 핸들러 내부에서 무거운 SDK 클라이언트를 초기화하여 콜드 스타트 지연을 유발하는 것 등이 있습니다. 전역적으로 지연 초기화(lazy-initialized)되고 타임아웃 및 재시도 동작을 구성할 수 있는 클라이언트를 사용하는 것이 좋습니다.
실용적인 문제: 사용 사례 시나리오
시나리오: AcmeMedia는 us-east-1 리전에 별도의 Dev, Staging, Prod 계정을 가진 다중 계정 AWS 조직을 관리합니다. 서버리스 이미지 처리 서비스(Lambda + S3 + DynamoDB)를 모든 계정에 일관되게 배포해야 하며, 공유되는 민감한 구성 정보는 중앙에서 저장해야 합니다.
과제: 동일한 CloudFormation/SAM/CDK 스택을 여러 계정에 배포하고, 각 대상 계정에서 Lambda 코드 아티팩트를 안전하게 사용할 수 있도록 보장하면서, 템플릿에는 보안 암호를 포함하지 않도록 해야 합니다.
권장 접근 방식:
- 서비스 관리형 권한(service-managed permissions)을 사용하는 AWS CloudFormation StackSets(aws cloudformation create-stack-set –stack-set-name ImageProcessor –template-body file://template.yaml)를 사용한 후, aws cloudformation create-stack-instances로 대상 계정 및 리전을 지정하거나, CDK Pipelines를 구성하여 역할(role)을 사용해 계정별로 synth 및 배포를 수행합니다.
- CDK 애셋 게시(각 계정/리전에서 cdk bootstrap 실행) 또는 sam package를 사용하여 각 대상 계정의 S3 버킷으로 Lambda 애셋을 패키징합니다. CI(CodeBuild에서 aws s3 cp 또는 S3 복제 사용)를 통해 애셋 복사를 자동화하고, 대상 계정 자격 증명을 사용하여 cdk deploy 또는 sam deploy를 실행합니다.
- 민감한 구성 정보는 각 계정의 AWS Secrets Manager에 저장하고, 동적 참조(dynamic references) ({{resolve:secretsmanager:arn:aws:secretsmanager:us-east-1:123456789012:secret:ImageProcSecret:SecretString:apiKey}})를 통해 템플릿에서 참조하거나, Secrets Manager 복제 기능을 통해 복제된 보안 암호를 배포하여 NoEcho 파라미터 사용을 피합니다.
- 변경 세트(ChangeSets) (create-change-set, execute-change-set)를 사용하고, 프로덕션 스택에 종료 보호(termination protection)를 활성화하며, 스택 정책을 사용하여 업데이트 중 DynamoDB 테이블이나 S3 버킷이 실수로 교체되는 것을 방지합니다.
근거: StackSets와 파이프라인 기반 배포는 안전하고 감사 가능한 다중 계정/리전 전파를 제공하며, 애셋 게시와 계정별 보안 암호는 자격 증명을 로컬에 유지하고 감사 가능하게 합니다. 변경 세트, 종료 보호, 스택 정책은 반복적인 배포 과정에서 발생하는 위험을 줄여줍니다.
← Amazon DynamoDB 및 NoSQL 설계 · 모든 도메인 · 배포 및 CI →
이 문제 연습하기 → · ExamRoll.io에서 시간 제한 연습 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
시험 합격하기 →