識別子 - AWS Cloud Development Kit (AWS CDK) v2

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

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

識別子

AWS Cloud Development Kit (AWS CDK) アプリケーションを構築するときは、さまざまなタイプの識別子と名前を使用します。 AWS CDK を効果的に使用し、エラーを回避するには、識別子のタイプを理解することが重要です。

識別子は、作成された範囲内で一意である必要があります。 AWS CDK アプリケーションでグローバルに一意である必要はありません。

同じ範囲内で同じ値を持つ識別子を作成しようとすると、 は例外を AWS CDK スローします。

コンストラクト IDs

最も一般的な識別子である はid、コンストラクトオブジェクトをインスタンス化するときに 2 番目の引数として渡される識別子です。この識別子は、すべての識別子と同様に、作成先のスコープ内で一意である必要があります。これは、コンストラクトオブジェクトをインスタンス化する最初の引数です。

注記

スタックidの は、 で参照するために使用する識別子でもありますAWS CDK ツールキット (cdk コマンド)

アプリMyBucketに 識別子を持つ 2 つのコンストラクトがある例を見てみましょう。1 つ目は、識別子 を持つスタックのスコープで定義されますStack1。2 つ目は、識別子 を持つスタックのスコープで定義されますStack2。これらは異なるスコープで定義されているため、競合は発生せず、問題なく同じアプリに共存できます。

TypeScript
import { App, Stack, StackProps } from 'aws-cdk-lib'; import { Construct } from 'constructs'; import * as s3 from 'aws-cdk-lib/aws-s3'; class MyStack extends Stack { constructor(scope: Construct, id: string, props: StackProps = {}) { super(scope, id, props); new s3.Bucket(this, 'MyBucket'); } } const app = new App(); new MyStack(app, 'Stack1'); new MyStack(app, 'Stack2');
JavaScript
const { App , Stack } = require('aws-cdk-lib'); const s3 = require('aws-cdk-lib/aws-s3'); class MyStack extends Stack { constructor(scope, id, props = {}) { super(scope, id, props); new s3.Bucket(this, 'MyBucket'); } } const app = new App(); new MyStack(app, 'Stack1'); new MyStack(app, 'Stack2');
Python
from aws_cdk import App, Construct, Stack, StackProps from constructs import Construct from aws_cdk import aws_s3 as s3 class MyStack(Stack): def __init__(self, scope: Construct, id: str, **kwargs): super().__init__(scope, id, **kwargs) s3.Bucket(self, "MyBucket") app = App() MyStack(app, 'Stack1') MyStack(app, 'Stack2')
Java
// MyStack.java package com.myorg; import software.amazon.awscdk.App; import software.amazon.awscdk.Stack; import software.amazon.awscdk.StackProps; import software.constructs.Construct; import software.amazon.awscdk.services.s3.Bucket; public class MyStack extends Stack { public MyStack(final Construct scope, final String id) { this(scope, id, null); } public MyStack(final Construct scope, final String id, final StackProps props) { super(scope, id, props); new Bucket(this, "MyBucket"); } } // Main.java package com.myorg; import software.amazon.awscdk.App; public class Main { public static void main(String[] args) { App app = new App(); new MyStack(app, "Stack1"); new MyStack(app, "Stack2"); } }
C#
using Amazon.CDK; using constructs; using Amazon.CDK.AWS.S3; public class MyStack : Stack { public MyStack(Construct scope, string id, IStackProps props) : base(scope, id, props) { new Bucket(this, "MyBucket"); } } class Program { static void Main(string[] args) { var app = new App(); new MyStack(app, "Stack1"); new MyStack(app, "Stack2"); } }

パス

AWS CDK アプリケーションのコンストラクトは、 App クラスにルートされた階層を形成します。特定のコンストラクト、その親コンストラクト、その祖先などのコンストラクトツリーのルートからの IDs のコレクションをパス と呼びます。

