AWS CDK 애플리케이션 배포 - AWS Cloud Development Kit (AWS CDK) v2

AWS CDK v2 개발자 안내서입니다. 구형 CDK v1은 2022년 6월 1일에 유지 보수에 들어갔고 2023년 6월 1일에 지원이 종료되었습니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS CDK 애플리케이션 배포

AWS Cloud Development Kit (AWS CDK) 배포는 인프라를 프로비저닝하는 프로세스입니다. AWS

AWS CDK 배포 작동 방식

는 AWS CloudFormation 서비스를 AWS CDK 활용하여 배포를 수행합니다. 배포하기 전에 스택을 합성합니다. CDK 그러면 앱의 각 CDK 스택에 대한 CloudFormation 템플릿과 배포 아티팩트가 생성됩니다. 배포는 로컬 개발 시스템 또는 CI/CD (지속적 통합 및 지속적 전달) 환경에서 시작됩니다. 배포 중에 자산이 부트스트랩된 리소스에 업로드되고 CloudFormation 템플릿이 제출되어 리소스를 프로비저닝합니다. CloudFormation AWS

배포가 성공하려면 다음이 필요합니다.

  • AWS CDK 명령줄 인터페이스 (AWS CDK CLI) 에 유효한 권한이 제공되어야 합니다.

  • AWS 환경을 부트스트랩해야 합니다.

  • 에셋을 업로드할 부트스트랩된 리소스를 AWS CDK 알아야 합니다.

배포를 위한 사전 요구 사항 CDK

애플리케이션을 배포하려면 먼저 다음을 AWS CDK 완료해야 합니다.

  • 에 대한 보안 자격 증명을 구성합니다 CDKCLI.

  • AWS 환경을 부트스트랩하십시오.

  • 각 CDK 스택에 대한 AWS 환경을 구성하십시오.

  • CDK앱을 개발하세요.

보안 자격 증명을 구성합니다.

를 사용하여 상호 CDK CLI AWS작용하려면 로컬 컴퓨터에 보안 자격 증명을 구성해야 합니다. 지침은 에 대한 보안 자격 증명을 구성합니다. AWS CDKCLI 단원을 참조하십시오.

환경을 부트스트랩하세요. AWS

배포는 항상 하나 이상의 AWS 환경과 연결됩니다. 배포하려면 먼저 환경을 부트스트랩해야 합니다. 부트스트래핑은 배포를 수행하고 관리하는 데 CDK 사용하는 환경 내 리소스를 제공합니다. 이러한 리소스에는 자산을 저장하고 관리하는 Amazon Simple Storage Service (Amazon S3) 버킷과 Amazon 엘라스틱 컨테이너 레지스트리 (ECRAmazon) 리포지토리가 포함됩니다. 이러한 리소스에는 개발 및 배포 중에 권한을 제공하는 데 사용되는 AWS Identity and Access Management (IAM) 역할도 포함됩니다.

AWS CDK 명령줄 인터페이스 (AWS CDK CLI) cdk bootstrap 명령을 사용하여 환경을 부트스트랩하는 것이 좋습니다. 필요한 경우 부트스트래핑을 사용자 지정하거나 사용자 환경에서 이러한 리소스를 수동으로 만들 수 있습니다. 지침은 다음과 함께 사용할 수 있도록 환경을 부트스트랩하십시오. AWS CDK 단원을 참조하십시오.

환경을 구성합니다. AWS

CDK스택을 어디에 배포할지 결정하려면 각 스택을 환경과 연결해야 합니다. 지침은 와 함께 사용할 환경 구성 AWS CDK 단원을 참조하십시오.

CDK앱 개발

CDK프로젝트 내에서 CDK 앱을 만들고 개발합니다. 앱 내에서 하나 이상의 CDK 스택을 만듭니다. 스택 내에서 AWS 구성 라이브러리의 구성을 가져와 사용하여 인프라를 정의합니다. 배포하려면 먼저 CDK 앱에 스택이 하나 이상 있어야 합니다.

CDK앱 합성

합성을 수행하려면 CDK CLI cdk synth 명령을 사용하는 것이 좋습니다. 또한 이 cdk deploy 명령은 배포를 시작하기 전에 합성을 수행합니다. 하지만 를 사용하면 cdk synth 배포를 시작하기 전에 CDK 앱을 검증하고 오류를 찾아낼 수 있습니다.

합성 동작은 스택에 구성한 스택 신시사이저에 CDK 의해 결정됩니다. 신디사이저를 구성하지 않으면 신디사이저가 DefaultStackSynthesizer 사용됩니다. 필요에 맞게 합성을 구성하고 사용자 정의할 수도 있습니다. 지침은 CDK스택 합성 구성 및 사용자 지정 단원을 참조하십시오.

합성된 CloudFormation 템플릿을 환경에 성공적으로 배포하려면 해당 환경이 부트스트랩된 방식과 호환되어야 합니다. 예를 들어 CloudFormation 템플릿은 자산을 배포할 올바른 Amazon S3 버킷을 지정해야 합니다. 환경을 부트스트래핑하는 기본 방법을 사용하는 경우 기본 스택 신시사이저가 작동합니다. 부트스트래핑이나 합성을 사용자 지정하는 등 CDK 동작을 사용자 지정하는 경우 배포 동작이 달라질 수 있습니다. CDK

앱 수명 주기

합성을 수행하면 CDK 앱은 앱 수명 주기라고 하는 다음 단계를 거쳐 실행됩니다.

구성 (또는 초기화)

코드는 정의된 모든 구문을 인스턴스화한 다음 함께 연결합니다. 이 단계에서는 모든 구문 (앱, 스택, 하위 구문) 이 인스턴스화되고 생성자 체인이 실행됩니다. 대부분의 앱 코드는 이 단계에서 실행됩니다.

준비

prepare메서드를 구현한 모든 구문은 최종 상태를 설정하기 위해 최종 수정 단계에 참여합니다. 준비 단계는 자동으로 진행됩니다. 사용자는 이 단계에서 어떤 피드백도 볼 수 없습니다. “준비” 후크를 사용할 필요는 거의 없으며 일반적으로 권장되지 않습니다. 이 단계에서 구성 트리를 변경할 때는 작업 순서가 동작에 영향을 줄 수 있으므로 매우 주의해야 합니다.

이 단계에서는 구성 트리가 빌드되고 나면 구성한 모든 요소도 적용됩니다.

검증

validate메서드를 구현한 모든 구문은 자체 검증을 통해 제대로 배포될 수 있는 상태인지 확인할 수 있습니다. 이 단계에서 발생하는 모든 유효성 검사 실패에 대한 알림을 받게 됩니다. 일반적으로 가능한 한 빨리 (보통 입력이 들어오는 즉시) 검증을 수행하고 가능한 한 빨리 예외를 발생시키는 것이 좋습니다. 검증을 조기에 수행하면 스택 추적이 더 정확해지기 때문에 안정성이 향상되고 코드가 안전하게 계속 실행될 수 있습니다.

합성

이것이 CDK 앱 실행의 마지막 단계입니다. 호출에 의해 트리거되며app.synth(), 구성 트리를 탐색하고 모든 구문에서 synthesize 메서드를 호출합니다. 구현한 구문은 합성에 참여하고 결과 클라우드 어셈블리에 배포 아티팩트를 생성할 synthesize 수 있습니다. 이러한 아티팩트에는 CloudFormation 템플릿, AWS Lambda 애플리케이션 번들, 파일 및 Docker 이미지 자산, 기타 배포 아티팩트가 포함됩니다. 대부분의 경우 메서드를 구현하지 않아도 됩니다. synthesize

앱 실행

CDK앱 실행 방법을 CDK CLI 알아야 합니다. cdk init명령어를 사용하여 템플릿에서 프로젝트를 만든 경우 앱 cdk.json 파일에 app 키가 포함됩니다. 이 키는 앱이 작성된 언어에 필요한 명령을 지정합니다. 언어의 컴파일이 필요한 경우 명령줄은 앱을 자동으로 실행하기 전에 이 단계를 수행합니다.

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }
Go
{ "app": "go mod download && go run my-app.go" }

