IaC之Terraform 与Pulumi使用对比
IaC之Terraform 与Pulumi使用对比¶
一 简介¶
在iac(Infarftruce As Code)方面,老将Terraform已经利用yaml独领风骚很长时间,新军pulumi以其独到的代码实现资源编排一出场就光芒四射,对于不同场景,不同公司组织架构,以及不同的厂商范围,可以参考以下内容进行查看其区别。
二 功能¶
2.1 terraform¶
- 概念:Terraform 是 Hashicorp 公司开源的一种多云资源编排工具。使用者通过一种特定的配置语言(HCL, Hashicorp Configuration Language)来描述基础设施,由 Terraform 工具统一解析,构建资源之间的关系,生成执行计划,并通过调用各家云厂商的具体实现来完成整个基础设施生命周期的管理。
- 语言特性:声明式语言描述资源清单,代码不容易复用,对于yaml语法处理循环,条件判断,以及对字符串做处理等各种工作,而 terraform 在这一块的表现力太弱,使得代码写起来非常冗长,很多时候不得不复制粘贴。
- 状态管理困难:状态管理是 terraform 用户体验非常差的一环,由于没有提供相应的功能,客户只能自己在开源社区里找解决方案;
- 可视化:状态的展示,部署的过程其实都可能做很多可视化的事情,让整体体验更好一些,减少 devOps 犯错。然而,terraform 并没有做这方面的支持。
- 生态:生态完善,国内例如阿里/腾讯/华为/Ucloud/百度云等都支持,国外的基本都支持。
- DevOPS:需要单独集成到CI/CD中,配合其实现资源编排。
2.2 pulumi¶
- 概念:Pulumi是一个最新的基础设施即代码平台,他包含CLI、运行时、运行库、和一个托管服务,提供了一种强大的调配,更新和管理云基础架构的方式。 Pulumi替代了YAML或特定领域语言(DSL),而利用了现有的,熟悉的编程语言,包括TypeScript,JavaScript,Python,Go和.NET,以及它们的本机工具,库和包管理器。
- 语言特性:利用编程语言描述资源清单,容易编写类复用等,编程语言对于循环,判断处理具备良好的支持,且代码量很少,代码表现力强。
- 状态管理:由于使用各开发语言实现,可以非常方便的在代码里面使用各类数据库进行数据操作。
- 可视化:可以注册pulumi网站,可视化管理。
- 生态:生态处于发展阶段,国内目前仅阿里/支持,国外的基本都支持。
- DevOPS,直接在语言中实现,非常方便将业务逻辑代码和资源编排存放在代码库,适合于GitOPS。
三 支持范围¶
3.1 terraform 支持¶
3.2 pulumi支持¶
从上述两款产品的provider来看,Terraform的国内云厂商和支持的范围更广,pulumi国外支持的多,国内目前仅阿里有。
四 通用性¶
4.1 terraform¶
terraform使用HCL来的yaml来描述资源清单,虽然统一,但是对于负责场景编排,很难用yaml语言描述,且开发人员需要单独学习yaml语法。
4.2 pulumi¶
pulumi使用各类研发人员熟悉的开发语言来描述资源清单,可谓下一代IaC,不用开发人员来单独学习yaml语法,使用自己熟悉的语言来描述需要的清单即可,但是目前适配国内公有云不是很多,如果在范围内可以考虑。
五 结论¶
根据以上内容,terraform适应于多云集成场景,有更多的支持范围,但是对于语言实现和状态存储较为弱,需要单独学习yaml语法,适应于有单独Devops运维部门。
pulumi程序员更为喜欢,可以使用各种编程语言来做资源编排,但是适应场景目前仍处于发展阶段,创新性的公司没有运维,或运维很少非常适合,在未来pulumi适应更多的支持范围,配合serverless无缝结合,相信会有更好的场景实践。