Java AWS CDK での の操作 - AWS Cloud Development Kit (AWS CDK) v2

これは AWS CDK v2 デベロッパーガイドです。古い CDKv1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Java AWS CDK での の操作

Java は で完全にサポートされているクライアント言語であり AWS CDK 、安定していると見なされます。JDK (Oracle の や Amazon Corretto などの OpenJDK ディストリビューション) や Apache Maven などの使い慣れたツールを使用して、Java で AWS CDK アプリケーションを開発できます。

は Java 8 以降 AWS CDK をサポートしています。ただし、最新バージョンを使用することをお勧めします。これは、言語の最新バージョンには、 AWS CDK アプリケーションの開発に特に便利な改善点が含まれているためです。例えば、Java 9 は Map.of()メソッド ( でオブジェクトリテラルとして書き込まれるハッシュマップを宣言する便利な方法 TypeScript) を導入します。Java 10 では、 varキーワードを使用したローカル型推論が導入されています。

注記

このデベロッパーガイドのほとんどのコード例は、Java 8 で動作します。いくつかの例では を使用していますMap.of()。これらの例には、Java 9 が必要であることを示すコメントが含まれています。

任意のテキストエディタ、または Maven プロジェクトを読みIDE取ることができる Java を使用して、 AWS CDK アプリケーションを操作できます。このガイドでは Eclipse のヒントを提供していますが、IntelliJ IDEAなどIDEsは Maven プロジェクトをインポートでき NetBeans、Java での AWS CDK アプリケーションの開発に使用できます。

Java 以外の JVMホスト言語 (Kotlin、Groovy、Clojure、Scala など) で AWS CDK アプリケーションを記述することは可能ですが、エクスペリエンスは特に珍しいものではなく、これらの言語をサポートすることはできません。

Java の開始方法

を使用するには AWS CDK、 AWS アカウントと認証情報が必要で、Node.js AWS CDK と Toolkit がインストールされている必要があります。「の開始方法 AWS CDK」を参照してください。

Java AWS CDK アプリケーションには Java 8 (v1.8) 以降が必要です。Amazon Corretto をお勧めしますが、任意の Open JDKディストリビューションまたは Oracle の JDKを使用できます。Apache Maven 3.5 以降も必要です。Gradle などのツールを使用することもできますが、 AWS CDK Toolkit によって生成されるアプリケーションスケルトンは Maven プロジェクトです。

注記

サードパーティー言語の非推奨: 言語バージョンは、ベンダーまたはコミュニティによって共有される EOL (サポート終了) までのみサポートされ、事前通知により変更される可能性があります。

「プロジェクトの作成」

空のディレクトリcdk initで を呼び出して、新しい AWS CDK プロジェクトを作成します。--language オプションを使用して を指定しますjava

mkdir my-project cd my-project cdk init app --language java

cdk init は、プロジェクトフォルダの名前を使用して、クラス、サブフォルダ、ファイルなど、プロジェクトのさまざまな要素に名前を付けます。フォルダ名のハイフンはアンダースコアに変換されます。ただし、名前は Java 識別子の形式に従う必要があります。例えば、数字で始まる、またはスペースを含むべきではありません。

結果のプロジェクトには、software.amazon.awscdkMaven パッケージへの参照が含まれています。これとその依存関係は Maven によって自動的にインストールされます。

を使用している場合はIDE、プロジェクトを開くかインポートできるようになりました。例えば、Eclipse で、ファイル > インポート > Maven > 既存の Maven プロジェクト を選択します。プロジェクト設定が Java 8 (1.8) を使用するように設定されていることを確認します。

AWS 構築ライブラリモジュールの管理

