AWS CDK 버전 관리 - AWS 클라우드 개발 키트(AWS CDK) v2

CDK AWS v2 개발자 안내서입니다. 이전 CDK v1은 2022년 6월 1일에 유지 관리에 들어갔으며 2023년 6월 1일에 지원이 종료되었습니다.

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

AWS CDK 버전 관리

이 주제에서는 AWS 클라우드 개발 키트(AWS CDK)가 버전 관리를 처리하는 방법에 대한 참조 정보를 제공합니다.

버전 번호는 major.minor.patch의 세 가지 숫자 버전 부분으로 구성되며, Construct Library 시맨틱 버전 관리 설명에 설명된 몇 가지 주의 사항과 함께 시맨틱 버전 관리 원칙을 광범위하게 따릅니다. AWS 즉, 안정적인 것으로 간주되는 APIs에 대한 주요 변경 사항은 주요 릴리스로 제한됩니다.

마이너 및 패치 릴리스는 이전 버전과 호환됩니다. 동일한 메이저 버전의 이전 버전에 작성된 코드는 동일한 메이저 버전 내의 최신 버전으로 업그레이드할 수 있습니다. 계속해서 빌드 및 실행되므로 기능적으로 동등한 결과를 얻을 수 있습니다. 일부 고급 사용 사례의 경우 다음 주제에 설명된 대로 코드를 약간 변경해야 합니다.

AWS CDK Toolkit 호환성

기본 AWS Construct Library(aws-cdk-lib)의 각 버전은 AWS Construct Library 릴리스 당시의 AWS CDK Toolkit CLI(aws-cdk-cli) 및 Toolkit Library(@aws-cdk/toolkit-lib) 버전과 호환됩니다. 또한 최신 버전의 AWS CDK Toolkit과도 호환됩니다. 각 버전의 AWS Construct Library는 라이브러리의 수명 종료 날짜까지이 호환성을 유지합니다. 따라서 지원되는 AWS Construct Library 버전을 사용하는 한 AWS CDK Toolkit 버전을 업그레이드하는 것이 항상 안전합니다.

AWS Construct Library의 각 버전은 AWS Construct Library 릴리스 당시 최신 버전보다 오래된 AWS CDK Toolkit 버전에서도 작동할 수 있습니다. 그러나 이는 보장되지 않습니다. 호환성은 AWS Construct Library의 클라우드 어셈블리 스키마 버전에 따라 다릅니다. AWS CDK는 합성 중에 클라우드 어셈블리를 생성하고 AWS CDK Toolkit은 이를 배포에 사용합니다. 클라우드 어셈블리의 형식을 정의하는 스키마는 엄격하게 지정되고 버전이 지정됩니다. 따라서 이전 버전의 AWS CDK Toolkit은 호환되려면 AWS Construct Library의 클라우드 어셈블리 스키마 버전을 지원해야 합니다.

AWS Construct Library에 필요한 클라우드 어셈블리 버전이 AWS CDK Toolkit에서 지원하는 버전과 호환되지 않는 경우 다음과 같은 오류 메시지가 표시됩니다.

Cloud assembly schema version mismatch: Maximum schema version supported is 3.0.0, but found 4.0.0. Please upgrade your CLI in order to interact with this app.

이 오류를 해결하려면 AWS CDK Toolkit을 필요한 클라우드 어셈블리 버전과 호환되는 버전 또는 사용 가능한 최신 버전으로 업데이트합니다. 대체(앱에서 사용하는 AWS Construct Library 모듈 다운그레이드)는 일반적으로 권장되지 않습니다.

참고

함께 작동하는 정확한 버전 조합에 대한 자세한 내용은 aws-cdk-cli GitHub 리포지토리호환성 표를 참조하세요.

AWS Construct Library 버전 관리

AWS Construct Library의 모듈은 개념에서 성숙한 API로 개발될 때 다양한 단계를 거칩니다. 단계마다 후속 버전의 AWS CDK에서 다양한 수준의 API 안정성을 제공합니다.

다음 주제에 설명된 주의 사항이 적용되는 시나리오를 제외하고 기본 AWS 구문 라이브러리(aws-cdk-lib)의 APIs는 안정적이며 라이브러리는 시맨틱 버전 관리 원칙을 광범위하게 따릅니다. 라이브러리에는 모든 AWS 서비스에 대한 AWS CloudFormation(L1) 구문이 포함되어 있습니다.이 구문은 CloudFormation 리소스 공급자 스키마에서 자동으로 생성되며 때로는 이전 버전과 호환되지 않는 업데이트가 포함될 수 있습니다. 또한 상위 수준(L2 및 L3) 구성과 App 및와 같은 핵심 CDK 클래스Stack가 모두 안정적입니다. APIs는 CDK의 다음 주요 릴리스까지이 패키지에서 제거되지 않습니다(사용되지 않을 수 있음). 안정적인 API에 대한 주요 변경이 필요한 경우 완전히 새로운 API가 추가됩니다.

aws-cdk-lib에 이미 통합된 서비스에 대해 개발 중인 새로운 API는 Beta<N> 접미사를 사용하여 식별됩니다. 여기서 N은 1에서 시작하여 새로운 API에 대한 각각의 중요한 변경 사항마다 증가합니다. Beta<N> API는 제거되지 않고 더 이상 사용되지 않으므로 기존 앱은 최신 버전의 aws-cdk-lib에서 계속 작동합니다. API가 안정적인 것으로 간주되면 Beta<N> 접미사가 없는 새 API가 추가됩니다.