AWS CDK には通常、テンプレート内のパスを文字列として表示します。レベルの IDs はスラッシュで区切られ、通常はスタックであるルートAppインスタンスのすぐ下にあるノードから始まります。例えば、前のコード例の 2 つの Amazon S3 バケットリソースのパスは Stack1/MyBucketと ですStack2/MyBucket

次の例に示すように、任意のコンストラクトのパスにプログラムでアクセスできます。これにより、 myConstruct (または my_constructPython デベロッパーが記述する ) のパスを取得します。IDs は作成されるスコープ内で一意でなければならないため、パスは常に AWS CDK アプリケーション内で一意です。

TypeScript
const path: string = myConstruct.node.path;
JavaScript
const path = myConstruct.node.path;
Python
path = my_construct.node.path
Java
String path = myConstruct.getNode().getPath();
C#
string path = myConstruct.Node.Path;

一意の ID

AWS CloudFormation では、テンプレート内のすべての論理 IDs が一意である必要があります。このため、 はアプリケーション内のコンストラクトごとに一意の識別子を生成できる AWS CDK 必要があります。リソースには、グローバルに一意なパス (スタックから特定のリソースへのすべてのスコープの名前) があります。したがって、 はパスの要素を連結し、8 桁のハッシュを追加することで、必要な一意の識別子 AWS CDK を生成します。(ハッシュは、同じ AWS CloudFormation 識別子になる A/B/Cや などの個別のパスを区別するために必要です。 AWS CloudFormation 識別子は英数字でありA/BC、スラッシュやその他の区切り文字を含めることはできません)。は、この文字列をコンストラクトの一意の ID として AWS CDK 呼び出します。

一般的に、 AWS CDK アプリは一意の IDsについて知る必要はありません。ただし、次の例に示すように、任意のコンストラクトの一意の ID にプログラムでアクセスできます。

TypeScript
const uid: string = Names.uniqueId(myConstruct);
JavaScript
const uid = Names.uniqueId(myConstruct);
Python
uid = Names.unique_id(my_construct)
Java
String uid = Names.uniqueId(myConstruct);
C#
string uid = Names.Uniqueid(myConstruct);

アドレスは、CDK リソースを一意に区別する別の種類の一意の識別子です。パスの SHA-1 ハッシュから派生したもので、人間が読み取れません。ただし、定数の比較的短い長さ (常に 42 桁の 16 進数文字) は、「従来の」一意の ID が長すぎる可能性がある状況で役立ちます。一部のコンストラクトでは、一意の ID の代わりに合成された AWS CloudFormation テンプレートのアドレスを使用できます。繰り返しになりますが、アプリケーションは通常、コンストラクトのアドレスを知る必要はありませんが、コンストラクトのアドレスは次のように取得できます。

TypeScript
const addr: string = myConstruct.node.addr;
JavaScript
const addr = myConstruct.node.addr;
Python
addr = my_construct.node.addr
Java
String addr = myConstruct.getNode().getAddr();
C#
string addr = myConstruct.Node.Addr;

論理 IDs

一意の IDs、リソースを表すコンストラクト用に生成された AWS CloudFormation テンプレート内の AWS リソースの論理識別子 (または論理名 ) として機能します。

例えば、前の例で 内に作成された Amazon S3 バケットは、 AWS::S3::BucketリソースStack2になります。リソースの論理 ID は、結果の AWS CloudFormation テンプレートStack2MyBucket4DD88B4Fにあります。(この識別子の生成方法の詳細については、「」を参照してください一意の ID。)

論理 ID の安定性

リソースの作成後に論理 ID を変更することは避けてください。 は、リソースを論理 ID で AWS CloudFormation 識別します。したがって、リソースの論理 ID を変更すると、 は新しい論理 ID を使用して新しいリソース AWS CloudFormation を作成し、既存のリソースを削除します。リソースのタイプによっては、サービスの中断、データ損失、またはその両方が発生する可能性があります。