AWS CDK 툴킷 (cdk명령) - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK 툴킷 (cdk명령)

CLI cdk 명령어인 AWS CDK 툴킷은 앱과 상호작용하기 위한 기본 도구입니다. AWS CDK 앱을 실행하고, 정의한 애플리케이션 모델을 조사하고, 에서 생성된 템플릿을 생성 및 배포합니다. AWS CloudFormation AWS CDK또한 프로젝트를 만들고 작업하는 데 유용한 다른 기능도 제공합니다. AWS CDK 이 항목에는 CDK 툴킷의 일반적인 사용 사례에 대한 정보가 포함되어 있습니다.

AWS CDK 툴킷은 Node Package Manager와 함께 설치됩니다. 대부분의 경우 전역으로 설치하는 것이 좋습니다.

npm install -g aws-cdk # install latest version npm install -g aws-cdk@X.YY.Z # install specific version
작은 정보

정기적으로 여러 버전의 툴킷을 사용하는 경우 개별 CDK 프로젝트에 일치하는 버전의 AWS CDK 툴킷을 설치하는 것을 고려해 보십시오. AWS CDK이 작업을 수행하려면 -g 명령에서 생략하십시오. npm install 그런 다음 npx aws-cdk 를 사용하여 호출하십시오. 이렇게 하면 로컬 버전이 있으면 해당 버전이 실행되고, 없으면 글로벌 버전으로 대체됩니다.

툴킷 명령

모든 CDK Toolkit 명령은 로 cdk 시작하고 그 뒤에 하위 명령 (list, synthesizedeploy, 등) 이 옵니다. 일부 하위 명령에는 동일한 더 짧은 버전 (lssynth, 등) 이 있습니다. 옵션과 인수는 어떤 순서로든 하위 명령 뒤에 옵니다.

모든 하위 명령, 옵션 및 인수에 대한 설명은 을 참조하십시오. AWS CDK CLI 명령 참조

옵션 및 해당 값 지정하기

명령줄 옵션은 두 개의 하이픈 () -- 으로 시작합니다. 자주 사용되는 일부 옵션에는 단일 하이픈으로 시작하는 단일 문자 동의어가 있습니다 (예: 동의어가 있음). --app -a 툴킷 명령의 옵션 순서는 중요하지 않습니다. AWS CDK

모든 옵션은 값을 허용하며, 이 값은 옵션 이름 뒤에 와야 합니다. 값은 공백이나 등호로 이름과 구분할 수 있습니다. = 다음 두 옵션은 동일합니다.

--toolkit-stack-name MyBootstrapStack --toolkit-stack-name=MyBootstrapStack

일부 옵션은 플래그 (불리언) 입니다. true또는 값을 지정할 수 있습니다false. 값을 제공하지 않으면 값이 로 간주됩니다true. no-false암시하기 위해 옵션 이름 앞에 접두사를 붙일 수도 있습니다.

# sets staging flag to true --staging --staging=true --staging true # sets staging flag to false --no-staging --staging=false --staging false

, --context --parameters --plugin --tags--trust, 및 같은 몇 가지 옵션을 여러 번 지정하여 여러 값을 지정할 수 있습니다. 이러한 항목은 CDK 툴킷 [array] 도움말에 입력이 있는 것으로 기록되어 있습니다. 예:

cdk bootstrap --tags costCenter=0123 --tags responsibleParty=jdoe

내장된 도움말

AWS CDK 툴킷에는 통합 도움말이 있습니다. 다음을 실행하여 유틸리티에 대한 일반 도움말과 제공된 하위 명령 목록을 볼 수 있습니다.

cdk --help

예를 들어 deploy 특정 하위 명령에 대한 도움말을 보려면 플래그 앞에 해당 --help 하위 명령을 지정하십시오.

cdk deploy --help

AWS CDK 툴킷 버전을 표시하는 cdk version 데 문제가 있습니다. 지원을 요청할 때 이 정보를 제공하십시오.

버전 보고

AWS CDK 가 사용되는 방식을 파악하기 위해 AWS CDK 애플리케이션에서 사용하는 구조를 다음과 같이 AWS::CDK::Metadata 식별된 리소스를 사용하여 수집하고 보고합니다. 이 리소스는 AWS CloudFormation 템플릿에 추가되며 쉽게 검토할 수 있습니다. 알려진 보안 또는 안정성 문제가 있는 구조를 사용하여 스택을 식별하는 데에도 이 정보를 사용할 수 있습니다. AWS 또한 사용자에게 중요한 정보를 문의하는 데에도 사용할 수 있습니다.

참고

버전 1.93.0 이전에는 스택에서 사용된 구문 대신 합성 중에 로드된 모듈의 이름과 버전을 AWS CDK 보고했습니다.

기본적으로 는 스택에서 사용되는 다음 NPM 모듈의 구문 사용을 AWS CDK 보고합니다.

  • AWS CDK 코어 모듈

  • AWS 라이브러리 모듈 생성

  • AWS 솔루션 구성 모듈

  • AWS 렌더 팜 배포 키트 모듈

AWS::CDK::Metadata리소스는 다음과 같습니다.

CDKMetadata:
  Type: "AWS::CDK::Metadata"
  Properties:
    Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="

Analytics속성은 gzip으로 압축되고 base64로 인코딩되고 접두사로 인코딩된 스택의 구문 목록입니다.

