AWS CDK アプリ - AWS Cloud Development Kit (AWS CDK) v2

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

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

AWS CDK アプリ

AWS Cloud Development Kit (AWS CDK) アプリケーションまたはアプリケーションは、1 つ以上のCDKスタック のコレクションです。 AWS CDK スタックスタックは、 AWS リソースとプロパティを定義する 1 つ以上のコンストラクトのコレクションです。したがって、スタックとコンストラクトの全体的なグループ化はCDKアプリと呼ばれます。

CDK アプリの作成方法

アプリケーションを作成するには、プロジェクト のアプリケーションファイルでアプリケーションインスタンスを定義します。これを行うには、 Appコンストラクトライブラリから AWS コンストラクトをインポートして使用します。App コンストラクトには初期化引数は必要ありません。ルートとして使用できる唯一のコンストラクトです。

コンストラクトライブラリの AWS Appおよび Stack クラスは一意のコンストラクトです。他のコンストラクトと比較すると、 AWS リソースは独自に設定されません。代わりに、他のコンストラクトのコンテキストを提供するために使用されます。 AWS リソースを表すすべてのコンストラクトは、Stackコンストラクトの範囲内で直接または間接的に定義する必要があります。 Stack コンストラクトは Appコンストラクトの範囲内で定義されます。

その後、アプリケーションが合成され、スタックの 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();
Go
app := awscdk.NewApp(nil) MyFirstStack(app, "MyFirstStack", &MyFirstStackProps{ awscdk.StackProps{ Env: env(), }, }) app.Synth(nil)

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

コンストラクトツリー

コンストラクトは、 App クラスをルートとして、すべてのコンストラクトに渡される scope 引数を使用して他のコンストラクト内で定義されます。このようにして、 AWS CDK アプリケーションはコンストラクトツリー と呼ばれるコンストラクトの階層を定義します。

このツリーのルートは、 App クラスのインスタンスであるアプリです。アプリ内では、1 つ以上のスタックをインスタンス化します。スタック内では、 コンストラクトをインスタンス化します。これにより、それ自体がリソースやその他のコンストラクトをインスタンス化できます。

コンストラクトは常に別のコンストラクトの範囲内で明示的に定義され、コンストラクト間の関係が作成されます。ほとんどの場合、 this (Python では self) をスコープとして渡す必要があります。これは、新しいコンストラクトが現在のコンストラクトの子であることを示します。意図したパターンは、 からコンストラクトを導き出しConstruct、そのコンストラクトで使用するコンストラクトをインスタンス化することです。

スコープを明示的に渡すと、各コンストラクトがツリーにそれ自体を追加できるようになります。この動作はConstructベースクラス に完全に含まれています。でサポートされているすべての言語で同じように動作 AWS CDK し、追加のカスタマイズは必要ありません。

重要

技術的には、コンストラクトをインスタンス化thisする場合以外のスコープを渡すことができます。ツリー内の任意の場所、または同じアプリ内の別のスタックにコンストラクトを追加できます。例えば、 引数として渡されたスコープにコンストラクトを追加するミキサー形式の関数を記述できます。ここでの実際的な難点は、コンストラクトにIDs選択した が他のユーザーのスコープ内で一意であることを簡単に確認できないことです。また、この手法により、コードの理解、保守、再利用が難しくなります。したがって、コンストラクトツリーの一般的な構造を使用することをお勧めします。

AWS CDK は、ツリーIDsのルートから各子コンストラクトへのパス内のすべてのコンストラクトの を使用して、 IDsに必要な一意の を生成します AWS CloudFormation。このアプローチは、 コンストラクトがネイティブ のようにスタック全体ではなく、スコープ内で一意であるIDs必要があることを意味します AWS CloudFormation。ただし、コンストラクトを別のスコープに移動すると、生成されたスタック固有の ID が変更され、同じリソースと見な AWS CloudFormation されません。

コンストラクトツリーは、 AWS CDK コードで定義したコンストラクトとは別のものです。ただし、ツリー内のそのコンストラクトを表すノードへの参照である任意のコンストラクトの node 属性からアクセスできます。各ノードはNodeインスタンスであり、属性によってツリーのルートとノードの親スコープと子へのアクセスが提供されます。

  1. node.children – コンストラクトの直接の子。

  2. node.id – スコープ内のコンストラクトの識別子。

  3. node.path – IDsすべての親の を含むコンストラクトのフルパス。

  4. node.root – コンストラクトツリー (アプリ) のルート。

  5. node.scope – コンストラクトの範囲 (親)。ノードがルートの場合は未定義。

  6. node.scopes – ルートまでのコンストラクトのすべての親。

  7. node.uniqueId – ツリー内のこのコンストラクトの一意の英数字識別子 (デフォルトでは、 node.pathとハッシュから生成されます)。

コンストラクトツリーは、コンストラクトが最終 AWS CloudFormation テンプレートのリソースに合成される暗黙的な順序を定義します。あるリソースを別のリソースの前に作成する必要がある場合、 AWS CloudFormation または AWS コンストラクトライブラリは一般的に依存関係を推測します。次に、リソースが正しい順序で作成されていることを確認します。

を使用して、2 つのノード間に明示的な依存関係を追加することもできますnode.addDependency()。詳細については、「 AWS CDK APIリファレンス」の「依存関係」を参照してください。

AWS CDK は、コンストラクトツリー内のすべてのノードにアクセスし、それぞれに対してオペレーションを実行する簡単な方法を提供します。詳細については、「側面と AWS CDK」を参照してください。