v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원을 종료했습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS CDK CLI 참조
AWS Cloud Development Kit (AWS CDK) 명령줄 인터페이스(AWS CDK CLI), 라고도 합니다. CDK Toolkit는 AWS CDK 앱과 상호 작용하기 위한 기본 도구입니다. 앱을 실행하고, 정의한 애플리케이션 모델을 조사하고,에서 생성된 AWS CloudFormation 템플릿을 생성하고 배포합니다 AWS CDK. 또한 AWS CDK 프로젝트를 생성하고 작업하는 데 유용한 다른 기능도 제공합니다. 이 주제에는의 일반적인 사용 사례에 대한 정보가 포함되어 있습니다. CDK CLI.
CDK은 CLI 는 노드 패키지 관리자와 함께 설치됩니다. 대부분의 경우 전역에 설치하는 것이 좋습니다.
npm install -g aws-cdk # install latest version npm install -g aws-cdk@X.YY.Z # install specific version
작은 정보
여러 버전의를 정기적으로 사용하는 경우 일치하는 버전의를 설치하는 것이 AWS CDK좋습니다. CDK CLI 개별 CDK 프로젝트에서. 이렇게 하려면 npm install
명령에서 -g
를 생략합니다. 그런 다음 npx aws-cdk
를 사용하여 간접적으로 호출합니다. 이렇게 하면 로컬 버전이 있는 경우 로컬 버전이 실행되고, 그렇지 않은 경우 글로벌 버전으로 돌아갑니다.
CDK CLI 명령
모든 CDK CLI 명령은 로 시작되며cdk
, 그 뒤에 하위 명령(list
, synthesize
deploy
, 등)이 표시됩니다. 일부 하위 명령에는 동일한 기능을 하는 더 짧은 버전(ls
, synth
등)이 있습니다. 옵션과 인수는 어떤 순서로든 하위 명령을 따릅니다.
모든 하위 명령, 옵션 및 인수에 대한 설명은 AWS CDK CLI 명령 참조 섹션을 확인하세요.
옵션 및 해당 값 지정
명령줄 옵션은 2개의 하이픈(--
)으로 시작합니다. 자주 사용되는 일부 옵션에는 하이픈 하나로 시작하는 단일 문자 동의어가 있습니다. 예를 들어, --app
에는 동의어 -a
가 있습니다. 의 옵션 순서 CDK CLI 명령은 중요하지 않습니다.
모든 옵션은 옵션 이름을 따라야 하는 값을 수락합니다. 값과 이름은 공백이나 등호(=
)로 구분할 수 있습니다. 다음 두 가지 옵션은 동일합니다.
--toolkit-stack-name MyBootstrapStack --toolkit-stack-name=MyBootstrapStack
일부 옵션은 플래그(부울)입니다. true
또는 false
를 값으로 지정할 수 있습니다. 값을 제공하지 않으면 해당 값은 true
로 간주됩니다. false
를 의미하려면 옵션 이름 앞에 no-
를 접두사로 사용할 수도 있습니다.
# 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
등의 몇 가지 옵션을 두 번 이상 지정하여 여러 값을 지정할 수 있습니다. 이는에 [array]
유형이 있는 것으로 표시됩니다. CDK CLI 도움말. 예시:
cdk bootstrap --tags costCenter=0123 --tags responsibleParty=jdoe
기본 제공 도움말
CDK은 CLI 에는 통합 도움말이 있습니다. 다음을 발급하여 유틸리티에 대한 일반적인 도움말과 제공된 하위 명령 목록을 볼 수 있습니다.
cdk --help
예를 들어 --help
와 같은 특정 하위 명령에 대한 도움말을 보려면 deploy
플래그 앞에 지정합니다.
cdk deploy --help
버전 cdk version
표시 문제 CDK CLI. 지원을 요청할 때이 정보를 제공합니다.
버전 보고
AWS CDK 가 사용되는 방식에 대한 통찰력을 얻기 위해 AWS CDK 애플리케이션에서 사용하는 구문은 로 식별된 리소스를 사용하여 수집 및 보고됩니다AWS::CDK::Metadata
. 이 리소스는 AWS CloudFormation 템플릿에 추가되며 쉽게 검토할 수 있습니다. 또한이 정보는에서 보안 또는 안정성 문제가 알려진 구문을 사용하여 스택을 식별하는 AWS 데 사용할 수 있습니다. 또한 중요한 정보를 사용자에게 알리는 데에도 사용할 수 있습니다.
참고
버전 1.93.0 이전에는 스택에 사용된 구문 대신 합성 중에 로드된 모듈의 이름과 버전을 AWS CDK 보고했습니다.
기본적으로는 스택에서 사용되는 다음 NPM 모듈의 구문 사용을 AWS CDK 보고합니다.
-
AWS CDK 코어 모듈
-
AWS Construct 라이브러리 모듈
-
AWS 솔루션 구성 모듈
-
AWS Render Farm 배포 키트 모듈
AWS::CDK::Metadata
리소스는 다음과 같습니다.
CDKMetadata: Type: "AWS::CDK::Metadata" Properties: Analytics: "v2:deflate64:H4sIAND9SGAAAzXKSw5AMBAA0L1b2PdzBYnEAdio3RglglY60zQi7u6TWL/XKmNUlxeQSOKwaPTBqrNhwEWU3hGHiCzK0dWWfAxoL/Fd8mvk+QkS/0X6BdjnCdgmOOQKWz+AqqLDt2Y3YMnLYWwAAAA="
Analytics
속성은 스택에 있는 구문의 gzip으로 압축되고, base64로 인코딩되고, 접두사로 인코딩된 목록입니다.
버전 보고 옵트아웃
를 사용하여 버전 보고를 옵트아웃할 수 있습니다. CDK CLI 또는 프로젝트의 cdk.json
파일을 구성하여 할 수 있습니다.
를 사용하여 버전 보고를 옵트아웃하려면 CDK CLI
-
에서
--no-version-reporting
옵션 사용 CDK CLI 단일 명령을 옵트아웃하는 명령입니다. 다음은 템플릿 합성 중 옵트아웃하는 예입니다.$
cdk synth --no-version-reporting
는를 실행할 때 템플릿을 자동으로 AWS CDK 합성하므로
cdk deploy
명령과--no-version-reporting
함께 도 사용해야cdk deploy
합니다.
cdk.json
파일을 구성하여 버전 보고를 옵트아웃하려면 다음을 수행하세요.
-
./cdk.json
또는~/.cdk.json
에서versionReporting
을false
로 설정합니다. 이렇게 하면 기본적으로 옵트아웃됩니다. 다음은 예제입니다.{ "app": "...", "versionReporting": false }
구성한 후에는 개별 명령에
--version-reporting
을 지정하여 이 동작을 재정의하고 옵트인할 수 있습니다.
참고
버전 보고를 옵트아웃하면 AWS CDK 는 사용 중인 구문에 대한 데이터를 수집하거나 보고하지 않습니다. 따라서 AWS CDK 는 보안 문제의 영향을 받았는지 여부를 식별할 수 없으며 이에 대한 알림을 보내지 않습니다.
를 사용한 인증 AWS
사용 가능한 환경과 액세스에 따라 AWS 리소스에 대한 프로그래밍 방식 AWS 액세스를 구성할 수 있는 다양한 방법이 있습니다.
인증 방법을 선택하고에 맞게 구성하려면 CDK CLI, 단원을 참조하십시오AWS CDKCLI에 대한 보안 자격 증명 구성.
고용주의 인증 방법이 제공되지 않은 로컬에서 개발하는 신규 사용자에게 권장되는 접근 방식은를 설정하는 것입니다 AWS IAM Identity Center. 이 방법에는 구성이 용이하고 AWS 액세스 포털 AWS CLI 에 정기적으로 로그인하기 위한 설치가 포함됩니다. 이 방법을 선택하면 AWS SDKs 및 도구 참조 안내서의 IAM Identity Center 인증 절차를 완료한 후 환경에 다음 요소가 포함되어야 합니다.
-
애플리케이션을 실행하기 전에 AWS 액세스 포털 세션을 시작하는 데 AWS CLI사용하는 .
-
AWS CDK에서 참조할 수 있는 구성 값 세트가 포함된
[default]
프로파일이 있는 공유 AWSconfig
파일. 이 파일의 위치를 찾으려면 AWS SDKs 및 도구 참조 안내서의 공유 파일 위치를 참조하세요. -
공유
config
파일은region
설정을 지정합니다. 이렇게 하면 기본값인 AWS CDK 및 AWS 리전 가 설정됩니다. CDK CLI AWS 요청에를 사용합니다. -
CDK은 CLI 는 요청을 보내기 전에 프로필의 SSO 토큰 공급자 구성을 사용하여 자격 증명을 획득합니다 AWS. IAM Identity Center 권한 세트에 연결된 IAM 역할인
sso_role_name
값은 애플리케이션에 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-sessionmy-sso
] sso_region =us-east-1
sso_start_url =https://provided-domain.awsapps.com/start
sso_registration_scopes = sso:account:access
AWS 액세스 포털 세션 시작
에 액세스하려면 먼저에 대한 활성 AWS 액세스 포털 세션이 AWS 서비스필요합니다. CDK CLI 자격 증명을 확인하는 데 IAM Identity Center 인증을 사용합니다. 구성된 세션 길이에 따라 액세스가 결국 만료되고 CDK CLI 에 인증 오류가 발생합니다. 에서 다음 명령을 실행 AWS CLI 하여 AWS 액세스 포털에 로그인합니다.
aws sso login
SSO 토큰 공급자 구성이 기본 프로파일 대신 명명된 프로파일을 사용하는 경우 명령은 입니다aws sso login --profile
. 또한 --profile 옵션 또는 NAME
AWS_PROFILE
환경 변수를 사용하여 cdk 명령을 실행할 때 이 프로파일을 지정합니다.
이미 활성 세션이 있는지 테스트하려면 다음 AWS CLI 명령을 실행합니다.
aws sts get-caller-identity
이 명령에 대한 응답은 공유 config
파일에 구성된 IAM Identity Center 계정 및 권한 세트를 보고해야 합니다.
참고
이미 활성 AWS 액세스 포털 세션이 있고를 실행하는 경우 자격 증명을 제공할 필요가 aws sso login
없습니다.
로그인 프로세스에서 데이터에 대한 AWS CLI 액세스를 허용하라는 메시지가 표시될 수 있습니다. AWS CLI 는 PythonSDK용를 기반으로 구축되므로 권한 메시지에 botocore
이름의 변형이 포함될 수 있습니다.
리전 및 기타 구성 지정
CDK은 CLI 는 배포하려는 AWS 리전과 인증 방법을 알아야 합니다 AWS. 이는 배포 작업과 합성 중 컨텍스트 값을 검색하는 데 필요합니다. 계정과 리전이 함께 환경을 구성합니다.
환경 변수를 사용하여 리전을 지정하거나 구성 파일에서 리전을 지정할 수 있습니다. 이는 및 다양한와 같은 다른 AWS 도구에서 사용하는 것과 동일한 변수 AWS CLI 및 파일입니다 AWS SDKs. CDK은 CLI 는 다음 순서로이 정보를 찾습니다.
-
AWS_DEFAULT_REGION
환경 변수. -
표준 AWS
config
파일에 정의되고cdk
명령의--profile
옵션을 사용하여 지정된 명명된 프로파일입니다. -
표준 AWS
config
파일의[default]
섹션입니다.
[default]
섹션에서 AWS 인증 및 리전을 지정하는 것 외에도 하나 이상의 [profile
섹션을 추가할 수 있습니다. 여기서 NAME
]NAME
는 프로파일의 이름입니다. 명명된 프로파일에 대한 자세한 내용은 AWS SDKs 및 도구 참조 안내서의 공유 구성 및 자격 증명 파일을 참조하세요.
표준 AWS config
파일은 ~/.aws/config
(macOS/Linux) 또는 %USERPROFILE%\.aws\config
(Windows)에 있습니다. 자세한 내용과 대체 위치는 AWS SDKs 및 도구 참조 가이드의 공유 구성 및 보안 인증 파일의 위치를 참조하세요.
스택의 env
속성을 사용하여 AWS CDK 앱에서 지정하는 환경은 합성 중에 사용됩니다. 환경별 AWS CloudFormation 템플릿을 생성하는 데 사용되며 배포 중에 위의 방법 중 하나로 지정된 계정 또는 리전을 재정의합니다. 자세한 내용은 AWS CDK의 환경 단원을 참조하십시오.
참고
는를 SDKs포함하여 다른 AWS 도구 및와 동일한 소스 파일의 자격 증명을 AWS CDK 사용합니다AWS Command Line Interface. 그러나는 이러한 도구와 다소 다르게 작동할 AWS CDK 수 있습니다. 후드 AWS SDK for JavaScript 아래에를 사용합니다. 에 대한 자격 증명 설정에 대한 자세한 내용은 자격 증명 설정을 AWS SDK for JavaScript참조하세요.
선택적으로 --role-arn
(또는 -r
) 옵션을 사용하여 배포에 사용해야 하는 IAM 역할ARN의를 지정할 수 있습니다. 이 역할은 사용 중인 AWS 계정에서 가정할 수 있어야 합니다.
앱 명령 지정
의 다양한 기능 CDK CLI 에서는 하나 이상의 AWS CloudFormation 템플릿을 합성해야 하므로 애플리케이션을 실행해야 합니다. 는 다양한 언어로 작성된 프로그램을 AWS CDK 지원합니다. 따라서 구성 옵션을 사용하여 앱을 실행하는 데 필요한 정확한 명령을 지정합니다. 이 옵션은 두 가지 방법으로 지정할 수 있습니다.
첫째, 가장 일반적으로 cdk.json
파일 내에 app
키를 사용하여 지정할 수 있습니다. 프로젝트의 기본 디렉터리에 있습니다 AWS CDK . CDK은 CLI 는를 사용하여 새 프로젝트를 생성할 때 적절한 명령을 제공합니다cdk init
. 예를 들어 다음은 새 TypeScript 프로젝트의 cdk.json
입니다.
{ "app": "npx ts-node bin/hello-cdk.ts" }
CDK은 CLI 는 앱을 실행하려고 할 때 현재 작업 디렉터리cdk.json
에서를 찾습니다. 따라서 프로젝트의 기본 디렉터리에서 셸을 열어 두고 발급할 수 있습니다. CDK CLI 명령.
CDK은 CLI 는에서 찾을 수 없는 경우의 앱 키~/.cdk.json
(즉, 홈 디렉터리)도 찾습니다./cdk.json
. 여기에 앱 명령을 추가하면 일반적으로 동일한 언어로 CDK 코드를 사용하는 경우 유용할 수 있습니다.
다른 디렉터리에 있거나 cdk.json
에 있는 명령이 아닌 다른 명령을 사용하여 앱을 실행하려면 --app
또는 -a
옵션을 사용하여 지정합니다.
cdk --app "npx ts-node bin/hello-cdk.ts" ls
배포 시 --app 값으로 cdk.out
과 같은 합성된 클라우드 어셈블리가 있는 디렉터리를 지정할 수도 있습니다. 지정된 스택은 이 디렉터리에서 배포됩니다. 앱은 합성되지 않습니다.
스택 지정
다수 CDK CLI 명령(예: cdk deploy
)은 앱에 정의된 스택에서 작동합니다. 앱에 스택이 하나만 포함된 경우 CDK CLI 는 스택을 명시적으로 지정하지 않는 경우 해당 스택을 의미한다고 가정합니다.
다른 스택을 의미하려면 작업할 스택을 하나 이상 지정해야 합니다. 명령줄에서 ID로 원하는 스택을 개별적으로 지정하면 됩니다. ID는 스택을 인스턴스화할 때 두 번째 인수로 지정하는 값임을 기억하세요.
cdk synth PipelineStack LambdaStack
와일드카드를 사용하여 패턴과 IDs 일치하는를 지정할 수도 있습니다.
-
?
는 단일 문자와 일치합니다. -
*
는 임의의 수의 문자와 일치합니다(*
하나만도 모든 스택과 일치함). -
**
는 계층 구조의 모든 것과 일치합니다.
--all 옵션을 사용하여 모든 스택을 지정할 수도 있습니다.
앱이 CDK 파이프라인을 사용하는 경우 CDK CLI 는 스택과 단계를 계층 구조로 이해합니다. 또한 --all 옵션과 *
와일드카드는 최상위 스택과만 일치합니다. 모든 스택과 일치하려면 **
를 사용합니다. 또한 **
를 사용하여 특정 계층 구조 아래의 모든 스택을 표시합니다.
와일드카드를 사용하는 경우 패턴을 따옴표로 묶거나 \
로 와일드카드를 이스케이프합니다. 그렇지 않으면 쉘이 패턴을 현재 디렉터리의 파일 이름으로 확장하려고 할 수 있습니다. 최선은 예상대로 되지 않는 것이고, 최악은 의도치 않은 스택이 배포되는 것입니다. Windows에서는 cmd.exe
가 와일드카드를 확장하지 않기 때문에 꼭 필요한 것은 아니지만 그래도 좋은 방법입니다.
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
참고
스택을 지정하는 순서가 반드시 스택이 처리되는 순서는 아닙니다. CDK은 CLI 는 스택을 처리할 순서를 결정할 때 스택 간의 종속성을 설명합니다. 예를 들어 한 스택이 다른 스택에서 생성된 값(예: 두 번째 스택에 정의된 리소스ARN의 )을 사용한다고 가정해 보겠습니다. 이 경우 두 번째 스택은 이러한 종속성으로 인해 첫 번째 스택보다 먼저 합성됩니다. 스택의 addDependency()
메서드를 사용하여 스택 간에 수동으로 종속성을 추가할 수 있습니다.
AWS 환경 부트스트랩
를 사용하여 스택을 배포CDK하려면 특별한 전용 AWS CDK 리소스를 프로비저닝해야 합니다. cdk
bootstrap
명령은 사용자에게 필요한 리소스를 생성합니다. 이러한 전용 리소스가 필요한 스택을 배포하는 경우에만 부트스트랩이 필요합니다. 세부 정보는 AWS CDK 부트스트래핑를 참조하세요.
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 CLI v2는 vCDK1에서 기본적으로 사용되는 레거시 템플릿이라고 하는 원래 부트스트랩 템플릿을 지원하지 않습니다.
중요
최신 부트스트랩 템플릿은에서 내포한 권한을 --trust
목록의 --cloudformation-execution-policies
모든 AWS 계정에 효과적으로 부여합니다. 기본적으로 부트스트래핑된 계정의 모든 리소스에 대한 읽기 및 쓰기 권한이 확장됩니다. 익숙한 정책과 신뢰할 수 있는 계정으로 부트스트래핑 스택을 구성하세요.
새 앱 생성
새 앱을 생성하려면 해당 앱에 대한 디렉터리를 생성한 다음 디렉터리 내에서 cdk init
를 실행합니다.
mkdir my-cdk-app cd my-cdk-app cdk init
TEMPLATE
--languageLANGUAGE
지원되는 언어(LANGUAGE
)는 다음과 같습니다.
코드 |
언어 |
---|---|
|
TypeScript |
|
JavaScript |
|
Python |
|
Java |
|
C# |
TEMPLATE
는 선택적 템플릿입니다. 원하는 템플릿이 기본값인 app인 경우 생략할 수 있습니다. 사용 가능한 템플릿은 다음과 같습니다.
템플릿 |
설명 |
---|---|
|
빈 AWS CDK 앱을 생성합니다. |
|
Amazon SQS 대기열과 Amazon SNS 주제가 포함된 스택이 있는 AWS CDK 앱을 생성합니다. |
템플릿은 프로젝트 폴더의 이름을 사용하여 새 앱 내의 파일과 클래스 이름을 생성합니다.
스택 나열
AWS CDK 애플리케이션의 IDs 스택 목록을 보려면 다음 명령 중 하나를 입력합니다.
cdk list cdk ls
애플리케이션에 CDK 파이프라인 스택이 포함된 경우 CDK CLI 는 파이프라인 계층 구조의 위치에 따라 스택 이름을 경로로 표시합니다. PipelineStack
, PipelineStack/Prod
및 PipelineStack/Prod/MyService
).
앱에 스택이 많은 경우 나열할 스택IDs의 전체 또는 일부를 지정할 수 있습니다. 자세한 내용은 스택 지정 단원을 참조하십시오.
--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은 CLI 는 실제로 앱을 실행하고 대부분의 작업(예: 스택 배포 또는 비교 시) 전에 새 템플릿을 합성합니다. 이러한 템플릿은 기본적으로 cdk.out
디렉터리에 저장됩니다. cdk synth
명령은 단순히 하나 이상의 지정된 스택에 대해 생성된 템플릿을 출력합니다.
사용할 수 있는 모든 옵션은 cdk synth --help
섹션을 참조하세요. 가장 자주 사용되는 몇 가지 옵션은 다음 섹션에서 다룹니다.
컨텍스트 값 지정
--context
또는 -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은 CLI 는 앱을 실행하고 배포하기 전에 새 AWS CloudFormation 템플릿을 합성합니다. 따라서 cdk synth
와 함께 사용할 수 있는 대부분의 명령줄 옵션(예: --context
)은 cdk deploy
와도 함께 사용할 수 있습니다.
사용할 수 있는 모든 옵션은 cdk deploy --help
섹션을 참조하세요. 가장 유용한 몇 가지 옵션은 다음 섹션에서 다룹니다.
합성 건너뛰기
이 cdk deploy 명령은 일반적으로 배포 전에 앱 스택을 합성하여 배포에 최신 버전의 앱이 반영되도록 합니다. 마지막 cdk synth 이후 코드를 변경하지 않았다는 것을 알고 있다면 배포 시 중복된 합성 단계를 억제할 수 있습니다. --app 옵션에 프로젝트의 cdk.out
디렉터리를 지정하면 됩니다.
cdk deploy --app cdk.out StackOne StackTwo
롤백 비활성화
AWS CloudFormation 는 변경 사항을 롤백하여 배포가 원자적으로 이루어지도록 할 수 있습니다. 즉, 전체적으로 성공하거나 실패합니다. 는 AWS CloudFormation 템플릿을 합성하고 배포하기 때문에이 기능을 AWS CDK 상속합니다.
롤백은 리소스가 항상 일관된 상태를 유지하도록 하는데, 이는 프로덕션 스택에 매우 중요합니다. 그러나 인프라를 개발하는 동안 일부 장애는 불가피하며 실패한 배포를 롤백하면 속도가 느려질 수 있습니다.
이러한 이유로는 CDK CLI 를 사용하면 cdk deploy
명령에를 추가하여 롤백을 비활성화--no-rollback
할 수 있습니다. 이 플래그를 사용하면 실패한 배포가 롤백되지 않습니다. 대신 실패한 리소스 전에 배포된 리소스는 그대로 유지되고 다음 배포는 실패한 리소스로 시작됩니다. 배포를 기다리는 시간이 훨씬 줄어들고 인프라 개발에 더 많은 시간이 소요됩니다.
핫 스와핑
AWS CloudFormation 변경 세트를 생성하고 배포cdk deploy
하는 대신에서 --hotswap
플래그를 사용하여 AWS 리소스를 직접 업데이트하려고 시도합니다. 핫 스왑이 불가능한 경우 배포가 AWS CloudFormation 배포로 돌아갑니다.
현재 핫 스왑은 Lambda 함수, Step Functions 상태 시스템 및 Amazon ECS 컨테이너 이미지를 지원합니다. --hotswap
플래그는 롤백도 비활성화합니다(즉, --no-rollback
의미).
중요
프로덕션 배포에는 핫 스와핑이 권장되지 않습니다.
감시 모드
CDK은 CLI의 감시 모드( cdk deploy --watch또는 cdk watch 짧게)는 CDK 앱의 소스 파일 및 자산에 변경 사항이 있는지 지속적으로 모니터링합니다. 변경 사항이 탐지되면 지정된 스택의 배포를 즉시 수행합니다.
기본적으로 이러한 배포는 Lambda 함수에 대한 변경 사항의 배포를 빠르게 추적하는 --hotswap
플래그를 사용합니다. 인프라 구성을 변경한 AWS CloudFormation 경우에도를 통해 배포로 돌아갑니다. cdk watch
항상 전체 AWS CloudFormation 배포를 수행하려면 --no-hotswap
플래그를에 추가합니다cdk watch
.
cdk watch
가 이미 배포를 수행하는 동안 변경한 모든 내용은 진행 중인 배포가 완료되는 즉시 시작되는 단일 배포로 결합됩니다.
감시 모드는 프로젝트의 cdk.json
에 있는 "watch"
키를 사용하여 모니터링할 파일을 결정합니다. 기본적으로 이러한 파일은 애플리케이션 파일 및 자산이지만 "watch"
키의 "include"
및 "exclude"
항목을 수정하여 변경할 수 있습니다. 다음 cdk.json
파일은 이러한 항목의 예를 보여줍니다.
{ "app": "mvn -e -q compile exec:java", "watch": { "include": "src/main/**", "exclude": "target/*" } }
cdk watch
는 cdk.json
에서 "build"
명령을 실행하여 합성 전에 앱을 빌드합니다. 배포에 Lambda 코드(또는 CDK 앱에 없는 다른 코드)를 빌드하거나 패키징하는 명령이 필요한 경우 여기에 추가합니다.
Git 스타일의 와일드카드인 *
와 **
모두 "watch"
및 "build"
키에 사용할 수 있습니다. 각 경로는 cdk.json
의 부모 디렉터리를 기준으로 해석됩니다. include
의 기본값은 **/*
이며, 이는 프로젝트 루트 디렉터리에 있는 모든 파일과 디렉터리를 의미합니다. exclude
는 선택 사항입니다.
중요
프로덕션 배포에는 감시 모드가 권장되지 않습니다.
AWS CloudFormation 파라미터 지정
CDK은 CLI 는 배포 시 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
보안 관련 변경 사항 승인
보안 태세에 영향을 미치는 의도하지 않은 변경으로부터 사용자를 보호하려면 CDK CLI 는 보안 관련 변경 사항을 배포하기 전에 승인하라는 메시지를 표시합니다. 승인이 필요한 변경 수준을 지정할 수 있습니다.
cdk deploy --require-approval
LEVEL
LEVEL
의 값은 다음 중 하나일 수 있습니다.
용어 |
의미 |
---|---|
|
승인이 필요하지 않습니다. |
|
IAM 또는 security-group-related 변경 사항에 대한 승인이 필요합니다. |
|
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를 변경하는 경우에 유용합니다.는 CloudFormation 리소스 가져오기를 cdk import
사용합니다. 여기에서 가져올 수 있는 리소스 목록을 참조하세요.
기존 리소스를 AWS CDK 스택으로 가져오려면 다음 단계를 따릅니다.
-
리소스가 현재 다른 CloudFormation 스택에서 관리되고 있지 않은지 확인합니다. 그렇다면 먼저 리소스가 현재 있는 스택에서 제거 정책을
RemovalPolicy.RETAIN
으로 설정하고 배포를 수행합니다. 그런 다음 스택에서 리소스를 제거하고 다른 배포를 수행합니다. 이 프로세스는 리소스가 더 이상에서 관리되지 CloudFormation 않지만 삭제되지 않도록 합니다. -
를 실행
cdk diff
하여 리소스를 가져오려는 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 CLI 명령줄 플래그는 프로젝트의 cdk.json
파일 또는 사용자 디렉터리의 .cdk.json
파일에 저장할 수 있습니다. 다음은 지원되는 구성 설정에 대한 알파벳 참조입니다.
키 | 참고 | CDK CLI 옵션 |
---|---|---|
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 |
컨텍스트 값 및 AWS CDK을 참조하세요. 구성 파일의 컨텍스트 값은 cdk
context --clear로 지워지지 않습니다. ( CDK CLI 는 캐시된 컨텍스트 값을에 배치합니다cdk.context.json .) |
--context |
debug |
true 인 경우 CDK CLI 는 디버깅에 유용한 자세한 정보를 내보냅니다. |
--debug |
language |
새 프로젝트를 초기화하는 데 사용할 언어입니다. | --language |
lookups |
false 인 경우 컨텍스트 조회는 허용되지 않습니다. 컨텍스트 조회를 수행해야 하는 경우 합성이 실패합니다. |
--no-lookups |
notices |
false 인 경우 보안 취약성, 회귀 및 지원되지 않는 버전에 대한 메시지 표시를 억제합니다. |
--no-notices |
output |
합성된 클라우드 어셈블리를 내보낼 디렉터리의 이름입니다(기본값 "cdk.out" ). |
--output |
outputsFile |
배포된 스택의 AWS CloudFormation 출력이 기록될 파일입니다( JSON 형식). | --outputs-file |
pathMetadata |
인 경우 false CDK 경로 메타데이터가 합성된 템플릿에 추가되지 않습니다. |
--no-path-metadata |
plugin |
JSON를 확장하는 패키지 이름 또는 패키지의 로컬 경로를 지정하는 배열 CDK | --plugin |
profile |
리전 및 계정 자격 증명을 지정하는 데 사용되는 기본 AWS 프로필의 이름입니다. | --profile |
progress |
로 설정하면 "events" CDK CLI 는 진행률 표시줄이 아닌 배포 중 모든 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 |
false 인 경우 버전 보고를 옵트아웃합니다. |
--no-version-reporting |
watch |
JSON 변경 시 프로젝트의 재구축을 트리거해야 하는 파일(또는 트리거해서는 안 되는 파일)을 나타내는 "include" 및 "exclude" 키를 포함하는 객체입니다. 감시 모드을 참조하세요. |
--watch |