버전 보고를 거부하려면 다음 방법 중 하나를 사용하십시오.

  • cdk명령을 --no-version-reporting 인수와 함께 사용하면 단일 명령을 옵트아웃할 수 있습니다.

    cdk --no-version-reporting synth

    AWS CDK 툴킷은 배포하기 전에 새 템플릿을 합성하므로 명령에도 --no-version-reporting 추가해야 한다는 점을 기억하십시오. cdk deploy

  • 또는 versionReporting 에서 false로 설정하십시오. ./cdk.json ~/.cdk.json 개별 명령을 --version-reporting 지정하여 옵트인하지 않으면 옵트아웃됩니다.

    { "app": "...", "versionReporting": false }

다음을 통한 인증 AWS

환경 및 사용 가능한 액세스에 따라 다양한 방법으로 AWS 리소스에 대한 프로그래밍 AWS 액세스를 구성할 수 있습니다.

인증 방법을 선택하고 CDK 툴킷에 맞게 구성하려면 AWS SDK 및 도구 참조 안내서의 인증 및 액세스를 참조하십시오.

고용주로부터 인증 방법을 제공하지 않고 현지에서 개발하는 신규 사용자에게 권장되는 접근 방식은 설정하는 것입니다. AWS IAM Identity Center이 방법에는 간편한 구성을 AWS CLI 위한 설치와 AWS 액세스 포털에 정기적으로 로그인하기 위한 설치가 포함됩니다. 이 방법을 선택하는 경우AWS SDK 및 도구 참조 안내서IAM Identity Center authentication 절차를 완료한 후 환경에 다음 요소가 포함되어야 합니다.

  • 는 AWS CLI애플리케이션을 실행하기 전에 AWS 액세스 포털 세션을 시작하는 데 사용합니다.

  • 에서 참조할 수 있는 구성 값 집합이 포함된 [default] 프로필이 있는 공유 AWSconfig 파일입니다. AWS CDK이 파일의 위치를 찾으려면 AWS SDK 및 도구 참조 가이드에서 공유 파일의 위치를 참조하세요.

  • 공유 config 파일은 region 설정을 지정합니다. 이렇게 하면 툴킷이 AWS 리전 요청에 사용하는 기본 AWS CDK 및 CDK가 설정됩니다. AWS

  • CDK 툴킷은 요청을 보내기 전에 프로필의 SSO 토큰 공급자 구성을 사용하여 자격 증명을 획득합니다. AWSsso_role_name값은 IAM Identity Center 권한 집합에 연결된 IAM 역할로, 애플리케이션에서 사용자에 대한 액세스를 허용해야 합니다. AWS 서비스

    다음 샘플 config 파일은 SSO 토큰 공급자 구성으로 설정된 기본 프로필을 보여줍니다. 프로필의 sso_session 설정은 이름이 지정된 sso-session section을 참조합니다. sso-session섹션에는 AWS 액세스 포털 세션을 시작하기 위한 설정이 포함되어 있습니다.

    [default] sso_session = my-sso sso_account_id = 111122223333 sso_role_name = SampleRole region = us-east-1 output = json [sso-session my-sso] sso_region = us-east-1 sso_start_url = https://provided-domain.awsapps.com/start sso_registration_scopes = sso:account:access

AWS 액세스 포털 세션 시작

AWS 서비스액세스하기 전에 CDK 툴킷이 IAM Identity Center 인증을 사용하여 자격 증명을 확인할 수 있는 활성 AWS 액세스 포털 세션이 필요합니다. 구성된 세션 길이에 따라 액세스는 결국 만료되며 CDK 툴킷에서 인증 오류가 발생합니다. 에서 다음 명령을 AWS CLI 실행하여 액세스 포털에 로그인합니다. AWS

aws sso login

SSO 토큰 공급자 구성에서 기본 프로필 대신 명명된 프로필을 사용하는 경우 명령은 입니다aws sso login --profile NAME. 또한 --profile 옵션이나 AWS_PROFILE 환경 변수를 사용하여 cdk 명령을 실행할 때 이 프로필을 지정하십시오.

이미 활성 세션이 있는지 테스트하려면 다음 AWS CLI 명령을 실행합니다.

aws sts get-caller-identity

이 명령에 대한 응답은 공유 config 파일에 구성된 IAM Identity Center 계정 및 권한 집합을 보고해야 합니다.

참고

이미 활성 AWS 액세스 포털 세션을 실행하고 aws sso login 있는 경우에는 자격 증명을 제공할 필요가 없습니다.

로그인 과정에서 데이터에 AWS CLI 대한 접근을 허용하라는 메시지가 표시될 수 있습니다. AWS CLI 는 Python용 SDK를 기반으로 구축되었으므로 권한 메시지에는 다양한 botocore 이름이 포함될 수 있습니다.

지역 및 기타 구성 지정

CDK 툴킷은 배포하려는 AWS 지역과 인증 방법을 알아야 합니다. AWS이는 배포 작업과 합성 중에 컨텍스트 값을 검색하는 데 필요합니다. 계정과 지역이 함께 환경을 구성합니다.

지역은 환경 변수를 사용하거나 구성 파일에서 지정할 수 있습니다. 이는 및 다양한 AWS SDK와 같은 다른 AWS 도구에서 사용하는 것과 동일한 변수 AWS CLI 및 파일입니다. CDK 툴킷은 다음과 같은 순서로 이 정보를 찾습니다.

  • AWS_DEFAULT_REGION 환경 변수.

  • 표준 AWS config 파일에 정의되고 명령의 --profile 옵션을 사용하여 지정된 이름이 지정된 프로파일입니다. cdk

  • 표준 AWS config 파일의 [default] 섹션.

