AWS CloudFormation 创建堆栈与部署

Posted

技术标签:

【中文标题】AWS CloudFormation 创建堆栈与部署【英文标题】:AWS CloudFormation create-stack vs deploy 【发布时间】:2018-10-01 09:36:56 【问题描述】:

有人可以向我清楚地解释 AWS CLI Cloudformation create-stackdeploy 命令之间的区别和优先级吗?对我来说,他们似乎在做同样的事情并部署资源。

为什么当您从 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 只是CreateChangeSetCreateStackUpdateStack 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 资源整合到 CloudFormation 堆栈中

AWS cloudFormation LAMP 堆栈失败

AWS CLI 与控制台和 CloudFormation 堆栈

AWS Cloudformation错误:由于递归导入而导致的递归锁定

如何保护 AWS CloudFormation 堆栈不被删除?