簡體   English   中英

如何在 cloudformation 堆棧更新期間刪除資源而不將其刪除

[英]How to remove a resource without deleting it during a cloudformation stack update

我有一個 cloudformation 模板,它創建一個 S3 存儲桶作為 cloudformation 堆棧的一部分。 在我的模板的新版本中,我計划將我的應用程序從 S3 遷移到 EFS。

有沒有辦法從模板中刪除 S3 存儲桶資源而不將其刪除? 理想情況下,我希望我的老用戶在升級后可以使用 s3 存儲桶,但新用戶根本沒有它。 看起來 DeletionPolicies 在這里可以提供幫助,但它的文檔說它只適用於堆棧刪除,而不適用於升級。

將詳細說明 user3470009 的回答。

DeletionPolicy主要廣告目的是在DeletionPolicy堆棧時保留資源。 AWS 文檔DeletionPolicy ,它幾乎是事后提到的,它在從堆棧中DeletionPolicy資源期間也起作用:

請注意,此功能也適用於導致資源從堆棧中刪除的堆棧更新操作。 例如,如果您從堆棧模板中移除資源,然后使用模板更新堆棧。

因此,從堆棧中刪除資源而不刪除實際資源的工作流程是:

  1. "DeletionPolicy" : "Retain"到 CF 模板中的資源聲明
  2. 通過在 UI 中保存或在 CLI 或您使用的任何其他工具上運行aws cloudformation來應用更改
  3. 在 UI 中檢查您的資源是否有正確的更改。 關於 CF 何時不更新元數據有一些問題。 請參閱上面的文檔鏈接
  4. 從模板中刪除資源
  5. 應用更改。 查看事件日志以查看它是否顯示DELETE_SKIPPED

2018-10-15T15:32:32.956Z HostedZone DELETE_SKIPPED

設置“保留”的 DeletionPolicy 將導致存儲桶本身在刪除資源的堆棧更新后保留。

當您從模板中移除資源並從此模板更新堆棧時,資源將被刪除。 沒有辦法避免這種情況。

由於您現有的用戶將繼續使用 S3 存儲桶,因此我建議在您的模板中保留該存儲桶。 將桶從您的產品中完全取出后將其取出。

如果需要,您可以版本化您的模板(舊版與新版)。

如果您絕對需要從模板中刪除存儲桶,則可以使用漏洞。 CloudFormation 刪除存儲桶時,存儲桶必須為空。 如果它不為空,則應保留存儲桶並將其從堆棧中刪除。 你可以試驗一下,看看它是否適合你。 如果它在測試中有效,那么您可以嘗試在生產中使用它。

我遇到了這個需要稍微改動的問題。 我需要將我的存儲桶提取到另一個堆棧中,並且無法在移動中刪除它。 這個方法效果很好:

  1. 使用相關存儲桶創建一個新堆棧。 (注意:您現在有 2 個堆棧引用同一個存儲桶)
  2. 從原始堆棧中刪除存儲桶。 資源會從原始堆棧中刪除,但不會從 S3 中刪除,因為它仍在您的新堆棧中引用。

我還測試了上面 Houser 的響應,並確認如果存儲桶包含文件,則不會刪除該存儲桶。 雖然這有效,但它確實在完成之前嘗試刪除存儲桶 3 次(並且每次都報告錯誤)。 遷移到新堆棧不會引發任何錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM