選取您的 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

使用預設範本引導時,您會收到 Amazon S3 儲存貯體的 'CREATE_FAILED' 錯誤

使用 AWS CDK Command Line Interface (CDKCLI) cdk bootstrap命令搭配預設引導範本進行引導時,您會收到下列錯誤:

CREATE_FAILED | AWS::S3::Bucket | BucketName already exists

疑難排解之前,請確定您使用的是最新版本的 CDK CLI。

  • 若要檢查您的版本,請執行 cdk --version

  • 若要安裝最新版本,請執行 npm install -g aws-cdk

安裝最新版本後,請再次嘗試引導您的環境。如果您仍然收到相同的錯誤,請繼續疑難排解。

常見原因

當您啟動環境時, 會為您的啟動資源 AWS CDK 產生實體 IDs。如需詳細資訊,請參閱在引導期間建立的資源 IDs

與其他引導資源不同,Amazon S3 儲存貯體名稱是全域的。這表示每個儲存貯體名稱在分割區 AWS 帳戶 內的所有 AWS 區域 中都必須是唯一的。如需詳細資訊,請參閱《Amazon S3 使用者指南》中的儲存貯體概觀。因此,此錯誤的最常見原因是作為儲存貯體名稱產生的實體 ID 已存在於分割區的某處。這可能是在您的 帳戶或其他 帳戶中。

以下是儲存貯體名稱的範例:cdk-hnb659fds-assets-012345678910-us-west-1。雖然不太可能,但由於限定詞和帳戶 ID 是名稱的一部分,但另一個 Amazon S3 儲存貯體可能會使用此名稱 AWS 帳戶。由於儲存貯體名稱是全域範圍,因此如果您在相同分割區中由不同帳戶使用它,則無法使用它。最有可能的是,您帳戶中某個處存在名稱相同的儲存貯體。這可能是在您嘗試引導的區域中,或其他區域中。

一般而言,解決方案是在您的帳戶中找到此儲存貯體,並決定如何處理,或自訂引導以建立不同名稱的引導資源。

Resolution

首先,判斷您的 中是否存在名稱相同的儲存貯體 AWS 帳戶。使用具有有效許可的 AWS 身分來查詢您帳戶中的 Amazon S3 儲存貯體,您可以透過下列方式執行此操作:

  • 使用 AWS Command Line Interface (AWS CLI) aws s3 ls命令來檢視所有儲存貯體的清單。

  • 使用 Amazon S3 主控台查詢您帳戶中每個區域的儲存貯體名稱。

如果存在具有相同名稱的儲存貯體,請判斷是否正在使用它。如果未使用,請考慮刪除儲存貯體並嘗試再次引導您的環境。

如果具有相同名稱的儲存貯體存在,而您不想將其刪除,請判斷它是否已與帳戶中的引導堆疊相關聯。您可能需要檢查多個區域。Amazon S3 儲存貯體名稱中的區域不一定表示儲存貯體位於該區域。若要檢查它是否與CDKToolkit引導堆疊相關聯,您可以為每個區域執行下列其中一項操作:

  • 使用 AWS CLI aws cloudformation describe-stack-resources --stack-name CDKToolkit --region Region命令來檢視引導堆疊中的資源,並檢查儲存貯體是否已列出。

  • AWS CloudFormation 主控台中,找到CDKToolkit堆疊。然後,在資源索引標籤上,檢查儲存貯體是否存在。

如果儲存貯體與引導堆疊相關聯,請判斷引導堆疊是否位於您嘗試引導的相同區域。如果是,您的環境已經啟動,您應該能夠開始使用 CDK 將應用程式部署到您的環境。如果 Amazon S3 儲存貯體與不同區域中的引導堆疊相關聯,您將需要決定該怎麼做。可能的解決方法包括重新命名現有的 Amazon S3 儲存貯體、刪除未使用的目前 Amazon S3 儲存貯體,或是使用您嘗試建立的 Amazon S3 儲存貯體的新名稱。