를 사용하여 프로젝트를 만들지 않았거나 에 CDK CLI 제공된 명령줄을 재정의하려는 경우 명령을 실행할 때 --app 옵션을 제공할 수 있습니다. cdk.json cdk

$ cdk --app 'executable' cdk-command ...

The executable 명령의 일부는 CDK 애플리케이션을 실행하기 위해 실행해야 하는 명령을 나타냅니다. 표시된 대로 따옴표를 사용하십시오. 이러한 명령에는 공백이 포함되어 있기 때문입니다. The cdk-command 앱으로 수행하려는 작업을 deploy 알려주는 synth 또는 와 같은 하위 명령입니다. CDK CLI 이 뒤에 해당 하위 명령에 필요한 추가 옵션을 모두 포함하세요.

또한 이미 CDK CLI 합성된 클라우드 어셈블리와 직접 상호 작용할 수도 있습니다. 이렇게 하려면 클라우드 어셈블리가 저장되어 있는 디렉터리를 전달해야 합니다. --app 다음 예제는 저장되어 있는 클라우드 어셈블리에 정의된 스택을 나열합니다. ./my-cloud-assembly

$ cdk --app ./my-cloud-assembly ls

클라우드 어셈블리

app.synth() 호출하면 앱에서 클라우드 어셈블리를 AWS CDK 합성하도록 지시합니다. 일반적으로 클라우드 어셈블리와 직접 상호 작용하지 않습니다. 앱을 클라우드 환경에 배포하는 데 필요한 모든 것이 포함된 파일입니다. 예를 들어 앱의 각 스택에 대한 AWS CloudFormation 템플릿이 포함되어 있습니다. 또한 앱에서 참조하는 모든 파일 자산 또는 Docker 이미지의 사본도 포함됩니다.

클라우드 어셈블리 형식 지정 방법에 대한 자세한 내용은 클라우드 어셈블리 사양을 참조하십시오.

AWS CDK 앱에서 생성하는 클라우드 어셈블리와 상호 작용하려면 일반적으로 를 사용합니다. AWS CDK CLI 하지만 클라우드 어셈블리 형식을 읽을 수 있는 모든 도구를 사용하여 앱을 배포할 수 있습니다.

애플리케이션 배포

애플리케이션을 배포하려면 CDK CLI cdk deploy 명령을 사용하여 배포를 시작하거나 자동 배포를 구성하는 것이 좋습니다.

cdk deploy 실행하면 배포 준비가 CDK CLI 시작됩니다cdk synth. 다음 다이어그램은 배포 상황에서의 앱 라이프사이클을 보여줍니다.

AWS CDK 앱 라이프사이클 흐름도.

배포 중에 합성을 통해 생성된 클라우드 어셈블리를 CDK CLI 가져와 환경에 배포합니다. AWS 자산은 Amazon S3와 Amazon에 ECR 업로드되고 CloudFormation 템플릿은 배포를 AWS CloudFormation 위해 제출됩니다.

AWS CloudFormation 배포 단계가 시작될 무렵에는 CDK 앱 실행이 이미 완료되고 종료되었습니다. 이는 다음과 같은 의미를 가집니다.

  • CDK앱은 배포 중에 발생하는 이벤트 (예: 리소스 생성 또는 전체 배포 완료) 에 응답할 수 없습니다. 배포 단계에서 코드를 실행하려면 코드를 AWS CloudFormation 템플릿에 사용자 지정 리소스로 삽입해야 합니다. 앱에 사용자 지정 리소스를 추가하는 방법에 대한 자세한 내용은 AWS CloudFormation 모듈 또는 사용자 지정 리소스 예제를 참조하십시오. 배포 중에 코드를 실행하도록 Triggers 모듈을 구성할 수도 있습니다.

  • CDK앱이 실행 당시에는 알 수 없는 값으로 작동해야 할 수도 있습니다. 예를 들어 AWS CDK 앱이 자동으로 생성된 이름으로 Amazon S3 버킷을 정의하고 사용자가 bucket.bucketName (Python:bucket_name) 속성을 검색하는 경우 해당 값은 배포된 버킷의 이름이 아닙니다. 대신 Token 값을 얻게 됩니다. 특정 값을 사용할 수 있는지 확인하려면 cdk.isUnresolved(value) (Python:is_unresolved) 를 호출하십시오. 세부 정보는 토큰 및 AWS CDK를 참조하세요.