[default]섹션에서 AWS 인증 및 지역을 지정하는 것 외에도 하나 이상의 [profile NAME] 섹션을 추가할 수도 있습니다. 여기서 NAME은 프로필 이름입니다. 명명된 프로필에 대한 자세한 내용은 AWS SDK 및 도구 참조 안내서의 공유 구성 및 자격 증명 파일을 참조하십시오.

표준 AWS config 파일은 ~/.aws/config (맥OS/리눅스) 또는 %USERPROFILE%\.aws\config (윈도우) 에 있습니다. 자세한 내용 및 대체 위치는 AWS SDK 및 도구 참조 안내서의 공유 구성 및 자격 증명 파일 위치를 참조하십시오.

스택의 env 속성을 사용하여 AWS CDK 앱에 지정하는 환경은 합성 중에 사용됩니다. 환경별 AWS CloudFormation 템플릿을 생성하는 데 사용되며, 배포 중에는 위의 방법 중 하나로 지정된 계정 또는 지역을 재정의합니다. 자세한 정보는 환경을 참조하세요.

참고

는 를 비롯한 다른 AWS 도구 및 SDK와 동일한 소스 파일의 자격 증명을 AWS CDK 사용합니다. AWS Command Line Interface 하지만 이 도구들과는 약간 AWS CDK 다르게 동작할 수 있습니다. AWS SDK for JavaScript 언더-더-후드를 사용합니다. 의 자격 증명 설정에 대한 자세한 내용은 자격 증명 설정을 참조하십시오. AWS SDK for JavaScript

선택적으로 --role-arn (또는-r) 옵션을 사용하여 배포에 사용해야 하는 IAM 역할의 ARN을 지정할 수 있습니다. 사용 중인 AWS 계정이 이 역할을 맡을 수 있어야 합니다.

앱 명령 지정

CDK 툴킷의 많은 기능을 사용하려면 하나 이상의 AWS CloudFormation 템플릿을 합성해야 하며, 이를 위해서는 애플리케이션을 실행해야 합니다. 다양한 언어로 작성된 프로그램을 AWS CDK 지원합니다. 따라서 구성 옵션을 사용하여 앱을 실행하는 데 필요한 정확한 명령을 지정합니다. 이 옵션은 두 가지 방법으로 지정할 수 있습니다.

먼저, 가장 일반적으로 파일 내 app 키를 사용하여 지정할 수 cdk.json 있습니다. 이것은 AWS CDK 프로젝트의 메인 디렉터리에 있습니다. CDK 툴킷은 새 프로젝트를 만들 때 적절한 명령을 제공합니다. cdk init 예를 들어, 다음은 새 TypeScript 프로젝트에서 cdk.json 가져온 것입니다.

{ "app": "npx ts-node bin/hello-cdk.ts" }

CDK 툴킷은 앱을 실행하려고 할 때 현재 작업 디렉터리를 찾습니다cdk.json. 이 때문에 프로젝트의 메인 디렉터리에 CDK 툴킷 명령을 실행하기 위한 셸을 열어 둘 수 있습니다.

또한 CDK 툴킷은 앱 키를 찾을 ~/.cdk.json 수 없는 경우 홈 디렉터리에서 앱 키를 찾습니다. ./cdk.json 보통 같은 언어의 CDK 코드를 사용하는 경우 여기에 app 명령을 추가하면 유용할 수 있습니다.

다른 디렉터리에 있거나 에 있는 명령이 아닌 다른 명령을 사용하여 앱을 실행하려면 --app (또는-a) 옵션을 사용하여 지정하십시오. cdk.json

cdk --app "npx ts-node bin/hello-cdk.ts" ls

배포할 때 합성된 클라우드 어셈블리가 포함된 디렉터리를 값 (예:) 으로 cdk.out 지정할 수도 있습니다. --app 지정된 스택은 이 디렉터리에서 배포되며 앱은 합성되지 않습니다.

스택 지정

많은 CDK 툴킷 명령 (예:cdk deploy) 은 앱에 정의된 스택에서 작동합니다. 앱에 스택이 하나뿐인 경우 스택을 명시적으로 지정하지 않으면 CDK 툴킷은 스택을 의미하는 것으로 간주합니다.

그렇지 않으면 작업할 스택을 하나 또는 여러 개 지정해야 합니다. 명령줄에서 ID별로 원하는 스택을 개별적으로 지정하여 이 작업을 수행할 수 있습니다. 스택을 인스턴스화할 때 ID는 두 번째 인수로 지정된 값이라는 점을 기억하십시오.

cdk synth PipelineStack LambdaStack

와일드카드를 사용하여 패턴과 일치하는 ID를 지정할 수도 있습니다.

  • ?모든 단일 문자와 일치합니다.

  • *원하는 수의 문자와 일치합니다 (*단독으로 모든 스택과 일치함).

  • **계층 구조의 모든 항목과 일치합니다.

--all옵션을 사용하여 모든 스택을 지정할 수도 있습니다.