如果您找不到帳戶中名稱相同的 Amazon S3 儲存貯體,則它可能存在於不同的帳戶中。若要解決此問題,您需要自訂引導,以為所有引導資源或僅 Amazon S3 儲存貯體建立新名稱。若要為所有引導資源建立新名稱,您可以修改限定詞。若要僅為 Amazon S3 儲存貯體建立新的名稱,您可以提供新的儲存貯體名稱。

若要自訂引導,您可以使用選項搭配 CDK CLIcdk bootstrap命令或修改引導範本。如需說明,請參閱 自訂 AWS CDK 引導

如果您自訂引導,則必須先套用相同的合成變更,才能正確部署應用程式。如需說明,請參閱 自訂 CDK 堆疊合成

例如,您可以使用 提供新的限定詞cdk bootstrap

$ cdk bootstrap --qualifier abcde0123

以下是將使用此修改建立的 Amazon S3 儲存貯體名稱範例:cdk-abcde0123-assets-012345678910-us-west-1。在引導期間建立的所有引導資源都會使用此限定詞。

開發 CDK 應用程式時,您必須在合成器中指定自訂限定詞。這有助於 CDK 在合成和部署期間識別引導資源。以下是為您的堆疊執行個體自訂預設合成器的範例:

TypeScript
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ qualifier: 'abcde0123', }), });
JavaScript
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ qualifier: 'abcde0123', }), })
Python
MyStack(self, "MyStack", synthesizer=DefaultStackSynthesizer( qualifier="abcde0123" ))
Java
new MyStack(app, "MyStack", StackProps.builder() .synthesizer(DefaultStackSynthesizer.Builder.create() .qualifier("abcde0123") .build()) .build();
C#

new MyStack(app, "MyStack", new StackProps { Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps { Qualifier = "abcde0123" }) });
Go
func NewMyStack(scope constructs.Construct, id string, props *MyStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) synth := awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{ Qualifier: jsii.String("abcde0123"), }) stack.SetSynthesizer(synth) return stack }
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ qualifier: 'abcde0123', }), });

您也可以在 CDK 專案的 cdk.json 檔案中指定新的限定詞:

{ "app": "...", "context": { "@aws-cdk/core:bootstrapQualifier": "abcde0123" } }

若要僅修改 Amazon S3 儲存貯體名稱,您可以使用 --bootstrap-bucket-name選項。以下是範例:

$ cdk bootstrap --bootstrap-bucket-name 'my-new-bucket-name'

開發 CDK 應用程式時,您必須在合成器中指定新的儲存貯體名稱。以下是為您的堆疊執行個體自訂預設合成器的範例:

TypeScript
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ fileAssetsBucketName: 'my-new-bucket-name', }), });
JavaScript
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ fileAssetsBucketName: 'my-new-bucket-name', }), })
Python
MyStack(self, "MyStack", synthesizer=DefaultStackSynthesizer( file_assets_bucket_name='my-new-bucket-name' ))
Java
new MyStack(app, "MyStack", StackProps.builder() .synthesizer(DefaultStackSynthesizer.Builder.create() .fileAssetsBucketName("my-new-bucket-name") .build()) .build();
C#

new MyStack(app, "MyStack", new StackProps { Synthesizer = new DefaultStackSynthesizer(new DefaultStackSynthesizerProps { FileAssetsBucketName = "my-new-bucket-name" }) });
Go
func NewMyStack(scope constructs.Construct, id string, props *MyStackProps) awscdk.Stack { var sprops awscdk.StackProps if props != nil { sprops = props.StackProps } stack := awscdk.NewStack(scope, &id, &sprops) synth := awscdk.NewDefaultStackSynthesizer(&awscdk.DefaultStackSynthesizerProps{ FileAssetsBucketName: jsii.String("my-new-bucket-name"), }) stack.SetSynthesizer(synth) return stack }
new MyStack(this, 'MyStack', { synthesizer: new DefaultStackSynthesizer({ fileAssetsBucketName: 'my-new-bucket-name', }), });

預防

我們建議您主動引導您計劃使用的每個 AWS 環境。如需詳細資訊,請參閱何時引導您的環境。特別是針對 Amazon S3 儲存貯體命名問題,這會在每個 AWS 環境中建立 Amazon S3 儲存貯體,並防止其他人使用您的 Amazon S3 儲存貯體名稱。

在本頁面

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