Maven を使用して、グループ AWS にあるコンストラクトライブラリパッケージをインストールしますsoftware.amazon.awscdk。ほとんどのコンストラクトはアーティファクト にありaws-cdk-lib、デフォルトで新しい Java プロジェクトに追加されます。上位レベルのCDKサポートがまだ開発中のサービスのモジュールは、サービス名を短くしたバージョン ( AWS または Amazon プレフィックスなし) で名前が付けられた個別の「実験」パッケージにあります。Maven Central Repository を検索して、すべての AWS CDK および AWS コンストラクトモジュールライブラリの名前を検索します。

注記

CDK API リファレンスの Java エディションには、パッケージ名も表示されます。

一部の サービス AWS の構築ライブラリのサポートは、複数の名前空間にあります。例えば、Amazon Route 53 には、、software.amazon.awscdk.route53route53-patternsroute53resolverに分割された機能がありますroute53-targets

メイン AWS CDK パッケージは Java コードに としてインポートされますsoftware.amazon.awscdk。コンストラクトライブラリ内のさまざまなサービスのモジュールは、Maven AWS パッケージ名と同様に の下にライブsoftware.amazon.awscdk.servicesし、名前が付けられます。例えば、Amazon S3 モジュールの名前空間は ですsoftware.amazon.awscdk.services.s3

各 Java ソースファイルで使用する AWS コンストラクトライブラリクラスごとに個別の Java importステートメントを作成し、ワイルドカードインポートを避けることをお勧めします。import ステートメントなしで、型の完全な修飾名 (名前空間を含む) をいつでも使用できます。

アプリケーションが実験的なパッケージに依存している場合は、プロジェクトの を編集pom.xmlし、<dependencies>コンテナに新しい <dependency> 要素を追加します。例えば、次の<dependency>要素は CodeStar 実験的なコンストラクトライブラリモジュールを指定します。

<dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>codestar-alpha</artifactId> <version>2.0.0-alpha.10</version> </dependency>
ヒント

Java を使用する場合IDE、Maven の依存関係を管理する機能がある可能性があります。ただし、 IDEの機能が手動で行った機能と一致することが確実でない限り、pom.xml直接編集することをお勧めします。

での依存関係の管理 Java

Java では、依存関係は で指定pom.xmlされ、Maven を使用してインストールされます。<dependencies> コンテナには、各パッケージの <dependency>要素が含まれます。以下は、一般的な Java アプリpom.xmlの CDK のセクションです。

<dependencies> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>aws-cdk-lib</artifactId> <version>2.14.0</version> </dependency> <dependency> <groupId>software.amazon.awscdk</groupId> <artifactId>appsync-alpha</artifactId> <version>2.10.0-alpha.0</version> </dependency> </dependencies>
ヒント

多くの Java IDEsには Maven サポートとビジュアルpom.xmlエディタが統合されており、依存関係の管理に便利な場合があります。

Maven は依存関係ロックをサポートしていません。でバージョン範囲を指定することは可能ですがpom.xml、ビルドを反復可能にするために常に正確なバージョンを使用することをお勧めします。

Maven は推移的な依存関係を自動的にインストールしますが、インストールできるパッケージのコピーは 1 つだけです。POM ツリーで最も高いバージョンが選択されている。アプリケーションには、インストールされるパッケージのバージョンが常に最後の単語として含まれます。

Maven は、プロジェクトをビルド (mvn compile) またはパッケージ (mvn package) するたびに、依存関係を自動的にインストールまたは更新します。CDK Toolkit は、実行するたびに自動的にこれを行うため、通常、Maven を手動で呼び出す必要はありません。

AWS CDK Java のイディオム

プロンプト

すべての AWS Construct Library クラスは、3 つの引数を使用してインスタンス化されます。つまり、コンストラクトが定義されているスコープ (コンストラクトツリー内の親)、ID props です。これは、コンストラクトが作成するリソースの設定に使用するキーと値のペアのバンドルです。他のクラスやメソッドでは、引数に「属性のバンドル」パターンも使用します。

