Amazon Web Services ブログ

Experimental construct librariesがAWS CDK v2で利用可能になりました

AWS CDK v2の実験的な(experimental)APIは、既存の安定した(stable)APIとは別のパッケージとして提供されるようになりました。

AWS Cloud Development Kit (AWS CDK)は、使い慣れたプログラミング言語を使ってクラウドアプリケーションのリソースをモデル化し、プロビジョニングするためのオープンソースのソフトウェア開発フレームワークです。AWS CDKを使用すると、インフラストラクチャをコードとして定義し、AWS CloudFormationを通じてプロビジョニングできます。AWS CDKは、クラウドリソースに対して実績のあるデフォルト値を設定したハイレベルなコンポーネントを提供しているため、専門家でなくてもクラウドアプリケーションを構築できます。また、組織の要件を組み込んだ独自のカスタムコンポーネントを構成して共有できるため、チームが新しいプロジェクトを迅速に開始するのに役立ちます。

2021年4月、私たちはAWS CDK v2の開発者プレビューを発表しました。 AWS CDK v1では、AWS Construct Libraryをサービスごとに多くの小さなパッケージに分割し、使いたいサービスのパッケージだけをダウンロードできるようにしていました。

この方法の欠点は、アプリケーションに新しいAWSサービスを追加しようとするたびに、ターミナルに戻って別のパッケージをnpm installまたはpip installしなければならないことでした。さらに、相互運用性の問題を避けるために、これらのパッケージがすべて同じバージョンであることが重要でした。

v1パッケージの体験に関するお客様のフィードバックに基づき、安定したAWSコンストラクトライブラリのすべてをaws-cdk-libという単一のパッケージに統合しました。このパッケージをインストールすることで、すべての安定したAWS CDKコンストラクトにアクセスでき、サードパーティのコンストラクトライブラリも同様にこのパッケージへの依存関係を満たすだけで済みます。

また、実験的なクラス、メソッド、プロパティの扱い方にも変更を加えました。v1では実験的でないコードはすべてセマンティックバージョニングに従っていましたが、実験的なAPIにおいては、APIを大幅に改善できると判断したときに破壊的な変更を行う可能性がありました。これは、APIを簡単に変更できるという利点がある一方で、モジュールに実験的なバナーが貼られているのに気づかず、お客様が変更に気づかないこともありました。既存のAWS CDKは、サポートするすべてのランタイム言語で動作する方法で、特定のモジュールを実験的なものとして明確に識別する方法を提供していません。v2では、セマンティックバージョニングを厳格に遵守し、マイナーバージョンのリリースでは、いかなるAPIにも破壊的変更を加えないようにしました。代わりに私たちは新しいライフサイクルを導入しました。新しい実験的なコンストラクトライブラリは、安定するまでの期間、メインのaws-cdk-libライブラリから完全に独立したライブラリとして管理されます。

CDK v2 Developer Preview リリースでは、実験的なモジュールのための高レベルコンストラクト (L2) が aws-cdk-lib から削除されましたが、まだ個別には利用できませんでした。現在、これらのモジュールは、例えば @aws-cdk/aws-amplify-alpha のように、-alpha修飾子を使ってプロダクション前の状態を明確に示すために、別のパッケージとして利用可能です。実験的なモジュールの全リストは,v2 API リファレンスに掲載されています。新しいモジュールが成熟し、いくつかの実世界のシナリオで試された後にのみ、我々はそれを安定したものとしてaws-cdk-libに含めます。つまり、aws-cdk-libのすべてのメソッド、クラス、プロパティは、次のメジャーバージョンのアップデートまで存在することが保証されており、コードに変更を加えることなく、いつでも新しいマイナーバージョンにアップデートできます。

アルファモジュールのライフサイクル

新しいサービス (またはコアモジュール) のためにL2コンストラクトが初めて作成されたときに、新しいアルファモジュールを作成します。アルファモジュールが安定した後は、aws-cdk-libに移され、AWS CDKのメジャーバージョン内での後方互換性が保証されます。AWS CloudFormation (L1) クラスは常に安定していると定義されているため、CloudFormationが利用可能になったその日から aws-cdk-lib に含まれます。例えばaws-cdk-libに含まれるaws-amplifyモジュールはCloudFormationが利用可能になったその日からL1クラスを含み、一方で独立してリリースされた@aws-cdk/aws-amplify-alphaモジュールは実験的なL2コンストラクトを含みます。

アルファモジュールは、aws-cdk-lib/名前空間の下にある安定したモジュールと明確に区別するために、@aws-cdk/名前空間の下に-alphaの修飾子を付けてリリースされていることがわかります。v2のAPIリファレンスには、これらの名前空間も含まれています。

実験的なL2コンストラクトライブラリが安定していると宣言されaws-cdk-libに移されると、以後アルファモジュールの新しいリリースはありません(例: @aws-cdk/aws-amplify-alpha)。以前のバージョンは保存されます。前述の例では、安定したコンストラクトはaws-cdk-lib/aws-amplifyモジュールに移されます。

アルファモジュールのインストール

アルファモジュールは、安定したモジュールと明確に区別するために、-alpha識別子で示されます。以下の例ではFooBarという仮想的なAWSサービス用に@aws-cdk/aws-foobar-alphaモジュールをインストールする手順を説明します。

TypeScript/JavaScript

