選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

識別符和 AWS CDK

焦點模式
識別符和 AWS CDK - AWS Cloud Development Kit (AWS CDK) v2

這是 AWS CDK v2 開發人員指南。較舊的 CDK v1 已於 2022 年 6 月 1 日進入維護,並於 2023 年 6 月 1 日結束支援。

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

這是 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是執行個體化建構物件時作為第二個引數傳遞的識別符。此識別符與所有識別符一樣,只需要在建立識別符的範圍內是唯一的,這是執行個體化建構物件時的第一個引數。

注意

堆疊id的 也是您在 中用來參考它的識別符AWS CDK參考CLI

讓我們來看看範例,其中有兩個具有 識別符的建構MyBucket。第一個定義在具有識別符 的堆疊範圍內Stack1。第二個是定義在具有識別符 的堆疊範圍內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"); } }
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');

路徑

應用程式中的建構會 AWS CDK 形成以 App類別為根的階層。我們將來自指定建構、其父建構、其祖父母等IDs 集合,稱為建構樹根目錄的路徑

AWS CDK 通常會將範本中的路徑顯示為字串。來自關卡的 IDs 會以斜線分隔,從根App執行個體下的節點開始,通常為堆疊。例如,上一個程式碼範例中兩個 Amazon S3 儲存貯體資源的路徑為 Stack1/MyBucketStack2/MyBucket

您可以程式設計方式存取任何建構的路徑,如下列範例所示。這會取得路徑 myConstruct(或 my_construct,因為 Python 開發人員會寫入)。由於 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;
const path: string = myConstruct.node.path;

唯一 ID

AWS CloudFormation 要求範本中的所有邏輯 IDs 都是唯一的。因此, AWS CDK 必須能夠為應用程式中的每個建構產生唯一的識別符。資源具有全域唯一的路徑 (從堆疊到特定資源的所有範圍名稱)。因此, 會透過串連路徑的元素並新增 8 位數雜湊來 AWS CDK 產生必要的唯一識別符。(雜湊是區分不同路徑的必要項目,例如 A/B/CA/BC,這會導致相同的 AWS CloudFormation 識別符。 AWS CloudFormation 識別符是英數字元,不能包含斜線或其他分隔符號字元。) 會將此字串 AWS CDK 呼叫為建構體的唯一 ID

一般而言,您的 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);
const uid: string = Names.uniqueId(myConstruct);

地址是另一種唯一識別符,可唯一區分 CDK 資源。衍生自路徑的 SHA-1 雜湊,無法人類讀取。不過,其常數、相對較短的長度 (一律為 42 個十六進位字元),在「傳統」唯一 ID 可能太長的情況下非常有用。有些建構可能使用合成 AWS CloudFormation 範本中的地址,而非唯一 ID。同樣地,您的應用程式通常不需要知道其建構地址,但您可以擷取建構地址,如下所示。

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;
const addr: string = myConstruct.node.addr;

邏輯 IDs

唯一 IDs 做為代表資源之建構的產生 AWS CloudFormation 範本中 AWS 資源的邏輯識別符 (或邏輯名稱)。

例如,在上一個範例中建立的 Amazon S3 儲存貯體Stack2會產生 AWS::S3::Bucket 資源。資源的邏輯 ID 位於產生的 AWS CloudFormation 範本Stack2MyBucket4DD88B4F中。(如需如何產生此識別符的詳細資訊,請參閱 唯一 ID。)

邏輯 ID 穩定性

建立資源之後,請避免變更資源的邏輯 ID。 會依其邏輯 ID 來 AWS CloudFormation 識別資源。因此,如果您變更資源的邏輯 ID, 會使用新的邏輯 ID AWS CloudFormation 建立新的資源,然後刪除現有的資源。視資源類型而定,這可能會導致服務中斷、資料遺失或兩者。

下一個主題:

權杖

上一個主題:

資源

在本頁面

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。