Java では、props は Builder パターン を使用して表現されます。各コンストラクトタイプには対応する props タイプがあります。例えば、Bucketコンストラクト (Amazon S3 バケットを表す) は のインスタンスをプロップしますBucketProps

BucketProps クラス (すべての AWS コンストラクトライブラリ props クラスと同様) には、 という内部クラスがありますBuilderBucketProps.Builder タイプは、BucketPropsインスタンスのさまざまなプロパティを設定するメソッドを提供します。各メソッドはBuilderインスタンスを返すため、メソッド呼び出しを連鎖して複数のプロパティを設定できます。チェーンの最後に、 build()を呼び出してBucketPropsオブジェクトを実際に生成します。

Bucket bucket = new Bucket(this, "MyBucket", new BucketProps.Builder() .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build());

コンストラクト、および最後の引数としてprops のようなオブジェクトを取る他のクラスは、ショートカットを提供します。クラスには独自の Builderがあり、1 つのステップでその とその props オブジェクトをインスタンス化します。これにより、 BucketPropsと の両方を明示的にインスタンス化 (例えば) する必要Bucketはなく、props タイプにインポートする必要はありません。

Bucket bucket = Bucket.Builder.create(this, "MyBucket") .versioned(true) .encryption(BucketEncryption.KMS_MANAGED) .build();

既存のコンストラクトから独自のコンストラクトを取得する場合は、追加のプロパティを受け入れることをお勧めします。これらのビルダーパターンに従うことをお勧めします。ただし、これはコンストラクトクラスのサブクラス化ほど簡単ではありません。2 つの新しいBuilderクラスの可動部分を自分で指定する必要があります。コンストラクトに 1 つ以上の追加の引数を受け入れるだけでよい場合があります。引数がオプションの場合、追加のコンストラクタを指定する必要があります。

汎用構造

一部の ではAPIs、 AWS CDK は JavaScript 配列または型のないオブジェクトをメソッドへの入力として使用します。(例えば、 AWS CodeBuildの BuildSpec.fromObject()メソッドを参照してください。) Java では、これらのオブジェクトは として表されますjava.util.Map<String, Object>。値がすべての文字列である場合は、 を使用できますMap<String, String>

Java では、他の言語と同様に、このようなコンテナのリテラルを記述する方法はありません。Java 9 以降では、 java.util.Map.of()を使用して、これらの呼び出しの 1 つと最大 10 個のエントリのマップをインラインで簡単に定義できます。

java.util.Map.of( "base-directory", "dist", "files", "LambdaStack.template.json" )

10 個を超えるエントリを含むマップを作成するには、 を使用しますjava.util.Map.ofEntries()

Java 8 を使用している場合は、次のような独自のメソッドを指定できます。

JavaScript 配列は、Java List<String>では List<Object>または として表されます。メソッドjava.util.Arrays.asListは、短い を定義するのに便利ですList

List<String> cmds = Arrays.asList("cd lambda", "npm install", "npm install typescript")

欠落した値

Java では、props などの AWS CDK オブジェクトの欠損値は で表されますnull。値を使用する前に、 の値に値が含まれていることを確認するnullために、 の値をすべて明示的にテストする必要があります。Java には、他の言語と同様に NULL 値を処理するのに役立つ「構文綴り」はありません。状況によっては、Apache ObjectUtilの defaultIfNullと がfirstNonNull役立つ場合があります。または、独自の静的ヘルパーメソッドを記述して、潜在的に NULL 値の処理を容易にし、コードの読み取りを容易にします。

CDK アプリケーションの構築と実行

は、アプリケーションを実行する前に AWS CDK 自動的にコンパイルします。ただし、アプリを手動で構築してエラーをチェックし、テストを実行すると便利です。これは、 で IDE (例えば、Eclipse で Control-B を押す)、またはプロジェクトのルートディレクトリにあるときにコマンドプロンプトmvn compileで を発行することで実行できます。

コマンドプロンプトmvn testで を実行して、記述したテストを実行します。