刪除初始部署的堆疊後,如何解決在重新部署 CDK 程式碼時收到的「已存在」錯誤?

2 分的閱讀內容
0

我想解決在重新部署 AWS Cloud Development Kit (AWS CDK) 程式碼時收到的「已存在」錯誤。

簡短描述

AWS CDK 建構模組程式庫中的大多數可設定狀態資源都會接受以 RETAIN 為預設的 removalPolicy 屬性。沒有 removalPolicy 集的資源會變成孤立資源,並在堆疊刪除後仍保留在帳戶中。當堆疊轉換為 DELETE_COMPLETE 狀態時,就會發生這種情況。在對應堆疊的更新期間,從程式碼中移除類似資源的資源定義時,行為保持不變。如果保留的資源是 custom-named,則當您重新部署相同的程式碼時,會出現「已存在」錯誤。

若要解決此錯誤,請根據您的使用案例完成下列動作:

  • 對於無意中保留的資源,請手動刪除資源。
  • 對於有意保留的資源,請將 AWS CDK 程式碼中的資源名稱變更為唯一值。
  • 另一種刻意保留資源的方法是從 AWS CDK 程式碼中刪除資源名稱,讓 AWS CDK 自動產生新名稱。
  • 在刪除堆疊之前,請確認刪除 removalPolicy 已從資源中設定為 DESTROY

解決方法

**注意:**下列步驟使用範例 Amazon Simple Storage Service (Amazon S3) 儲存貯體資源,以 AWS CDK 中的 s3.Bucket 類別代表。AWS CDK 中此資源的 removalPolicy 預設會設定為 RETAIN 。當刪除其個別堆疊或在堆疊更新期間移除資源時,此資源會保留在帳號中。

範例:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘DOC-EXAMPLE-BUCKET1’,
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

手動刪除保留的資源

1.    登入 AWS 管理主控台,並存取您不想保留的資源的對應服務。

2.    手動刪除您不想保留的資源。

**注意:**在此範例中,請刪除 Amazon S3 儲存貯體以刪除 s3.bucket 資源。

3.    重新部署 AWS CDK 程式碼:

cdk deploy

變更保留資源的名稱

1.    存取您要變更名稱之資源的 AWS CDK 程式碼。

2.    將資源名稱更新為不會與保留資源名稱衝突的唯一值。

**注意:**在此範例中,請更新 bucketName 參數,以變更 s3.Bucket 資源的名稱。

範例:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘EXAMPLE-NEW-NAME-S3-BUCKET’,
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

刪除資源名稱以允許 AWS CDK 自動產生唯一名稱

1.    從 AWS CDK 移除資源名稱。

**注意:**在此範例中,會移除 bucketName 屬性,讓 AWS CDK 自動產生新的名稱。

範例:

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 versioned: false,
 encryption: s3.BucketEncryption.S3_MANAGED
 });

2.    重新部署 AWS CDK 程式碼:

cdk deploy

將 removalPolicy 設定為 DESTROY銷毀

1.    存取您不想保留的資源的 AWS CDK 程式碼。

2.    將 removalPolicy 屬性設定為 DESTROY

const s3Bucket = new s3.Bucket(this, 's3-bucket', {
 bucketName: ‘EXAMPLE-S3-BUCKET’,
 removalPolicy: RemovalPolicy.DESTROY
 });

3.    執行 cdk synth 以存取 AWS CloudFormation 範本,然後檢查 DeletionPolicyUpdateReplacePolicy 是否設定為 Delete

cdk synth
AWS 官方
AWS 官方已更新 1 年前