我想解決在重新部署 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
});
手動刪除保留的資源
請完成下列步驟:
- 登入 AWS 管理主控台。
- 選擇您不想保留的資源的服務。
- 手動刪除資源。例如,若要移除 s3.bucket 資源,請刪除 Amazon S3 儲存貯體。
- 若要重新部署 AWS CDK,請執行下列命令:
cdk deploy
變更保留資源的名稱
請完成下列步驟:
- 開啟您要變更名稱之資源的 AWS CDK 程式碼。
- 將資源名稱更新為不會與保留資源名稱衝突的唯一值:
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 產生唯一的名稱。
請完成下列步驟:
- 從 AWS CDK 移除資源名稱:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
versioned: false,
encryption: s3.BucketEncryption.S3_MANAGED
});
**注意:**前述範例程式碼會移除 bucketName 屬性以允許 AWS CDK 產生新名稱。
- 若要重新部署 AWS CDK,請執行下列命令:
cdk deploy
將 removalPolicy 設定為 DESTROY
刪除堆疊之前,請將資源的 removalPolicy 設定為 DESTROY。
請完成下列步驟:
-
開啟您不想保留之資源的 AWS CDK 程式碼。
-
將 removalPolicy 屬性設定為 DESTROY:
const s3Bucket = new s3.Bucket(this, 's3-bucket', {
bucketName: 'EXAMPLE-S3-BUCKET',
removalPolicy: RemovalPolicy.DESTROY
});
-
若要存取 AWS CloudFormation 範本,請執行下列 cdk synth命令:
cdk synth
然後,確認 DeletionPolicy 和 UpdateReplacePolicy 已設定為刪除。