刪除初始部署的堆疊後,如何解決在重新部署 CDK 程式碼時收到的「已存在」錯誤?
我想解決在重新部署 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 範本,然後檢查 DeletionPolicy 和UpdateReplacePolicy 是否設定為 Delete:
cdk synth
相關內容
- 已提問 9 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 10 個月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前