앱에서 CDK Pipelines를 사용하는 경우 CDK 툴킷은 스택과 스테이지를 계층 구조로 이해합니다. 또한 --all 옵션과 와일드카드는 최상위 스택에만 일치합니다*. 모든 스택을 일치시키려면 를 사용하십시오. ** 또한 특정 계층 아래의 모든 스택을 나타내는 ** 데 사용합니다.

와일드카드를 사용할 때는 패턴을 따옴표로 묶거나 를 사용하여 와일드카드를 이스케이프하세요. \ 그렇지 않으면 셸에서 패턴을 현재 디렉터리의 파일 이름으로 확장하려고 할 수 있습니다. 기껏해야 이렇게 하면 예상한 대로 되지 않을 것입니다. 최악의 경우 의도하지 않은 스택을 배포할 수도 있습니다. 와일드카드를 확장하지 cmd.exe 않기 때문에 Windows에서 반드시 필요한 것은 아니지만 그래도 좋은 방법입니다.

cdk synth "*Stack" # PipelineStack, LambdaStack, etc. cdk synth 'Stack?' # StackA, StackB, Stack1, etc. cdk synth \* # All stacks in the app, or all top-level stacks in a CDK Pipelines app cdk synth '**' # All stacks in a CDK Pipelines app cdk synth 'PipelineStack/Prod/**' # All stacks in Prod stage in a CDK Pipelines app
참고

스택을 지정하는 순서가 반드시 스택이 처리되는 순서와 같을 필요는 없습니다. AWS CDK 툴킷은 스택 처리 순서를 결정할 때 스택 간의 종속성을 고려합니다. 예를 들어 한 스택이 다른 스택에서 생성된 값 (예: 두 번째 스택에 정의된 리소스의 ARN) 을 사용한다고 가정해 보겠습니다. 이 경우 이러한 종속성 때문에 두 번째 스택이 첫 번째 스택보다 먼저 합성됩니다. 스택의 메서드를 사용하여 스택 간에 종속성을 수동으로 추가할 수 있습니다. addDependency()

환경 부트스트래핑 AWS

CDK로 스택을 배포하려면 특별한 전용 AWS CDK 리소스를 프로비저닝해야 합니다. cdk bootstrap명령을 실행하면 필요한 리소스가 자동으로 생성됩니다. 이러한 전용 리소스가 필요한 스택을 배포하는 경우에만 부트스트랩하면 됩니다. 세부 정보는 부트스트래핑를 참조하세요.

cdk bootstrap

여기에 표시된 것처럼 인수 없이 cdk bootstrap 실행하면 명령이 현재 앱을 합성하고 해당 스택이 배포될 환경을 부트스트랩합니다. 앱에 환경을 명시적으로 지정하지 않는 환경에 구애받지 않는 스택이 포함된 경우 기본 계정 및 지역이 부트스트랩되거나 를 사용하여 지정된 환경이 부트스트랩됩니다. --profile

앱 외부에서는 부트스트랩할 환경을 명시적으로 지정해야 합니다. 앱 또는 로컬 프로필에 지정되지 않은 환경을 부트스트랩하기 위해 그렇게 할 수도 있습니다. AWS 지정된 계정 및 지역에 대한 자격 증명을 구성 (예: 에서~/.aws/credentials) 해야 합니다. 필수 자격 증명이 포함된 프로필을 지정할 수 있습니다.

cdk bootstrap ACCOUNT-NUMBER/REGION # e.g. cdk bootstrap 1111111111/us-east-1 cdk bootstrap --profile test 1111111111/us-east-1
중요

이러한 스택을 배포하는 각 환경 (계정/지역 조합) 은 별도로 부트스트랩해야 합니다.

부트스트랩된 리소스에 AWS CDK 저장하는 AWS 항목에 대해 요금이 부과될 수 있습니다. 또한 를 사용하면 -bootstrap-customer-key AWS KMS 키가 생성되며, 이 경우에도 환경별로 요금이 부과됩니다.

참고

이전 버전의 부트스트랩 템플릿에서는 기본적으로 KMS 키를 생성했습니다. 요금이 부과되지 않도록 하려면 를 사용하여 다시 부트스트랩하세요. --no-bootstrap-customer-key

참고

CDK Toolkit v2는 CDK v1에서 기본적으로 사용되는 레거시 템플릿이라고 하는 원본 부트스트랩 템플릿을 지원하지 않습니다.

중요

최신 부트스트랩 템플릿은 에서 암시하는 권한을 목록에 있는 모든 계정에 효과적으로 부여합니다. --cloudformation-execution-policies AWS --trust 기본적으로 이렇게 하면 부트스트랩된 계정의 모든 리소스에 대한 읽기 및 쓰기 권한이 확장됩니다. 마음에 드는 정책 및 신뢰할 수 있는 계정으로 부트스트래핑 스택을 구성해야 합니다.

새 앱 만들기

새 앱을 만들려면 해당 앱을 위한 디렉터리를 만든 다음 디렉터리 내에서 명령을 cdk init 실행하십시오.

mkdir my-cdk-app cd my-cdk-app cdk init TEMPLATE --language LANGUAGE

지원되는 언어 (LANGUAGE) 는 다음과 같습니다.

코드

언어

typescript

TypeScript

javascript

JavaScript

python

Python

java

Java

csharp

C#

템플릿은 선택적 템플릿입니다. 원하는 템플릿이 기본값인 app인 경우 생략할 수 있습니다. 사용 가능한 템플릿은 다음과 같습니다.

템플릿

설명

