AWS CloudFormation 创建堆栈与部署
Posted
技术标签:
【中文标题】AWS CloudFormation 创建堆栈与部署【英文标题】:AWS CloudFormation create-stack vs deploy 【发布时间】:2018-10-01 09:36:56 【问题描述】:有人可以向我清楚地解释 AWS CLI Cloudformation create-stack
和 deploy
命令之间的区别和优先级吗?对我来说,他们似乎在做同样的事情并部署资源。
为什么当您从 cli 运行部署命令时,创建堆栈没有可执行的更改集,而文档说:
通过创建然后执行更改集来部署指定的 AWS CloudFormation 模板。该命令在 AWS CloudFormation 执行更改集后终止。如果您想在 AWS CloudFormation 执行之前查看更改集,请使用 --no-execute-changeset 标志。
【问题讨论】:
【参考方案1】:create-stack
只能在您知道要创建新堆栈时使用。如果要更新堆栈,则必须使用不同的命令等。如果您正在编写 (ug) 批处理文件来帮助运行 cloudformation,这可能会很痛苦。
deploy
是更好地利用变更集的功能 - 无需知道堆栈是否存在,您只需运行 deploy,该工具就会找出它需要做什么。使用--no-execute-changeset
,如果您决定要在应用更改之前查看更改,它实际上会为您提供所需的命令。
看起来这是在 2016 年 11 月推出的,可能在更改集发布的时候。
【讨论】:
是的,你是对的,那么我的最后一个问题呢:为什么当你从 cli 运行部署命令时,创建堆栈没有可执行的更改集?【参考方案2】:我假设deploy
只是CreateChangeSet
、CreateStack
和UpdateStack
api 方法周围的“语法糖”。
请注意,虽然deploy
is in the CLI,但它是not in the API reference。
我认为deploy
是首选,除非需要明确审查变更集。如果不使用deploy
,您可能需要create-change-set
,然后决定是创建还是更新堆栈。在这种情况下,deploy 就像一个堆栈“upsert”。
我不再懒惰并检查了代码,是的 - deploy
最终是从 CLI 使用 cloudformation 的更好方法。实现是here 和here。请注意,截至今天,deploy
per this issue 不存在控制回滚行为的能力。
【讨论】:
以上是关于AWS CloudFormation 创建堆栈与部署的主要内容,如果未能解决你的问题,请参考以下文章
将现有 AWS 资源整合到 CloudFormation 堆栈中
AWS CLI 与控制台和 CloudFormation 堆栈