繁体   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