v AWS CDK 2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.
기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
의 버전 2 AWS Cloud Development Kit (AWS CDK) 는 선호하는 프로그래밍 언어로 코드로 인프라를 더 쉽게 작성할 수 있도록 설계되었습니다. 이 주제에서는 AWS CDK v1과 v2 사이의 변경 사항을 설명합니다.
작은 정보
AWS CDK v1로 배포된 스택을 식별하려면 awscdk-v1-stack-finder
AWS CDK v1에서 CDK v2로의 주요 변경 사항은 다음과 같습니다.
-
AWS CDK v2는 코어 라이브러리를 포함하여 AWS Construct Library의 안정적인 부분을 단일 패키지인 로 통합합니다
aws-cdk-lib
. 개발자는 더 이상 사용하는 개별 AWS 서비스에 대한 추가 패키지를 설치할 필요가 없습니다. 또한 이 단일 패키지 접근 방식은 다양한 CDK 라이브러리 패키지의 버전을 동기화할 필요가 없음을 의미합니다.에서 사용할 수 있는 정확한 리소스를 나타내는 L1(CfnXXXX) 구문 AWS CloudFormation은 항상 안정적인 것으로 간주되므로에 포함됩니다
aws-cdk-lib
. -
새로운 L2 또는 L3 구문을 개발하기 위해 커뮤니티와 계속 협력하는 실험 모듈은
aws-cdk-lib
에 포함되지 않습니다. 대신 개별 패키지로 배포됩니다. 실험 패키지의 이름은alpha
접미사와 의미어 버전 번호로 지정됩니다. 의미 체계 버전 번호는 호환 가능한 AWS Construct Library의 첫 번째 버전과 접미사와도 일치alpha
합니다. 구문은 안정적으로 지정된 후aws-cdk-lib
로 이동하여 기본 Construct Library가 엄격한 의미 체계 버전 관리를 준수하도록 허용합니다.안정성은 서비스 수준에서 지정됩니다. 예를 들어, 이 글을 쓰는 시점에는 L1 구문만 있는 Amazon AppFlow에 대해 하나 이상의 L2 구문을 생성하기 시작하면 이러한 구문은 먼저
@aws-cdk/aws-appflow-alpha
라는 모듈에 나타납니다. 그런 다음 새로운 구문이 고객의 기본 요구 사항을 충족한다고 생각되면aws-cdk-lib
로 이동합니다.모듈이 안정적으로 지정되고
aws-cdk-lib
에 통합되면 다음 글머리 기호에 설명된 ‘BetaN’ 규칙을 사용하여 새 API가 추가됩니다.각 실험 모듈의 새 버전은 AWS CDK의 릴리스마다 릴리스됩니다. 그러나 대부분의 경우 동기화 상태를 유지할 필요는 없습니다. 원할 때마다
aws-cdk-lib
또는 실험 모듈을 업그레이드할 수 있습니다. 단, 2개 이상의 관련 실험 모듈이 서로 종속된 경우 동일한 버전이어야 합니다. -
새 기능이 추가되는 안정적인 모듈의 경우 새 API(전체 새 구문 또는 기존 구문의 새 메서드 또는 속성)는 작업이 진행되는 동안
Beta1
접미사를 받습니다. (변경을 해제해야 하는 경우Beta2
,Beta3
등이 뒤따릅니다.) API가 안정적으로 지정되면 접미사가 없는 API 버전이 추가됩니다. 그런 다음 최신(베타 또는 최종)을 제외한 모든 메서드가 더 이상 사용되지 않습니다.예를 들어 새 메서드
grantPower()
를 구문에 추가하면 처음에grantPowerBeta1()
로 표시됩니다. 중단 변경이 필요한 경우(예: 새로운 필수 파라미터 또는 속성) 메서드의 다음 버전은grantPowerBeta2()
로 지정됩니다. 작업이 완료되고 API가 완료되면 메서드grantPower()
(접미사 없음)가 추가되고 BetaN 메서드가 더 이상 사용되지 않습니다.모든 베타 API 다음 메이저 버전(3.0)이 릴리스될 때까지 construct 라이브러리에 남아 있으며 서명은 변경되지 않습니다. 사용 중단 경고를 사용하면 해당 경고가 표시되므로 최대한 빨리 API의 최종 버전으로 이동해야 합니다. 그러나 향후 AWS CDK 2.x 릴리스로 인해 애플리케이션이 중단되는 것은 없습니다.
-
Construct
클래스는 관련 유형과 함께에서 별도의 라이브러리 AWS CDK 로 추출되었습니다. 이는 구문 프로그래밍 모델을 다른 도메인에 적용하려는 노력을 지원하기 위한 것입니다. 자체 구문을 작성하거나 관련 API 사용하는 경우constructs
모듈을 종속 항목으로 선언하고 가져오기를 약간 변경해야 합니다. CDK 앱 수명 주기에 연결하는 등의 고급 기능을 사용하는 경우 더 많은 변경이 필요할 수 있습니다. 자세한 내용은 RFC를 참조하세요. -
AWS CDK v1.x 및 해당 Construct Library에서 더 이상 사용되지 않는 속성, 메서드 및 유형이 CDK v2 API에서 완전히 제거되었습니다. 지원되는 대부분 언어에서 이러한 API는 v1.x에서 경고를 생성하므로 이미 대체 API로 마이그레이션했을 수 있습니다. CDK v1.x에서 더 이상 사용되지 않는 API의 전체 목록
은 GitHub에서 확인할 수 있습니다. -
AWS CDK v1.x의 기능 플래그에 의해 게이트된 동작은 CDK v2에서 기본적으로 활성화됩니다. 이전 기능 플래그는 더 이상 필요하지 않으며 대부분의 경우 지원되지 않습니다. 매우 구체적인 상황에서 CDK v1 동작으로 되돌릴 수 있는 몇 가지 방법은 여전히 있습니다. 자세한 내용은 기능 플래그 업데이트 단원을 참조하십시오.
-
CDK v2를 사용하면 배포하는 환경을 최신 부트스트랩 스택을 사용하여 부트스트래핑해야 합니다. 레거시 부트스트랩 스택(v1의 기본값)은 더 이상 지원되지 않습니다. 또한 CDK v2에는 최신 스택의 새 버전이 필요합니다. 기존 환경을 업그레이드하려면 재부트스트래핑합니다. 더 이상 최신 부트스트랩 스택을 사용하기 위해 기능 플래그 또는 환경 변수를 설정할 필요가 없습니다.
중요
최신 부트스트랩 템플릿은에서 암시하는 권한을 --trust
목록의 --cloudformation-execution-policies
모든 AWS 계정에 효과적으로 부여합니다. 기본적으로 부트스트래핑된 계정의 모든 리소스에 대한 읽기 및 쓰기 권한이 확장됩니다. 편안한 정책 및 신뢰할 수 있는 계정으로 부트스트래핑 스택을 구성해야 합니다.
새로운 사전 요구 사항
AWS CDK v2에 대한 대부분의 요구 사항은 AWS CDK v1.x에 대한 요구 사항과 동일합니다. 추가 요구 사항은 여기에 나열되어 있습니다.
-
TypeScript 개발자의 경우 TypeScript 3.8 이상이 필요합니다.
-
CDK v2와 함께 사용하려면 새 버전의 CDK Toolkit가 필요합니다. 이제 CDK v2를 일반적으로 사용할 수 있으므로 CDK Toolkit를 설치할 때 v2가 기본 버전입니다. CDK v1 프로젝트와 역호환되므로 CDK v1 프로젝트를 생성하려는 경우가 아니면 이전 버전을 설치할 필요가 없습니다. 업그레이드하려면
npm install -g aws-cdk
를 실행합니다.
AWS CDK v2 개발자 미리 보기에서 업그레이드
CDK v2 개발자 미리 보기를 사용하는 경우 프로젝트에 AWS CDK와 같은의 릴리스 후보 버전에 대한 종속성이 있습니다2.0.0-rc1
. 이를 2.0.0
으로 업데이트한 다음 프로젝트에 설치된 모듈을 업데이트합니다.
npm install
또는 yarn install
종속성을 업데이트한 후 npm update -g aws-cdk
를 실행하여 CDK Toolkit를 릴리스 버전으로 업데이트합니다.
AWS CDK v1에서 CDK v2로 마이그레이션
앱을 AWS CDK v2로 마이그레이션하려면 먼저의 기능 플래그를 업데이트합니다cdk.json
. 그런 다음 작성된 프로그래밍 언어에 따라 필요에 따라 앱의 종속성과 가져오기를 업데이트합니다.
최신 v1로 업데이트
한 번에 이전 버전의 AWS CDK v1에서 가장 최신 버전의 v2로 업그레이드하는 많은 고객이 있습니다. 이렇게 하는 것이 확실히 가능하긴 하지만, 여러 해에 걸친 변경 사항(불행히도 현재 보유하고 있는 것과 동일한 양의 진화 테스트를 모두 수행한 것은 아닐 수 있음)으로 업그레이드하는 것은 물론 새 기본값과 다른 코드 조직을 사용하여 버전 간에 업그레이드하는 것도 가능합니다.
가장 안전한 업그레이드 환경을 제공하고 예기치 않은 변경의 원인을 보다 쉽게 진단하려면 먼저 최신 v1 버전으로 업그레이드한 다음 나중 v2로 전환하는 두 단계를 분리하는 것이 좋습니다.
기능 플래그 업데이트
다음 v1 기능 플래그가 있는 cdk.json
경우 AWS CDK v2에서 모두 기본적으로 활성화되므로에서 제거합니다. 인프라에 이전 효과가 중요한 경우 소스 코드를 변경해야 합니다. 자세한 내용은 GitHub의 플래그 목록
-
@aws-cdk/core:enableStackNameDuplicates
-
aws-cdk:enableDiffNoFail
-
@aws-cdk/aws-ecr-assets:dockerIgnoreSupport
-
@aws-cdk/aws-secretsmanager:parseOwnedSecretName
-
@aws-cdk/aws-kms:defaultKeyPolicies
-
@aws-cdk/aws-s3:grantWriteWithoutAcl
-
@aws-cdk/aws-efs:defaultEncryptionAtRest
특정 v1 동작으로 되돌리false
려면 몇 가지 AWS CDK v1 기능 플래그를 로 설정할 수 있습니다. 전체 참조는 GitHub의 v1 동작으로 되돌리기 또는 목록을 참조하세요.
두 플래그 유형 모두 cdk diff
명령을 사용하여 합성된 템플릿의 변경 사항을 검사하여 이러한 플래그의 변경 사항이 인프라에 영향을 미치는지 확인합니다.
CDK Toolkit 호환성
CDK v2에는 CDK Toolkit의 v2 이상이 필요합니다. 이 버전은 CDK v1 앱과 역호환됩니다. 따라서 v1을 사용하든 v2를 사용하든 모든 AWS CDK 프로젝트에서 단일 버전의 CDK Toolkit을 사용할 수 있습니다. 예외적으로 CDK Toolkit v2는 CDK v2 프로젝트만 생성합니다.
v1 및 v2 CDK 프로젝트를 모두 생성해야 하는 경우 전역적으로 CDK Toolkit v2를 설치하지 마세요. (이미 설치한 경우 제거: npm remove -g aws-cdk
.) CDK Toolkit를 간접적으로 호출하려면 npx를 사용하여 CDK Toolkit의 v1 또는 v2를 원하는 대로 실행합니다.
npx aws-cdk@1.x init app --language typescript npx aws-cdk@2.x init app --language typescript
작은 정보
종속성 및 가져오기 업데이트
앱의 종속성을 업데이트한 다음 새 패키지를 설치합니다. 마지막으로 코드의 가져오기를 업데이트합니다.
Applications
CDK 앱의 경우 다음과 같이 package.json
을 업데이트합니다. v1 스타일 개별 안정형 모듈의 종속성을 제거하고 애플리케이션에 필요한 aws-cdk-lib
의 최저 버전(여기서 2.0.0)을 설정합니다.
실험 구문은 이름이 alpha
로 끝나고 알파 버전 번호가 있는 별도의 독립 버전 패키지로 제공됩니다. 알파 버전 번호는 호환되는 aws-cdk-lib
의 첫 번째 릴리스에 해당합니다. 여기에서는 aws-codestar
를 v2.0.0-alpha.1로 고정했습니다.
{
"dependencies": {
"aws-cdk-lib": "^2.0.0",
"@aws-cdk/aws-codestar-alpha": "2.0.0-alpha.1",
"constructs": "^10.0.0"
}
}
Construct 라이브러리
Construct 라이브러리의 경우 애플리케이션에 필요한 aws-cdk-lib
의 최저 버전(여기서 2.0.0)을 설정하고 다음과 같이 package.json
을 업데이트합니다.
aws-cdk-lib
는 피어 종속성과 개발 종속성으로 모두 표시됩니다.
{
"peerDependencies": {
"aws-cdk-lib": "^2.0.0",
"constructs": "^10.0.0"
},
"devDependencies": {
"aws-cdk-lib": "^2.0.0",
"constructs": "^10.0.0",
"typescript": "~3.9.0"
}
}
참고
v2 호환 라이브러리를 릴리스할 때 라이브러리의 버전 번호에 메이저 버전 범프를 수행해야 합니다. 이는 라이브러리 소비자에게 중대한 변경 사항입니다. 단일 라이브러리로는 CDK v1과 v2를 모두 지원할 수 없습니다. 여전히 v1을 사용하는 고객을 계속 지원하려면 이전 릴리스를 병렬로 유지하거나 v2에 대한 새 패키지를 생성할 수 있습니다.
AWS CDK v1 고객을 계속 지원하려는 기간은 사용자에게 달려 있습니다. 2022년 6월 1일에 유지 관리에 들어갔고 2023년 6월 1일에 지원이 종료되는 CDK v1 자체의 수명 주기에서 단서를 얻을 수 있습니다. 자세한 내용은 AWS CDK
유지 관리 정책
라이브러리와 앱 모두
npm install
또는 yarn install
를 실행하여 새 종속성을 설치합니다.
가져오기를 변경하여 새 constructs
모듈에서 Construct
를 가져오고, aws-cdk-lib
의 최상위 수준에서 App
, Stack
등의 핵심 유형을 가져오고, aws-cdk-lib
아래의 네임스페이스에서 사용하는 서비스에 대한 안정적인 construct 라이브러리 모듈을 가져옵니다.
import { Construct } from 'constructs';
import { App, Stack } from 'aws-cdk-lib'; // core constructs
import { aws_s3 as s3 } from 'aws-cdk-lib'; // stable module
import * as codestar from '@aws-cdk/aws-codestar-alpha'; // experimental module
배포하기 전에 마이그레이션된 앱 테스트
스택을 배포하기 전에 cdk diff
를 사용하여 리소스에 예상치 못한 변경 사항이 있는지 확인합니다. 논리적 ID(리소스 교체 유발)는 변경되지 않습니다.
예상되는 변경 사항에는 다음이 포함되지만 이에 국한되지 않습니다.
-
CDKMetadata
리소스에 대한 변경 사항입니다. -
자산 해시가 업데이트되었습니다.
-
새 스타일 스택 합성과 관련된 변경 사항입니다. 앱이 v1에서 레거시 스택 신디사이저를 사용한 경우 적용됩니다.
-
CheckBootstrapVersion
규칙 추가.
예기치 않은 변경 사항은 일반적으로 AWS CDK v2로 자체 업그레이드로 인해 발생하지 않습니다. 일반적으로 이는 이전에 기능 플래그에 의해 변경된 더 이상 사용되지 않는 동작의 결과입니다. 이는 약 1.85.x 이전의 CDK 버전에서 업그레이드하는 증상입니다. 동일한 변경 사항이 최신 v1.x 릴리스로 업그레이드됩니다. 일반적으로 다음을 수행하여 이를 해결할 수 있습니다.
-
앱을 최신 v1.x 릴리스로 업그레이드
-
기능 플래그 제거
-
필요에 따라 코드 수정
-
배포
-
v2로 업그레이드
참고
2스테이지 업그레이드 후 업그레이드된 앱을 배포할 수 없는 경우 문제를 보고합니다
앱에 스택을 배포할 준비가 되면 먼저 복사본을 배포하여 테스트하는 것이 좋습니다. 이렇게 하는 가장 쉬운 방법은 다른 리전에 배포하는 것입니다. 그러나 스택의 ID 변경할 수도 있습니다. 테스트 후 cdk destroy를 사용하여 테스트 사본을 삭제해야 합니다.
문제 해결
가져오기의 TypeScript 'from' expected
또는 ';' expected
오류
TypeScript 3.8 이상으로 업그레이드합니다.
‘cdk bootstrap‘ 실행
다음과 같은 오류가 표시되는 경우
❌ MyStack failed: Error: MyStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html) at CloudFormationDeployments.validateBootstrapStackVersion (.../aws-cdk/lib/api/cloudformation-deployments.ts:323:13) at processTicksAndRejections (internal/process/task_queues.js:97:5) MyStack: SSM parameter /cdk-bootstrap/hnb659fds/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)
AWS CDK v2에는 업데이트된 부트스트랩 스택이 필요하며, 또한 모든 v2 배포에는 부트스트랩 리소스가 필요합니다. (v1을 사용하면 부트스트래핑 없이 간단한 스택을 배포할 수 있습니다.) 자세한 내용은 AWS CDK 부트스트래핑 섹션을 참조하세요.
v1 스택 찾기
CDK 애플리케이션을 v1에서 v2로 마이그레이션할 때 v1을 사용하여 생성된 배포된 AWS CloudFormation 스택을 식별할 수 있습니다. 이렇게 하려면 다음 명령을 실행하세요.
npx awscdk-v1-stack-finder
사용 세부 정보는 awscdk-v1-stack-finder README