これは v2 AWS CDK デベロッパーガイドです。旧版の CDK v1 は 2022 年 6 月 1 日にメンテナンスを開始し、2023 年 6 月 1 日にサポートを終了しました。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CDK スタックはデプロイの最小単位です。CDK コンストラクトを使用して定義する AWS リソースのコレクションを表します。CDK アプリケーションをデプロイすると、CDK スタック内のリソースは AWS CloudFormation スタックとして一緒にデプロイされます。 AWS CloudFormation スタックの詳細については、「 AWS CloudFormation ユーザーガイド」の「AWS リソースを AWS CloudFormation スタックで 1 つのユニットとして管理する」を参照してください。
スタックを定義するには、Stack
コンストラクトを拡張または継承します。以下の例は、スタックファイルと呼ばれる別のファイルで CDK スタックを定義するための一般的なパターンです。ここでは、Stack
クラスを拡張または継承し、id
、scope
、props
を受け入れるコンストラクターを定義します。次に、受け取った scope
、id
、props
を引数とする super
で、基底となる Stack
クラスのコンストラクターを呼び出します。
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class MyCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define your constructs here
}
}
前の例では、スタックのみを定義しています。スタックを作成するには、CDK アプリのコンテキスト内でインスタンス化する必要があります。一般的なパターンは、CDK アプリケーションを定義し、アプリケーションファイルと呼ばれる別のファイルでスタックを初期化することです。
以下は、MyCdkStack
という名前の CDK スタックを作成する例です。ここでは、CDK アプリケーションが作成され、アプリケーションのコンテキストで MyCdkStack
がインスタンス化されます。
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { MyCdkStack } from '../lib/my-cdk-stack';
const app = new cdk.App();
new MyCdkStack(app, 'MyCdkStack', {
});
以下の例では、2 つのスタックを含む CDK アプリケーションを作成します。
const app = new App();
new MyFirstStack(app, 'stack1');
new MySecondStack(app, 'stack2');
app.synth();
スタック API について
Stack
オブジェクトには、以下のような豊富な API が用意されています。
-
Stack.of(construct)
– コンストラクトが定義されているスタックを返す静的メソッド。これは、再利用可能なコンストラクト内からスタックを操作する必要がある場合に役立ちます。スタックがスコープ内で見つからない場合、呼び出しは失敗します。 -
stack.stackName
(Python:stack_name
) — スタックの物理名を返します。前述のように、すべての AWS CDK スタックには合成中に が解決 AWS CDK できる物理名があります。 -
stack.region
およびstack.account
– このスタックがデプロイされる AWS リージョンとアカウントをそれぞれ返します。これらのプロパティは、以下のいずれかの値を返します。-
スタックが定義されたときに明示的に指定されたアカウントまたはリージョン
-
アカウントとリージョンの AWS CloudFormation 擬似パラメータに解決され、このスタックが環境に依存しないことを示す文字列エンコードされたトークン
スタックの環境の決定方法については、「の環境 AWS CDK」を参照してください。
-
-
stack.addDependency(stack)
(Python:stack.add_dependency(stack)
) – 2 つのスタック間の依存関係の順序を明示的に定義するために使用できます。この順序は、複数のスタックを一度にデプロイするときに cdk deploy コマンドによって考慮されます。 -
stack.tags
– スタックレベルのタグを追加または削除するために使用できる TagManager を返します。このタグマネージャーは、スタック内のすべてのリソースにタグを付け、スタックの作成時にスタック自体にタグを付けます AWS CloudFormation。 -
stack.partition
、stack.urlSuffix
(Python:url_suffix
)stack.stackId
、 (Python:stack_id
)、およびstack.notificationArn
(Python:notification_arn
) – などのそれぞれの AWS CloudFormation 擬似パラメータに解決されるトークンを返します{ "Ref": "AWS::Partition" }
。これらのトークンは、 AWS CDK フレームワークがクロススタック参照を識別できるように、特定のスタックオブジェクトに関連付けられます。 -
stack.availabilityZones
(Python:availability_zones
) – このスタックがデプロイされている環境で使用可能なアベイラビリティーゾーンのセットを返します。環境に依存しないスタックの場合、これは常に 2 つのアベイラビリティーゾーンを持つ配列を返します。環境固有のスタックの場合、 は環境を AWS CDK クエリし、指定したリージョンで使用可能なアベイラビリティーゾーンの正確なセットを返します。 -
stack.parseArn(arn)
およびstack.formatArn(comps)
(Python:parse_arn
、format_arn
) — Amazon リソースネーム (ARN) の操作に使用できます。 -
stack.toJsonString(obj)
(Python:to_json_string
) – テンプレートに埋め込むことができる JSON 文字列として任意のオブジェクトをフォーマットするために使用できます AWS CloudFormation 。オブジェクトにはトークン、属性、参照を含めることができ、これらはデプロイ中にのみ解決されます。 -
stack.templateOptions
(Python:template_options
) – スタックの変換、説明、メタデータなどの AWS CloudFormation テンプレートオプションを指定します。
スタックの操作
スタックは、 AWS CloudFormation スタックとして AWS 環境にデプロイされます。環境は、特定の AWS アカウント および を対象としています AWS リージョン。
複数のスタックを持つアプリケーションの cdk synth
コマンドを実行すると、クラウドアセンブリにはスタックインスタンスごとに個別のテンプレートが含まれます。2 つのスタックが同じクラスのインスタンスであっても、 AWS CDK は 2 つの個別のテンプレートとして出力します。
cdk synth
コマンドでスタック名を指定することで、各テンプレートを合成できます。以下の例は、stack1
のテンプレートを合成します。
$
cdk synthstack1
このアプローチは、 AWS CloudFormation テンプレートを複数回デプロイし、AWS CloudFormation パラメータを使用してパラメータ化できるテンプレートの通常の使用方法とは概念的に異なります。 AWS CloudFormation パラメータは で定義できますが AWS CDK、 AWS CloudFormation パラメータはデプロイ中にのみ解決されるため、一般的には推奨されません。これは、コード内ではパラメータの値を判断できないことを意味します。
たとえば、パラメータ値に基づいてアプリにリソースを条件付きで含めるには、AWS CloudFormation 条件を設定し、そのリソースにタグを付ける必要があります。 AWS CDK は、合成時に具体的なテンプレートが解決されるアプローチを取ります。したがって、if
ステートメントを使用して値をチェックし、リソースを定義するか、何らかの動作を適用するかを決定できます。
注記
AWS CDK は、合成時に可能な限り多くの解像度を提供し、プログラミング言語のイディオマティックで自然な使用を可能にします。
他のコンストラクトと同様に、スタックはまとめてグループに構成できます。以下のコードは、コントロールプレーン、データプレーン、モニタリングスタックの 3 つのスタックで構成されるサービスの例を示しています。サービスコンストラクトは 2 回定義されます。ベータ環境用に 1 回、本番環境用に 1 回です。
import { App, Stack } from 'aws-cdk-lib';
import { Construct } from 'constructs';
interface EnvProps {
prod: boolean;
}
// imagine these stacks declare a bunch of related resources
class ControlPlane extends Stack {}
class DataPlane extends Stack {}
class Monitoring extends Stack {}
class MyService extends Construct {
constructor(scope: Construct, id: string, props?: EnvProps) {
super(scope, id);
// we might use the prod argument to change how the service is configured
new ControlPlane(this, "cp");
new DataPlane(this, "data");
new Monitoring(this, "mon"); }
}
const app = new App();
new MyService(app, "beta");
new MyService(app, "prod", { prod: true });
app.synth();
この AWS CDK アプリは最終的に 6 つのスタックで構成され、環境ごとに 3 つになります。
$
cdk ls
betacpDA8372D3 betadataE23DB2BA betamon632BD457 prodcp187264CE proddataF7378CE5 prodmon631A1083
AWS CloudFormation スタックの物理名は、ツリー内のスタックのコンストラクトパス AWS CDK に基づいて によって自動的に決定されます。デフォルトでは、スタックの名前は Stack
オブジェクトのコンストラクト ID から取得されます。ただし、以下のように stackName
prop (Python では stack_name
) を使用して、明示的な名前を指定できます。
new MyStack(this, 'not:a:stack:name', { stackName: 'this-is-stack-name' });
ネストされたスタックの操作
ネストされたスタックは、親スタックと呼ばれる別のスタック内に作成する CDK スタックです。ネストされたスタックは、NestedStack
コンストラクトを使用して作成します。
ネストされたスタックを使用すると、複数のスタックにまたがってリソースを整理できます。ネストされたスタックは、スタックのリソース制限である AWS CloudFormation 500 を回避する方法も提供します。ネストされたスタックは、それを含むスタック内の 1 つのリソースとしてカウントされます。そしてそれには、さらにネストされたスタックを含め、最大 500 個のリソースを含めることができます。
ネストされたスタックのスコープは、Stack
または NestedStack
コンストラクトである必要があります。ネストされたスタックは、親スタック内で字句的に宣言される必要はありません。ネストされたスタックをインスタンス化するときには、親スタックを最初のパラメータ (scope
) として渡すだけで済みます。この制限とは別に、ネストされたスタック内のコンストラクトの定義は、通常のスタックとまったく同じように機能します。
合成時に、ネストされたスタックは独自の AWS CloudFormation テンプレートに合成され、デプロイ時にステージングバケットにアップロード AWS CDK されます。ネストされたスタックは親スタックにバインドされ、独立したデプロイアーティファクトとしては扱われません。これらは cdk list
で一覧表示されず、cdk
deploy
でデプロイすることもできません。
親スタックとネストされたスタック間のリファレンスは、すべてのクロススタックリファレンスと同様に、生成された AWS CloudFormation テンプレート内のスタックパラメータと出力に自動的に変換されます。
警告
セキュリティ体制の変更は、ネストされたスタックのデプロイ前には表示されません。この情報は、最上位スタックにのみ表示されます。