배포 권한

배포를 수행하려면 먼저 권한을 설정해야 합니다. 다음 다이어그램은 기본 부트스트래핑 프로세스 및 스택 신시사이저를 사용할 때 기본 배포 중에 사용되는 권한을 보여줍니다.

기본 배포 프로세스의 흐름도. AWS CDK
액터가 배포를 시작합니다.

배포는 액터가 를 사용하여 시작합니다. CDK CLI 액터는 사람일 수도 있고, 다음과 같은 서비스일 수도 있습니다. AWS CodePipeline

필요한 경우, 실행 cdk synth 시 CDK CLI 실행됩니다cdk deploy. 합성 과정에서 AWS ID는 가 환경에서 컨텍스트 조회를 수행한다고 가정합니다. LookupRole AWS

권한이 설정됩니다.

먼저, 행위자의 보안 자격 증명이 프로세스의 첫 번째 IAM ID를 AWS 인증하고 획득하는 데 사용됩니다. 인간 행위자의 경우 보안 자격 증명을 구성하고 획득하는 방법은 사용자 또는 조직이 사용자를 관리하는 방식에 따라 달라집니다. 자세한 내용은 에 대한 보안 자격 증명을 구성합니다. AWS CDKCLI 단원을 참조하십시오. 와 같은 서비스 행위자의 CodePipeline 경우 IAM 실행 역할이 가정되어 사용됩니다.

그런 다음 부트스트래핑 중에 사용자 AWS 환경에서 만든 IAM 역할을 사용하여 배포에 필요한 작업을 수행할 권한을 설정합니다. 이러한 역할 및 해당 역할이 권한을 부여하는 대상에 대한 자세한 내용은 을 참조하십시오. IAM부트스트래핑 중에 생성되는 역할 이 프로세스에는 다음이 포함됩니다.

  • AWS ID는 역할을 수임하고 DeploymentActionRole CloudFormationExecutionRole 역할을 전달하여 사용자 AWS 환경에서 작업을 수행할 때 해당 역할을 CloudFormation 수임하도록 CloudFormation 합니다. DeploymentActionRole환경에 배포를 수행할 권한을 부여하고 수행할 수 있는 작업을 CloudFormationExecutionRole 결정합니다. CloudFormation

  • AWS ID는 를 가정하며FilePublishingRole, 부트스트랩 중에 생성된 Amazon S3 버킷에서 수행할 수 있는 작업을 결정합니다.

  • AWS ID는 를 가정하며ImagePublishingRole, 이는 부트스트래핑 중에 생성된 Amazon ECR 리포지토리에서 수행할 수 있는 작업을 결정합니다.

  • 필요한 경우 AWS ID는 가 환경에서 컨텍스트 조회를 LookupRole 수행한다고 가정합니다. AWS 이 작업은 템플릿 합성 중에도 수행할 수 있습니다.

배포가 수행됩니다.

배포 중에 는 부트스트랩 버전 매개변수를 CDK CLI 읽고 부트스트랩 버전 번호를 확인합니다. AWS CloudFormation 또한 배포 시 이 파라미터를 읽고 확인합니다. 배포 워크플로 전체의 권한이 유효하면 배포가 수행됩니다. 자산은 부트스트랩된 리소스에 업로드되고 합성 시 생성된 CloudFormation 템플릿은 CloudFormation 서비스를 CloudFormation 스택으로 사용하여 배포되어 리소스를 프로비저닝합니다.