アプリケーション - AWS Cloud Development Kit (AWS CDK) v2

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

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

アプリケーション

AWS Cloud Development Kit (AWS CDK) アプリケーションはアプリケーション と呼ばれます。CDK アプリは、1 つ以上のスタックのコンテナです。したがって、アプリケーションは各スタックのスコープとして機能します。

アプリケーションの定義

アプリケーションを作成するには、 AWS コンストラクトライブラリから App クラスをインポートして使用します。次に、アプリケーション内でスタックを定義し、スタック内でコンストラクトを定義します。アプリケーションには、少なくとも 1 つのスタックが含まれている必要があります。

この構造を採用することで、デプロイ前にスタックを合成できます。スタックを合成するには、スタックごとに AWS CloudFormation テンプレートを作成し、これを にデプロイして AWS リソース AWS CloudFormation をプロビジョニングします。スタックの詳細については、「」を参照してくださいスタック

App コンストラクトには初期化引数は必要ありません。これは、コンストラクトツリーのルートとして使用できる唯一のコンストラクトです。

以下は、 という名前のスタックを含む新しい AWS CDK アプリケーションの例ですMyFirstStack。その後、スタックが合成され、 AWS CloudFormation テンプレートが生成されます。

TypeScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
JavaScript
const app = new App(); new MyFirstStack(app, 'hello-cdk'); app.synth();
Python
app = App() MyFirstStack(app, "hello-cdk") app.synth()
Java
App app = new App(); new MyFirstStack(app, "hello-cdk"); app.synth();
C#
var app = new App(); new MyFirstStack(app, "hello-cdk"); app.Synth();

1 つのアプリケーション内のスタックは、相互のリソースとプロパティを簡単に参照できます。は、スタック間の依存関係を AWS CDK 推測して、正しい順序でデプロイできるようにします。1 つのcdk deployコマンドで、アプリケーション内の一部またはすべてのスタックをデプロイできます。

アプリを使用する

アプリケーションのライフサイクル

次の図は、 を呼び出すときに が AWS CDK 通過するフェーズを示していますcdk deploy。このコマンドは、アプリケーションが定義するリソースをデプロイします。

AWS CDK アプリケーションは、ライフサイクルの次のフェーズを実行します。

1. 組織 (または初期化)

コードは、定義されたすべてのコンストラクトをインスタンス化し、それらをリンクします。この段階では、すべてのコンストラクト (アプリケーション、スタック、子コンストラクト) がインスタンス化され、コンストラクターチェーンが実行されます。アプリコードのほとんどはこの段階で実行されます。

2. 準備

prepare メソッドを実装したすべてのコンストラクトは、最終状態をセットアップするために最終的な変更ラウンドに参加します。準備フェーズは自動的に行われます。ユーザーとして、このフェーズからのフィードバックは表示されません。「prepare」フックを使用する必要はほとんどなく、通常はお勧めしません。オペレーションの順序が動作に影響を与える可能性があるため、このフェーズでコンストラクトツリーを変更するときは注意が必要です。

3. 検証

validate メソッドを実装したすべてのコンストラクトは、それらが正しくデプロイされる状態であることを確認するために、自分自身を検証できます。このフェーズで検証に失敗した場合は、通知を受け取ります。通常、できるだけ早く (通常は入力を取得するとすぐに) 検証を行い、できるだけ早く例外をスローすることをお勧めします。検証を早期に実行すると、スタックトレースの精度が向上し、コードを安全に実行し続けることができます。

4. 合成

これは、 AWS CDK アプリケーションの実行の最終段階です。これは への呼び出しによってトリガーされapp.synth()、コンストラクトツリーを横断して、すべてのコンストラクトで synthesizeメソッドを呼び出します。を実装するコンストラクトsynthesizeは合成に参加し、結果のクラウドアセンブリにデプロイアーティファクトを出力できます。これらのアーティファクトには、 AWS CloudFormation AWS Lambda テンプレート、アプリケーションバンドル、ファイルと Docker イメージアセット、およびその他のデプロイアーティファクトが含まれます。 はこのフェーズの出力クラウドアセンブリについて説明します。ほとんどの場合、 synthesizeメソッドを実装する必要はありません。

