2

关于IaC,Terraform 和 CloudFormation哪个更好?

 1 year ago
source link: https://www.51cto.com/article/717809.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

关于IaC,Terraform 和 CloudFormation哪个更好?

作者:开源云中文社区 2022-09-02 08:28:44
在管理AWS资源时,你可能会发现很难在Terraform和CloudFormation之间做出选择。希望这篇文章能为Terraform与CloudFormation的讨论提供参考。
92301c959be0bbba0d73718c27a576c0eebf2e.jpg

顾名思义,IaC(基础设施即代码)是一个使用代码创建和管理基础设施的过程。编码的基础设施易于扩展、维护、记录和复制。IaC有一些挑战,但自动资源调配和配置比手动部署更快更好。

云提供商通常维护一个IaC工具,专门支持其云平台上的资源部署,例如,部署AWS资源的AWS CloudFormation。然而,还有其他独立于任何云提供商的工具。一个这样的IaC工具是Terraform。

在管理AWS资源时,你可能会发现很难在Terraform和CloudFormation之间做出选择。希望这篇文章能为Terraform与CloudFormation的讨论提供参考。

什么是AWS CloudFormation?

AWS CloudFormation是一种原生AWS服务,使用户能够创建、配置和管理Amazon资源,从而更容易管理、监控和测试基于AWS的基础设施。

什么是Terraform?

Terraform是由HashiCorp维护和开发的一个流行的开源云不可知IaC工具。它允许通过连接多个云提供商来创建、更新和供应基础设施。

Terraform和CloudFormation之间的差异

让我们根据以下标准比较Terraform和CloudFormation:

第一:模块化

IaC的一个用例是允许重复性和快速供应的模块化。

Terraform模块是分配给执行一项任务的资源组,可用于类似的基础设施组件。你可以创建自定义模块并使用社区开发的模块。

CloudFormation的堆栈类似于模块,但灵活性较差。你可以将AWS配置作为堆栈导入和导出,但自动配置和嵌套堆栈隐藏了配置的详细信息。

第二:功能

Terraform为IaC带来了许多内置功能,可用于操作数据,并提供组合、转换或操作所提供值的可能性。Terraform的功能列表非常广泛,包括数字、字符串操作和文件系统。但是,不能创建自定义函数。

CloudFormation提供的功能不到15项,不足以管理大型基础设施。缺少内置函数会导致额外的工作——你必须在模板中创建自定义资源,并调用lambda功能来获取它们。

第三:代码语法

CloudFormation使用JSON和YAML,这在开发人员中很流行。因此,不存在(或更少的)学习曲线。Terraform的HashiCorp配置语言(HCL)语法可读且易于学习,但它仍然是一个“新事物”。

第四:云兼容性

Terraform和CloudFormation之间的一个显著区别是,Terraformer支持多个云和提供商,包括Google、AWS和Azure,而CloudFormation仅限于AWS资源。

Terraform支持所有AWS资源,但CloudFormation首先支持新的AWS资源类型,这一点我们不应感到惊讶。

第五:状态管理

Terraform有一个状态文件,它存储基础设施的信息,并作为所有Terraform资源的地图。默认情况下,状态存储在虚拟机或远程计算机上,因此协作几乎是不可能的。许多组织通过使用版本控制提供程序、Amazon S3 bucket或Spacelift的托管状态特性来采用GitOps方法。

使用CloudFormation,不必担心。AWS始终控制基础设施,并在状态发生任何变化时显示详细消息。

第六:回滚

Terraform和CloudFormation都确保不会意外删除其他应用程序中使用的资源。

CloudFormation在删除基础设施状态之前对其进行备份。如果更新或修改破坏了基础设施,它将自动回滚到上一个工作状态。

在Terraform中,你必须手动部署修复并将其滚动到以前的配置。但可以在应用更新后运行测试以检查输出。一旦发现输出令人满意,就可以提交更改。

第七:企业支持

如果你是新手,并且在整个基础设施中使用AWS,那么知识库和AWS专家支持将填补团队的技能缺口。知道AWS团队可以帮助解决任何问题,你可以安然入睡。

Terraform背后有一个庞大而活跃的社区,提供尽力而为的支持,但它带来了大量错误信息和基于上下文的解决方案。Hashicorp通过托管服务产品为HCL提供原生支持。

自动化基础设施即代码

AWS CloudFormation和Terraform是最流行的,但不是市场上唯一的IaC工具。微软提供了Azure Resource Manager和Bicep,而谷歌为Terraform提供了Deployment Manager和一流的支持。Pulumi采用独特的方法,支持各种编程语言来部署基础设施资源。传统的IT自动化解决方案,如Ansible、Chef和Puppet,也提供了一些IaC功能。但每种工具都有其自身的优点和复杂性。

许多组织构建自定义工具,后来发现这些自定义IaC语言难以扩展,存在合规性问题,并且维护成本高。

Spacelift是一个复杂的CI/CD工具,用于基础设施即代码,专门用于支持复杂的组织和基础设施需求。Spacelift支持多种IaC语言和框架,包括CloudFormation和Terraform,这允许你跨所有IaC语言标准化部署流程和合规性要求。

如果你的整个基础设施都在AWS上,并且没有计划使用多云,那么CloudFormation是一个更好的选择。如果你是AWS服务的新手,原生支持将是有益的。它由AWS构建,具有更快的AWS相关更新。它还使用JSON和YAML,因此与HCL相比没有学习曲线。

如果你正在使用或计划使用多云资源并希望更快的处理,Terraform是最佳选择。模块化方法允许创建可重用的模板,从而加快配置速度。此外,Terraform还提供了CloudFormation所缺乏的一系列功能,这有助于加快资源调配。

但什么最适合取决于你的要求。笔者建议在评估应用程序的基础设施策略后选择IaC工具。

原文链接:https://thenewstack.io/terraform-vs-cloudformation-which-is-better-for-you/​

责任编辑:赵宁宁 来源: 开源云中文社区

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK