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

2 分的閱讀內容
0

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

解決方法

AWS CDK 建構模組程式庫中的大多數可設定狀態資源都會接受以 RETAIN 為預設的 removalPolicy 屬性。如需詳細資訊,請參閱 AWS CDK 網站上的 enum RemovalPolicy

如果您沒有將 removalPolicy 屬性設定在資源上,則資源就會變成遺棄狀態。在您刪除堆疊並轉換為 DELETE_COMPLETE 狀態後,這些資源會保留在 AWS 帳戶中。如果您為資源指定了自訂名稱,則當您重新部署相同的程式碼時,會出現「已存在」錯誤。

**注意:**下列步驟使用的範例 Amazon Simple Storage Service (Amazon S3) 儲存貯體資源,與 AWS CDK 中的 s3.Bucket 類別相關聯。依預設,該資源的 removalPolicy 已設定為 RETAIN。當您刪除相關聯的堆疊時,資源會保留在您的帳戶中。更新堆疊時,系統會移除資源。

以下是自訂名稱資源的範例:

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

手動刪除保留的資源

請完成下列步驟:

  1. 登入 AWS 管理主控台
  2. 選擇您不想保留的資源的服務。
  3. 手動刪除資源。例如,若要移除 s3.bucket 資源,請刪除 Amazon S3 儲存貯體
  4. 若要重新部署 AWS CDK,請執行下列命令:
    cdk deploy

變更保留資源的名稱

請完成下列步驟:

  1. 開啟您要變更名稱之資源的 AWS CDK 程式碼。
  2. 將資源名稱更新為不會與保留資源名稱衝突的唯一值:
    const s3Bucket = new s3.Bucket(this, 's3-bucket', {
     bucketName: 'EXAMPLE-NEW-NAME-S3-BUCKET',
     versioned: false,
     encryption: s3.BucketEncryption.S3_MANAGED
     });
    **注意:**前述範例使用 bucketName 參數來變更 s3.Bucket 資源的名稱。

刪除資源名稱

刪除資源名稱,以便 AWS CDK 產生唯一的名稱。

請完成下列步驟:

  1. 從 AWS CDK 移除資源名稱:
    const s3Bucket = new s3.Bucket(this, 's3-bucket', {
     versioned: false,
     encryption: s3.BucketEncryption.S3_MANAGED
     });
    **注意:**前述範例程式碼會移除 bucketName 屬性以允許 AWS CDK 產生新名稱。
  2. 若要重新部署 AWS CDK,請執行下列命令:
    cdk deploy

將 removalPolicy 設定為 DESTROY

刪除堆疊之前,請將資源的 removalPolicy 設定為 DESTROY

請完成下列步驟:

  1. 開啟您不想保留之資源的 AWS CDK 程式碼。

  2. removalPolicy 屬性設定為 DESTROY

    const s3Bucket = new s3.Bucket(this, 's3-bucket', {
     bucketName: 'EXAMPLE-S3-BUCKET',
     removalPolicy: RemovalPolicy.DESTROY
     });
  3. 若要存取 AWS CloudFormation 範本,請執行下列 cdk synth命令:

    cdk synth

    然後,確認 DeletionPolicyUpdateReplacePolicy 已設定為刪除

AWS 官方
AWS 官方已更新 9 個月前