5. デプロイ

このフェーズでは、 AWS CDK ツールキットは合成フェーズによって生成されたデプロイアーティファクトクラウドアセンブリを受け取り、 AWS 環境にデプロイします。アセットを Amazon S3 と Amazon ECR にアップロードするか、必要な場所にアップロードします。次に、 デプロイを開始 AWS CloudFormation してアプリケーションをデプロイし、リソースを作成します。

AWS CloudFormation デプロイフェーズ (ステップ 5) が開始される時点で、 AWS CDK アプリケーションはすでに終了し、終了しています。これにより、以下の影響があります。

  • AWS CDK アプリケーションは、作成中のリソースやデプロイ全体の終了など、デプロイ中に発生するイベントに対応できません。デプロイフェーズでコードを実行するには、カスタムリソース として AWS CloudFormation テンプレートにコードを挿入する必要があります。アプリケーションへのカスタムリソースの追加の詳細については、AWS CloudFormation モジュール または custom-resource の例を参照してください。

  • AWS CDK アプリは、実行時に認識できない値を操作する必要がある場合があります。例えば、 AWS CDK アプリケーションが自動生成された名前で Amazon S3 バケットを定義し、 bucket.bucketName (Python: bucket_name) 属性を取得した場合、その値はデプロイされたバケットの名前ではありません。代わりに、 Token値を取得します。特定の値が使用可能かどうかを判断するには、 cdk.isUnresolved(value) (Python: ) を呼び出しますis_unresolved。詳細については、「トークン」を参照してください。

クラウドアセンブリ

への呼び出しapp.synth()は、アプリケーションからクラウドアセンブリを合成 AWS CDK するように に指示するものです。通常、クラウドアセンブリを直接操作することはありません。これらは、アプリケーションをクラウド環境にデプロイするために必要なすべてを含むファイルです。例えば、アプリケーション内の各スタックの AWS CloudFormation テンプレートが含まれています。また、アプリで参照するファイルアセットや Docker イメージのコピーも含まれます。

クラウドアセンブリのフォーマット方法の詳細については、クラウドアセンブリ仕様を参照してください。

AWS CDK アプリケーションが作成するクラウドアセンブリを操作するには、通常、コマンドラインツールである AWS CDK Toolkit を使用します。ただし、クラウドアセンブリ形式を読み取ることができる任意のツールを使用してアプリケーションをデプロイできます。

CDK Toolkit は、 AWS CDK アプリの実行方法を知る必要があります。cdk init コマンドを使用してテンプレートからプロジェクトを作成した場合、アプリケーションの cdk.json ファイルに appキーが含まれます。このキーは、アプリケーションが書き込まれる言語に必要なコマンドを指定します。言語にコンパイルが必要な場合、コマンドラインはアプリケーションを実行する前にこのステップを実行するため、忘れることはありません。

TypeScript
{ "app": "npx ts-node --prefer-ts-exts bin/my-app.ts" }
JavaScript
{ "app": "node bin/my-app.js" }
Python
{ "app": "python app.py" }
Java
{ "app": "mvn -e -q compile exec:java" }
C#
{ "app": "dotnet run -p src/MyApp/MyApp.csproj" }

CDK Toolkit を使用してプロジェクトを作成しなかった場合、または で指定されたコマンドラインを上書きする場合はcdk.jsoncdkコマンドを発行するときに --appオプションを使用できます。

$ cdk --app 'executable' cdk-command ...

コマンドの実行可能な部分は、CDK アプリケーションを実行するために実行する必要があるコマンドを示します。示されているように引用符を使用します。このようなコマンドにはスペースが含まれているためです。cdk-command は、 synthや などのサブコマンドdeployで、アプリで何をするかを CDK Toolkit に指示します。これに従い、そのサブコマンドに必要な追加オプションを指定します。

CLI は、既に合成されたクラウドアセンブリと直接やり取りすることもできます。そのためには、クラウドアセンブリが保存されているディレクトリを に渡します--app。次の例では、 に保存されているクラウドアセンブリで定義されたスタックを一覧表示します./my-cloud-assembly

$ cdk --app ./my-cloud-assembly ls