npm install @aws-cdk/aws-foobar-alpha

Python

pip install aws-cdk.aws-foobar-alpha

Java

以下をpom.xml<dependencies>に追加します。

<dependency>
    <groupId>software.amazon.awscdk</groupId>
    <artifactId>foobar-alpha</artifactId>
    <version>${version}</version>
</dependency>

.NET

dotnet add package Amazon.CDK.AWS.FooBar.Alpha

Go

go get github.com/aws/aws-cdk-go/awscdkfoobaralpha/v2

アルファモジュールを使用する

以下の例では、FooBarサービスをコードにインポートする方法を示しています。比較のためにコアライブラリとS3ライブラリをインポートする例を一緒に示しています。

TypeScript/JavaScript

import { App, Stack } from 'aws-cdk-lib';
import { aws_s3 as s3 } from 'aws-cdk-lib';
import * as foobar_alpha from '@aws-cdk/aws-foobar-alpha';

Python

from aws_cdk import App, Stack
from aws_cdk import aws_s3 as s3
from aws_cdk import aws_foobar_alpha as foobar_alpha

Java

import software.amazon.awscdk.App;
import software.amazon.awscdk.Stack;
import software.amazon.awscdk.services.s3.Bucket;
import software.amazon.awscdk.services.foobar.alpha.FooBarConstruct;

.NET

using Amazon.CDK;
using Amazon.CDK.AWS.S3;
using Amazon.CDK.AWS.FooBar.Alpha;

Go

import (
  "github.com/aws/aws-cdk-go/awscdk"
  "github.com/aws/aws-cdk-go/awscdk/v2/awss3"
  "github.com/aws/aws-cdk-go/awscdkfoobaralpha/v2"
)

バージョニング

アルファモジュールはaws-cdk-libとは別にリリースされますが、そのバージョン管理はaws-cdk-libと対応しています。aws-cdk-libの各リリース(例:2.x.y)に対して、全てのアルファモジュールの最新バージョンもリリースされ、対応するアルファ修飾子が付けられます(例: 2.x.y-alpha.0)。

このブログ記事の原文が公開された2021年11月8日時点では、aws-cdk-libモジュールはまだ開発者プレビューです。そのためaws-cdk-libの各リリースバージョンには-rcプレリリースタグが付き(例: 2.0.0-rc.24)、それぞれのリリースされたアルファモジュールには-alphaプレリリースタグが付きます(例: 2.0.0-alpha.2)。aws-cdk-libが一般的利用(GA=Generally Availabe)できるようになると、そのプレリリースタグは削除され(例: 2.0.1)、アルファモジュールのバージョン表記は現在のリリースに合わせて更新されます(例: 2.0.1-alpha.1)。

約注:セマンティックバージョングにおける優先度では、2.0.0-alpha.2 < 2.0.0-rc.24 < 2.0.1-alpha.1 < 2.0.1 となります。詳しくはセマンティックバージョニングのページを参照してください。

一般的にはaws-cdk-libのバージョンと一致するアルファモジュールのバージョンを使用することで、互換性が確保されます。しかしアルファモジュールのバージョンよりも新しいaws-cdk-libのバージョンを使用することもでき、アルファモジュールからの新しい(壊れる可能性のある)変更も受けずに、aws-cdk-libから新機能を得ることができます。

知っておきたいこと

ここでは、いくつかの注意点をご紹介します。

  • それぞれのアルファモジュールは独立して公開され、バージョン管理されていますので、お客様のインフラに必要なアルファモジュールだけをインストールして使用できます。他のすべてのモジュール(aws-cdk-lib経由で利用可能)は、後方互換性のない方法で変更されない、安定したAPIを提供します。
  • AWS CDK v1の独立したモジュールとは異なり、v2アルファモジュールのバージョンは、互いにまたはメインのaws-cdk-libモジュールと正確に一致する必要はありません。互いに依存するアルファモジュール(aws-apigatewayv2aws-apigatewayv2-integrationsなど)は、並行してアップグレードする必要があります。
  • それぞれのアルファモジュールをアップグレードすることで、関連性のない他のアルファモジュールをアップグレードすることなく、新機能を受けることができます。
  • メインのv2の変更ログ(CHANGELOG.v2.md)には、安定版モジュールからの変更点のみが標準的な形式で含まれます。別のチェンジログ(CHANGELOG.v2.alpha.md)は、アルファモジュールへのすべての変更を追跡するために作成されます。
  • 各リリースのリリースノート (例: https://github.com/aws/aws-cdk/releases/tag/v2.0.0-rc.26) には、安定版モジュールとアルファ版モジュールの両方のノートをまとめて、明確に区別して記載します。

まとめ

今回のリリースでは、AWS CDK v2で実験的なモジュールを使用できるようになり、v1からの移行がより簡単になりました。 この移行を行うために検討したいくつかのオプションに関する私たちの考え方については、CDKv2 Experiments RFCで読むことができます。詳細については、開発者ガイドのMigrating to AWS CDK v2トピックとv2 APIリファレンスを参照してください。いつものように、私たちは aws-cdk GitHub リポジトリでのバグレポート、機能リクエスト、プルリクエストを歓迎します。

この記事は Experimental construct libraries are now available in AWS CDK v2 を翻訳したものです。翻訳はPrototype Engineerの工藤が担当しました。