簡體   English   中英

部署 CloudFormation 模板,而不僅僅是變更集

[英]Deploy CloudFormation template, not just the changeset

語境

我手動刪除了 aws 帳戶中的堆棧,因為特定資源使用的是過時版本的 Node。 現在我正在嘗試手動重新部署堆棧。 但我收到<resource type> does not exist errors 到目前為止,我的想法是 CF 在某處緩存那些已刪除的資源及其關聯的名稱/服務名稱。 然后,當我部署堆棧時,會在已存在已刪除資源的地方創建一個變更集。 然后當執行變更集時,它找不到已刪除的資源,它認為這些資源仍然存在,導致InvalidServiceName錯誤。

問題

有沒有辦法直接部署整個 CF 模板,而不是變更集?

努力

我已經嘗試為變更集創建“虛擬”資源然后覆蓋。 困難在於服務名稱是動態的,因此變更集仍然找不到“虛擬”資源,因為服務名稱不同。

CloudFormation持有一個內部state的堆棧,如果你手動更改或刪除了一些資源,這不一定符合實際情況。 對於某些 AWS 服務,您可以通過查看堆棧漂移來了解這個 state 有何不同。 我還想指出“應用堆棧而不是變更集”的概念是不可能的。 CloudFormation 始終使用變更集,即使它最初部署堆棧時也是如此,盡管這有時對最終用戶來說是模糊的。

我看到兩個可能的選項來解決這個問題。 第一種是刪除整個堆棧並完全重新創建它。 CloudFormation 第一次可能會出錯,因為它無法刪除某些資源,但您可以在第二次嘗試時保留這些資源。 如果您在第二次嘗試中 select 已經刪除的資源,則應刪除堆棧,然后您可以重新創建它。

根據情況,您還有第二種選擇。 您可以僅從堆棧中刪除已刪除的資源(例如,通過注釋掉它們並更新堆棧),然后重新部署並再次取消注釋行。 如果這不起作用,因為找不到資源,您可能會通過添加DeletionPolicy集以在第一次更新中retain獲得更好的運氣,這將防止 CloudFormation 實際刪除(不存在的)資源。

暫無
暫無

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

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