app(기본값)

빈 AWS CDK 앱을 만듭니다.

sample-app

Amazon SQS 대기열과 Amazon SNS 주제를 포함하는 스택으로 AWS CDK 앱을 생성합니다.

템플릿은 프로젝트 폴더 이름을 사용하여 새 앱 내의 파일 및 클래스 이름을 생성합니다.

리스팅 스택

AWS CDK 애플리케이션에 있는 스택의 ID 목록을 보려면 다음과 같은 해당 명령 중 하나를 입력하십시오.

cdk list cdk ls

애플리케이션에 CDK Pipelines 스택이 포함된 경우 CDK 툴킷은 파이프라인 계층 구조에서의 위치에 따라 스택 이름을 경로로 표시합니다. (예:, PipelineStack 및.) PipelineStack/Prod PipelineStack/Prod/MyService

앱에 많은 스택이 포함된 경우 나열할 스택의 전체 또는 부분 스택 ID를 지정할 수 있습니다. 자세한 정보는 스택 지정을 참조하세요.

--long플래그를 추가하면 스택 이름과 해당 환경 (AWS 계정 및 지역) 을 비롯한 스택에 대한 자세한 정보를 볼 수 있습니다.

스택 합성

cdk synthesize명령 (거의 항상 축약됨synth) 은 앱에 정의된 스택을 템플릿으로 합성합니다. CloudFormation

cdk synth # if app contains only one stack cdk synth MyStack cdk synth Stack1 Stack2 cdk synth "*" # all stacks in app
참고

CDK 툴킷은 실제로 앱을 실행하고 대부분의 작업 (예: 스택 배포 또는 비교) 에 앞서 새 템플릿을 합성합니다. 이러한 템플릿은 기본적으로 디렉터리에 저장됩니다. cdk.outcdk synth 명령은 하나 이상의 지정된 스택에 대해 생성된 템플릿을 간단히 인쇄합니다.

사용 가능한 모든 옵션은 cdk synth --help 을 참조하십시오. 가장 자주 사용되는 몇 가지 옵션은 다음 섹션에서 다룹니다.

컨텍스트 값 지정

--contextor -c 옵션을 사용하여 런타임 컨텍스트 값을 CDK 앱에 전달할 수 있습니다.

# specify a single context value cdk synth --context key=value MyStack # specify multiple context values (any number) cdk synth --context key1=value1 --context key2=value2 MyStack

여러 스택을 배포할 때는 일반적으로 지정된 컨텍스트 값이 모든 스택에 전달됩니다. 원하는 경우 컨텍스트 값 앞에 스택 이름을 접두어로 붙여 각 스택에 다른 값을 지정할 수 있습니다.

# different context values for each stack cdk synth --context Stack1:key=value Stack2:key=value Stack1 Stack2

표시 형식 지정

기본적으로 합성된 템플릿은 YAML 형식으로 표시됩니다. 대신 --json 플래그를 추가하여 JSON 형식으로 표시하세요.

cdk synth --json MyStack

출력 디렉터리 지정

합성된 템플릿을 이외의 cdk.out 디렉토리에 기록하려면 --output (-o) 옵션을 추가합니다.

cdk synth --output=~/templates

스택 배포

cdk deploy하위 명령은 하나 이상의 지정된 스택을 계정에 배포합니다. AWS

cdk deploy # if app contains only one stack cdk deploy MyStack cdk deploy Stack1 Stack2 cdk deploy "*" # all stacks in app
참고

CDK 툴킷은 앱을 실행하고 배포하기 전에 새로운 템플릿을 합성합니다. AWS CloudFormation 따라서 함께 사용할 수 있는 대부분의 명령줄 옵션 cdk synth (예:--context) 은 에서도 사용할 수 있습니다. cdk deploy

사용 가능한 모든 옵션은 cdk deploy --help 을 참조하십시오. 가장 유용한 몇 가지 옵션은 다음 섹션에서 다룹니다.

합성 건너뛰기

일반적으로 이 cdk deploy 명령어는 배포에 최신 버전의 앱이 반영되도록 배포하기 전에 앱 스택을 합성합니다. 마지막 코드 이후로 코드를 변경하지 않은 경우 배포 시 중복 합성 cdk synth 단계를 생략할 수 있습니다. 이렇게 하려면 옵션에 프로젝트 cdk.out 디렉터리를 지정하세요. --app

cdk deploy --app cdk.out StackOne StackTwo

롤백 비활성화

AWS CloudFormation 배포가 원자적으로 이루어지도록 변경 사항을 롤백하는 기능이 있습니다. 즉, 전체적으로 성공하거나 실패할 수 있습니다. 는 AWS CDK 템플릿을 합성하고 배포하기 때문에 이 기능을 상속합니다. AWS CloudFormation

롤백은 리소스가 항상 일관된 상태를 유지하도록 하며, 이는 프로덕션 스택에 매우 중요합니다. 하지만 인프라를 개발하는 동안에는 일부 장애가 불가피하며, 실패한 배포를 롤백하면 속도가 느려질 수 있습니다.

이러한 이유로 CDK 툴킷을 사용하면 명령에 명령을 추가하여 롤백을 비활성화할 수 있습니다. --no-rollback cdk deploy 이 플래그를 사용하면 실패한 배포는 롤백되지 않습니다. 대신 장애가 발생한 리소스가 발생하기 전에 배포된 리소스는 그대로 유지되고 다음 배포는 실패한 리소스로 시작됩니다. 배포를 기다리는 시간이 훨씬 줄어들고 인프라 개발에 더 많은 시간을 할애할 수 있습니다.

핫 스와핑

AWS CloudFormation 변경 세트를 생성하여 cdk deploy 배포하는 대신 --hotswap 플래그와 함께 사용하면 AWS 리소스를 직접 업데이트해 볼 수 있습니다. 핫 스왑이 불가능한 경우 AWS CloudFormation 배포는 배포로 대체됩니다.

현재 핫 스와핑은 Lambda 함수, Step Functions 상태 머신, Amazon ECS 컨테이너 이미지를 지원합니다. --hotswap플래그는 또한 롤백을 비활성화합니다 (예: 암시). --no-rollback

중요

프로덕션 배포에는 핫 스왑을 사용하지 않는 것이 좋습니다.

감시 모드

CDK 툴킷의 감시 모드 (cdk deploy --watch또는 줄여서) 는 CDK 앱의 소스 파일 및 cdk watch 자산에 변경 사항이 있는지 지속적으로 모니터링합니다. 변경이 감지되면 지정된 스택을 즉시 배포합니다.

기본적으로 이러한 배포에는 Lambda 함수에 대한 변경 사항 배포를 신속하게 추적하는 --hotswap 플래그가 사용됩니다. 또한 인프라 구성을 변경한 AWS CloudFormation 경우 배포로 대체됩니다. cdk watch항상 전체 AWS CloudFormation 배포를 수행하도록 하려면 플래그를 에 추가하십시오. --no-hotswap cdk watch

이미 배포를 수행하는 동안 cdk watch 변경한 모든 내용은 단일 배포로 통합되며, 진행 중인 배포가 완료되는 즉시 배포가 시작됩니다.

감시 모드에서는 프로젝트의 "watch" 키를 사용하여 cdk.json 모니터링할 파일을 결정합니다. 기본적으로 이러한 파일은 애플리케이션 파일 및 에셋이지만 "watch" 키의 "include""exclude" 항목을 수정하여 변경할 수 있습니다. 다음 cdk.json 파일은 이러한 항목의 예를 보여줍니다.

{ "app": "mvn -e -q compile exec:java", "watch": { "include": "src/main/**", "exclude": "target/*" } }

cdk watch합성 전에 의 "build" 명령을 cdk.json 실행하여 앱을 빌드합니다. 배포에 Lambda 코드 (또는 CDK 앱에 없는 다른 코드) 를 빌드하거나 패키징하기 위한 명령이 필요한 경우 여기에 추가하십시오.

