如何修复漂移的 AWS CloudFormation 堆栈?
Posted
技术标签:
【中文标题】如何修复漂移的 AWS CloudFormation 堆栈?【英文标题】:How to fix a drifted AWS CloudFormation stack? 【发布时间】:2019-06-20 12:18:30 【问题描述】:我修改了一个 BackendECS 服务,它现在“漂移”了,但没有关于如何解决这个问题的信息?这让我发疯?关于如何解决这个问题的零信息?
【问题讨论】:
CloudFormation 只要有微小的变化就会吓坏,通常甚至无法检测到它。建议:使用 Terraform。我在 CloudFormation 上浪费了很多时间,最后我还是回到了 Terraform。 【参考方案1】:Amazon AWS 允许通过其“漂移检测”功能对漂移堆栈进行故障排除。
可以通过导航到 CloudFormation > 选择堆栈 > 操作 > 检测当前堆栈的漂移来访问漂移检测
在此处了解更多信息:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/detect-drift-stack.html
使用此诊断工具,您可以准确查看您的 AWS 配置与 cloudformation 预期的状态相比有何不同。
有几种方法可以解决这个问题。
1) 如果您通过基础架构即代码服务进行了自动更新,请回滚您的更改
2) 如果您手动更新了 ECS 服务,请将设置更改回预期状态,如漂移检测中所示。一旦您的系统恢复到预期状态,您的堆栈就会正常运行
3) 删除当前堆栈资源并重新创建它 - 这是解决此问题的危险方法,因为您将丢失更新历史记录和回滚状态。
【讨论】:
它说我的 AWS::ECS::Service 已被修改,但是我无法更新 ECS 服务,它不断搜索以前删除的 ECS 服务 我在尝试解决我是否可以从某人手动调整 S3 存储桶中的设置以及我所做的每个模板编辑以及按下“更新堆栈”后它一直说“不已执行更新”。也许未来的版本只会让我们撤消漂移差异所在的位置? 如何重新创建已删除的内容?它会有不同的id。他们为什么要制造这些无用的功能? 还有第四个选项,通过importing resources修复漂移。 如果删除一些资源 - 只有 asg 可以重新创建它,其他的 - 只是在漂移中被“删除”,没有自动修复。 Simper - 删除堆栈并重新创建它(当它在删除时中断 - 我们在菜单中有“跳过损坏的步骤”)。或者 - 非常难 - 下载 tempkate,从已删除的部分中清除它,更新,然后恢复旧模板。我现在就做——浪费了 8 个小时。【参考方案2】:我在 cloudformation 中遇到了类似的问题,同样,仍然缺乏关于如何将实例“还原”回模板指定内容的文档。我发现注释掉漂移的实体允许 cloudformation “删除”它,然后取消注释它会恢复到所需的状态。
也就是说,我将支持仅使用 terraform 的动议,因为每当您执行应用时,强制执行模板是默认行为。
【讨论】:
一个非破坏性修复问题的好解决方案,很好的想法,感谢分享......效果很好。以上是关于如何修复漂移的 AWS CloudFormation 堆栈?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AWS CloudFormation 创建 Amazon VPC?
如何修复 aws 区域错误“ValueError:必须使用 SageMaker 支持的区域设置本地 AWS 配置”