이전에는 L1 API만 있었던 서비스에 대해 상위 수준(L2 또는 L3) APIs가 개발되기 시작하면 해당 APIs는 처음에 별도의 패키지로 배포됩니다. APIs AWS L1 이러한 패키지의 이름에는 ‘Alpha’ 접미사가 붙고, 해당 버전은 호환되는 aws-cdk-lib의 첫 번째 버전과 일치하며 alpha 하위 버전이 있습니다. 모듈이 의도한 사용 사례를 지원하면 해당 API가 aws-cdk-lib에 추가됩니다.

AWS Construct Library 의미 체계 버전 관리 설명

AWS Construct Library는 의미 체계 버전 관리 원칙을 광범위하게 따르지만 구현과 관련된 몇 가지 중요한 주의 사항이 있습니다. 일반적으로 AWS Construct Library는 API 소비자의 안정성을 유지하지만 프레임워크의 필요한 진화를 가능하게 하는 작성자를 구성하는 데 추가 부담이 되는 경우가 있습니다.

  • 변경 사항에 영향을 미치는 보안

    보안 기준을 충족하기 위해 이전 버전과 호환되지 않는 방식으로 APIs를 변경하거나 완전히 제거해야 할 수 있습니다. 이렇게 하면 영향을 받는 APIs 사용되지 않고 구현이 강제로 업데이트됩니다.

  • 기능은 의도에 따라 설명됩니다.

    예상치 못한 변경을 최소화하는 것을 목표로 하지만 구현 안정성보다 의도를 선호합니다. AWS Construct Library는 구문이 항상 정확히 동일한 CloudFormation 템플릿으로 합성되거나 정확히 동일한 리소스 세트를 사용하는 것을 보장하지 않습니다. 이는 특히 다양한 방식으로 동일한 목표를 달성할 수 있는 상위 수준 구문에 적용됩니다.

  • 인터페이스 및 추상 클래스 구현

    AWS Construct Library의 인터페이스 및 추상 클래스는 소비자에게는 안정적이지만 구현자에게는 안정적이지 않습니다. 즉,와 같은 인터페이스에 안전하게 의존s3.IBucket하여 인터페이스 또는 추상 클래스를 사용하기 시작한 시점(AWS Construct Library 버전)과 동일한 기능을 제공할 수 있습니다. 그러나 주기적으로 새(초록) 멤버가 인터페이스 및 추상 클래스에 추가됩니다. 이를 구현하는 모든 사용자에게는 아직 새 멤버를 구현하지 않으므로 업그레이드할 때 고려해야 할 추가 구현 부담이 발생합니다. 구현자의 인터페이스 및 추상 클래스에 대한 추가를 주요 변경 사항으로 엄격하게 처리하면 AWS Construct Library의 진행 가능성이 지나치게 제한됩니다. 대부분의 경우 구현자는와 같은 구체적인 클래스를 확장하는 것을 선호해야 합니다s3.Bucket.

  • 외부로 표시된 L1 구문, 생성된 코드 및 기타 APIs

    AWS Construct Library의 일부는 AWS 서비스에서 직접 오는 데이터 소스에서 생성됩니다. 이러한 APIs 현실에 맞게 유지하기 위해 생성된 코드에는 이전 버전과 호환되지 않는 변경 사항이 포함될 수 있습니다. 대부분의 경우 데이터 소스는 현실을 올바르게 반영하고 잘못된 표현을 수정하도록 업데이트됩니다. IDE의 IntelliSense는 @stability — external 주석과 함께 외부 APIs를 표시합니다.

  • 특정 언어 바인딩

    언어 바인딩에는 매우 제한된 수의 상황에서 이전 버전과 호환되지 않는 변경 사항이 포함될 수 있습니다. 이는 지원되는 다른 언어와 역호환되는 업스트림 유형 변경으로 인해 발생합니다. 이렇게 하면 라이브러리의 진행 가능성이 심각하게 제한되므로 이러한 유형을 변경할 수 있습니다.

    다음 목록은 알려진 모든 인스턴스를 설명합니다.

    • Golang - 입력된 조각에서 임의의 조각으로 변경: 단일 유형의 목록이 여러 유형의 목록(TypeScript의 통합 유형)으로 변경됩니다. 에서는 Go모든 ()의 조각으로 입력됩니다*[]any. Go의 입력 할당 규칙으로 인해에서 *[]string 로 변경하는 것은 자동 변환이 아닙니다. 따라서이 유형을 확장하려면 소비자 코드를 변경해야 합니다. 전략은 모든 조각 작업을 참조하세요.

언어 바인딩 안정성

시간이 지남에 따라 추가 프로그래밍 언어에 대한 지원을 AWS CDK에 추가할 수 있습니다. 모든 언어로 설명된 API는 동일하지만 API 표현 방식은 언어에 따라 다르며 언어 지원이 발전함에 따라 변경될 수 있습니다. 이러한 이유로 언어 바인딩은 프로덕션 준비가 된 것으로 간주될 때까지 한동안 실험적인 것으로 간주됩니다.

Language 안정성

TypeScript

안정적

JavaScript

안정적

Python

안정적

Java

안정적

C#/.NET

안정적

Go

안정적