및 키에는 Git 스타일 와일드카드 (***) 를 모두 사용할 수 있습니다. "watch" "build" 각 경로는 의 상위 디렉토리를 기준으로 해석됩니다. cdk.json 기본값은 include 이며**/*, 프로젝트 루트 디렉터리의 모든 파일 및 디렉터리를 의미합니다. exclude선택사항입니다.

중요

프로덕션 배포에는 감시 모드를 사용하지 않는 것이 좋습니다.

파라미터 지정 AWS CloudFormation

AWS CDK 툴킷은 배포 시 AWS CloudFormation 매개변수 지정을 지원합니다. --parameters플래그 다음에 명령줄에서 이러한 정보를 제공할 수 있습니다.

cdk deploy MyStack --parameters uploadBucketName=UploadBucket

매개변수를 여러 개 정의하려면 여러 개의 --parameters 플래그를 사용하십시오.

cdk deploy MyStack --parameters uploadBucketName=UpBucket --parameters downloadBucketName=DownBucket

여러 스택을 배포하는 경우 각 스택에 대해 각 매개 변수의 값을 다르게 지정할 수 있습니다. 이렇게 하려면 매개변수 이름 앞에 스택 이름과 콜론을 붙입니다. 그렇지 않으면 모든 스택에 동일한 값이 전달됩니다.

cdk deploy MyStack YourStack --parameters MyStack:uploadBucketName=UploadBucket --parameters YourStack:uploadBucketName=UpBucket

기본적으로 는 이전 배포의 매개 변수 값을 AWS CDK 보존하고 명시적으로 지정하지 않은 경우 이후 배포에서 사용합니다. --no-previous-parameters플래그를 사용하여 모든 파라미터를 지정하도록 요구할 수 있습니다.

출력 파일 지정

스택에서 AWS CloudFormation 출력을 선언하는 경우 일반적으로 배포 종료 시 화면에 표시됩니다. JSON 형식으로 파일에 기록하려면 플래그를 사용하십시오. --outputs-file

cdk deploy --outputs-file outputs.json MyStack

보안 관련 변경사항

보안 상태에 영향을 미치는 의도하지 않은 변경을 방지하기 위해 AWS CDK 툴킷은 보안 관련 변경을 배포하기 전에 승인하라는 메시지를 표시합니다. 승인이 필요한 변경 수준을 지정할 수 있습니다.

cdk deploy --require-approval LEVEL

LEVEL은 다음 중 하나일 수 있습니다.

용어

의미

never

승인은 절대 필요하지 않습니다.

any-change

모든 IAM 또는 security-group-related 변경 사항에 대한 승인이 필요합니다.

broadening(기본값)

IAM 명령문 또는 트래픽 규칙 추가 시 승인이 필요합니다. 제거에는 승인이 필요하지 않습니다.

파일에서 설정을 구성할 수도 있습니다. cdk.json

{ "app": "...", "requireApproval": "never" }

스택 비교

cdk diff 명령어는 앱에 정의된 스택의 현재 버전 (및 종속성) 을 이미 배포된 버전 또는 저장된 AWS CloudFormation 템플릿과 비교하고 변경 사항 목록을 표시합니다.

Stack HelloCdkStack
IAM Statement Changes
┌───┬──────────────────────────────┬────────┬──────────────────────────────┬──────────────────────────────┬───────────┐
│   │ Resource                     │ Effect │ Action                       │ Principal                    │ Condition │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${Custom::S3AutoDeleteObject │ Allow  │ sts:AssumeRole               │ Service:lambda.amazonaws.com │           │
│   │ sCustomResourceProvider/Role │        │                              │                              │           │
│   │ .Arn}                        │        │                              │                              │           │
├───┼──────────────────────────────┼────────┼──────────────────────────────┼──────────────────────────────┼───────────┤
│ + │ ${MyFirstBucket.Arn}         │ Allow  │ s3:DeleteObject*             │ AWS:${Custom::S3AutoDeleteOb │           │
│   │ ${MyFirstBucket.Arn}/*       │        │ s3:GetBucket*                │ jectsCustomResourceProvider/ │           │
│   │                              │        │ s3:GetObject*                │ Role.Arn}                    │           │
│   │                              │        │ s3:List*                     │                              │           │
└───┴──────────────────────────────┴────────┴──────────────────────────────┴──────────────────────────────┴───────────┘
IAM Policy Changes
┌───┬────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────┐
│   │ Resource                                               │ Managed Policy ARN                                     │
├───┼────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────┤
│ + │ ${Custom::S3AutoDeleteObjectsCustomResourceProvider/Ro │ {"Fn::Sub":"arn:${AWS::Partition}:iam::aws:policy/serv │
│   │ le}                                                    │ ice-role/AWSLambdaBasicExecutionRole"}                 │
└───┴────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────┘
(NOTE: There may be security-related changes not in this list. See https://github.com/aws/aws-cdk/issues/1299)

Parameters
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3Bucket AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3BucketBF7A7F3F: {"Type":"String","Description":"S3 bucket for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/S3VersionKey AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392S3VersionKeyFAF93626: {"Type":"String","Description":"S3 key for asset version \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}
[+] Parameter AssetParameters/4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392/ArtifactHash AssetParameters4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392ArtifactHashE56CD69A: {"Type":"String","Description":"Artifact hash for asset \"4cd61014b71160e8c66fe167e43710d5ba068b80b134e9bd84508cf9238b2392\""}

Resources
[+] AWS::S3::BucketPolicy MyFirstBucket/Policy MyFirstBucketPolicy3243DEFD
[+] Custom::S3AutoDeleteObjects MyFirstBucket/AutoDeleteObjectsCustomResource MyFirstBucketAutoDeleteObjectsCustomResourceC52FCF6E
[+] AWS::IAM::Role Custom::S3AutoDeleteObjectsCustomResourceProvider/Role CustomS3AutoDeleteObjectsCustomResourceProviderRole3B1BD092
[+] AWS::Lambda::Function Custom::S3AutoDeleteObjectsCustomResourceProvider/Handler CustomS3AutoDeleteObjectsCustomResourceProviderHandler9D90184F
[~] AWS::S3::Bucket MyFirstBucket MyFirstBucketB8884501
 ├─ [~] DeletionPolicy
 │   ├─ [-] Retain
 │   └─ [+] Delete
 └─ [~] UpdateReplacePolicy
     ├─ [-] Retain
     └─ [+] Delete

앱 스택을 기존 배포와 비교하려면:

cdk diff MyStack

앱 스택을 저장된 CloudFormation 템플릿과 비교하려면:

cdk diff --template ~/stacks/MyStack.old MyStack

기존 리소스를 스택으로 가져오기

cdk import명령어를 사용하여 특정 AWS CDK 스택의 CloudFormation 리소스를 관리할 수 있습니다. 이는 스택으로 AWS CDK마이그레이션하거나 스택 간에 리소스를 이동하거나 해당 논리적 ID를 변경할 때 유용합니다. cdk import CloudFormation 리소스 가져오기를 사용합니다. 여기에서 가져올 수 있는 리소스 목록을 참조하십시오.

기존 리소스를 AWS CDK 스택으로 가져오려면 다음 단계를 따르세요.

  • 현재 다른 CloudFormation 스택에서 리소스를 관리하고 있지 않은지 확인하세요. 그렇다면 먼저 리소스가 현재 속해 있는 RemovalPolicy.RETAIN 스택에 제거 정책을 설정하고 배포를 수행하십시오. 그런 다음 스택에서 리소스를 제거하고 다른 배포를 수행합니다. 이 프로세스를 통해 리소스가 더 이상 관리되지 않고 CloudFormation 삭제되지는 않습니다.

  • cdk diffa를 실행하여 리소스를 가져오려는 AWS CDK 스택에 보류 중인 변경 사항이 없는지 확인합니다. “가져오기” 작업에서 허용되는 유일한 변경 사항은 가져오려는 새 리소스를 추가하는 것입니다.

  • 스택으로 가져오려는 리소스의 구문을 추가합니다. 예를 들어 Amazon S3 버킷을 가져오려면 다음과 같은 것을 추가하십시오new s3.Bucket(this, 'ImportedS3Bucket', {});. 다른 리소스는 수정하지 마십시오.

    또한 리소스가 현재 정의에 가지고 있는 상태를 정확히 모델링해야 합니다. 버킷의 예로는 AWS KMS 키, 라이프 사이클 정책 및 기타 버킷과 관련된 모든 것을 포함해야 합니다. 그렇지 않으면 후속 업데이트 작업이 예상대로 작동하지 않을 수 있습니다.

    물리적 버킷 이름을 포함할지 여부를 선택할 수 있습니다. 일반적으로 리소스를 여러 번 배포하기 쉽도록 AWS CDK 리소스 정의에 리소스 이름을 포함하지 않는 것이 좋습니다.

  • cdk import STACKNAME를 실행합니다.

  • 리소스 이름이 모델에 없는 경우 CLI는 가져오려는 리소스의 실제 이름을 전달하라는 메시지를 표시합니다. 그런 다음 가져오기가 시작됩니다.

  • 성공 cdk import 보고가 되면 이제 리소스는 AWS CDK 및 에 의해 관리됩니다 CloudFormation. 이후에 AWS CDK 앱의 리소스 속성에 대한 모든 변경 사항 (구성 구성) 은 다음 배포 시 적용됩니다.

  • AWS CDK 앱의 리소스 정의가 리소스의 현재 상태와 일치하는지 확인하기 위해 CloudFormation 드리프트 감지 작업을 시작할 수 있습니다.

이 기능은 현재 리소스를 중첩된 스택으로 가져오는 것을 지원하지 않습니다.

구성 () cdk.json

많은 CDK Toolkit 명령줄 플래그의 기본값은 프로젝트 cdk.json 파일이나 사용자 디렉토리의 파일에 저장할 수 있습니다. .cdk.json 다음은 지원되는 구성 설정을 알파벳순으로 참조한 것입니다.

참고 CDK 툴킷 옵션
app CDK 애플리케이션을 실행하는 명령입니다. --app
assetMetadata false경우 CDK는 자산을 사용하는 리소스에 메타데이터를 추가하지 않습니다. --no-asset-metadata
bootstrapKmsKeyId Amazon S3 배포 버킷을 암호화하는 데 사용된 AWS KMS 키의 ID를 재정의합니다. --bootstrap-kms-key-id
build 합성 전에 CDK 애플리케이션을 컴파일하거나 빌드하는 명령입니다. 사용할 수 없습니다. ~/.cdk.json --build
browser cdk docs하위 명령의 웹 브라우저를 시작하기 위한 명령입니다. --browser
context 런타임 컨텍스트를 참조하세요. 구성 파일의 컨텍스트 값은 지워지지 않습니다. cdk context --clear (CDK 툴킷은 캐시된 컨텍스트 값을 안에 배치합니다.) cdk.context.json --context
debug 그렇다면 true CDK 툴킷은 디버깅에 유용한 더 자세한 정보를 내보냅니다. --debug
language 새 프로젝트를 초기화하는 데 사용되는 언어입니다. --language
lookups false인 경우 컨텍스트 조회가 허용되지 않습니다. 컨텍스트 조회를 수행해야 하는 경우 합성이 실패합니다. --no-lookups
notices falseIf, 는 보안 취약성, 회귀 및 지원되지 않는 버전에 대한 메시지 표시를 억제합니다. --no-notices
output 합성된 클라우드 어셈블리를 내보낼 디렉터리의 이름 (기본값). "cdk.out" --output
outputsFile 배포된 스택의 AWS CloudFormation 출력이 기록되는 파일 (JSON 형식). --outputs-file
pathMetadata CDK 경로 메타데이터가 합성된 템플릿에 추가되지 않는 경우 false --no-path-metadata
plugin CDK를 확장하는 패키지의 패키지 이름 또는 로컬 경로를 지정하는 JSON 배열 --plugin
profile 지역 및 계정 자격 증명을 지정하는 데 사용되는 기본 AWS 프로필의 이름. --profile
progress "events" 설정하면 CDK 툴킷은 배포 중에 진행률 표시줄 대신 모든 AWS CloudFormation 이벤트를 표시합니다. --progress
requireApproval 보안 변경에 대한 기본 승인 수준. 보안 관련 변경사항 섹션 참조 --require-approval
rollback false 경우 배포가 실패하면 롤백되지 않습니다. --no-rollback
staging 에셋이 출력 디렉터리에 복사되지 않는 경우 false (소스 파일의 로컬 디버깅에 사용). AWS SAM --no-staging
tags 스택용 태그 (키-값 쌍) 를 포함하는 JSON 객체입니다. --tags
toolkitBucketName Lambda 함수 및 컨테이너 이미지와 같은 자산을 배포하는 데 사용되는 Amazon S3 버킷의 이름 (참조). 환경 부트스트래핑 AWS --toolkit-bucket-name
toolkitStackName 부트스트랩 스택의 이름 (참조). 환경 부트스트래핑 AWS --toolkit-stack-name
versionReporting If false 는 버전 보고를 옵트아웃합니다. --no-version-reporting
watch 변경 시 프로젝트 재빌드를 트리거해야 하는 파일과 트리거하지 말아야 하는 파일을 나타내는 "exclude" 키가 포함된 "include" JSON 객체입니다. 감시 모드 섹션을 참조하세요. --watch