在Terraform和AWS CloudFormation之间进行决策时,通常与Terraform相关的一个优势是计划(terraform plan
)和执行(terraform apply
)的分离。
我最近听说过CloudFormation的create-change-set功能,其描述如下:
创建将应用于堆栈的更改列表,以便您可以在执行更改之前查看更改。
在AWS文档的Updating Stacks Using Change Sets中,它们描述了推荐的更新过程。
现在我想知道:
背景:强调分离作为一个重要优势的例子:
Official comparison on terraform.io:
Terraform还通过使用执行计划的概念将计划阶段与执行阶段分开。通过运行terraform计划,刷新当前状态并查询配置以生成行动计划。该计划包括要采取的所有行动:将创建,销毁或修改哪些资源。操作员可以对其进行检查,以确保其完全符合预期。 [...] Terraform允许操作员自信地应用更改,因为他们确切地知道事先会发生什么。
(可能过时)Blog post from 2014比较Terraform和CloudFormation:
基础设施更新:这是Terraform的绝对杀手级功能。 Terraform有一个单独的计划和执行阶段。规划阶段显示将创建,修改和销毁哪些资源。它使您可以完全控制更改将如何影响现有环境,这非常关键。这是我们推进Terraform的主要原因之一。 CloudFormation不会向您显示它将对环境进行哪些更改。
答案 0 :(得分:1)
CloudFormation Change Set是保存在计划文件中的Terraform计划的类似对象。它的核心功能是相同的:检查报告到达新的所需状态所需的更改,然后应用这些更改。
最初创建Terraform时,CloudFormation没有此功能。您发现的文档在编写时是准确的,但the release of Change Sets在这方面没有显着差异。
官方比较中涵盖的其他差异仍然适用:
Terraform同样使用配置文件来详细说明 基础架构设置,但它与云无关,它更进一步 并允许组合多个提供者和服务 组成。例如,Terraform可用于协调AWS和 OpenStack集群同时启用,同时支持第三方提供商 像Cloudflare和DNSimple一样被集成以提供CDN和DNS 服务。这使Terraform能够表示和管理整个 基础设施及其配套服务,而不仅仅是 存在于单个提供者中的子集。它提供单一 统一语法,而不是要求运营商使用独立和 每个平台和服务的不可互操作的工具。