【云计算】后起之秀Pulumi Vs 当代王者 Terraform

简介: 实现多云管理的基础设施即代码的工具包括`Terraform`、`Pulumi`等等,`Terraform`更为流行,使用更加广泛。在使用`Terraform`管理基础设施时,有一个最大的痛点:“配置语法太过简单,导致配置繁琐,需要额外地学习`HasiCorp`创造的表达式语言`DSL-HCL`”。作为后起之秀,也许使用`Pulumi`能帮助我们解决这个问题。

一、前言

实现多云管理的基础设施即代码的工具包括TerraformPulumi等等,Terraform更为流行,使用更加广泛。在使用Terraform管理基础设施时,有一个最大的痛点:“配置语法太过简单,导致配置繁琐,需要额外地学习HasiCorp创造的表达式语言DSL-HCL”。作为后起之秀,也许使用Pulumi能帮助我们解决这个问题。

二、what is Pulumi

Pulumi 是一个满足基础设施即代码思想的自动管理平台,使用 Python/TypeScript/Go/Dotnet等众多常见的开发语言编写好声明式的资源配置,就能实现一键创建/修改/销毁各类云资源。其可通过下载的 CLI、运行时、库和托管服务协同工作,以提供一种可靠的方式来供应、更新和管理云基础架构。下面的代码演示使用Python语言编程创建云资源,是不是对于研发人员很友好,可读性很强。

import pulumi
import pulumi_aws as aws
​
size = 't2.micro'
ami = aws.get_ami(most_recent="true",
                  owners=["137112412989"],
                  filters=[{"name":"name","values":["amzn-ami-hvm-*"]}])
​
group = aws.ec2.SecurityGroup('webserver-secgrp',
    description='Enable HTTP access',
    ingress=[
        { 'protocol': 'tcp', 'from_port': 22, 'to_port': 22, 'cidr_blocks': ['0.0.0.0/0'] }
    ])
​
server = aws.ec2.Instance('webserver-www',
    instance_type=size,
    vpc_security_group_ids=[group.id], # reference security group from above
    ami=ami.id)
​
pulumi.export('publicIp', server.public_ip)
pulumi.export('publicHostName', server.public_dns)

三、Pulumi Vs Terraform

3.1 两者渊源

PulumiTerraform 有很多相似之处,都满足通过编写代码的形式在任何云上创建、部署和管理基础设施。任何云包括国外的AWS、Azure、GCP,当然也包括国内的云,包括AliYun、TencentCloud、UCloud等等。

同时两者在GitHub上都提供了开源的社区版本,开源协议满足商业上的使用行为。Pulumi是站在Terraform Provider 肩膀上发展而来的,它干了一件聪明的事情,也就是提供了 pulumi-tf-provider-boilerplate工具进行重新打包,这个工具充当了bridge的作用。

3.2 两者区别

根据 Pulumi 官方介绍,PulumiTerraform 两者在语言支持,状态管理,Provider支持,开源协议上存在着主要的区别。

【语言支持】 Pulumi 支持的语言包括:

  • Python
  • TypeScript
  • JavaScript
  • Go
  • C#
  • F#
  • VB
  • ...

Terraform正式支持的语言只包括HCL,Json声明式语言,如果要把实验性的Terraform-cdk产品算上的话,那在未来它还会支持:

  • TypeScript
  • Python
  • Java
  • C#
  • Go

下面这张图很好的说明了两者目前在语言上支持上的差异。

【状态,可视化管理】

从根本上来说,状态管理是terraform 用户体验很是差的一环,因为没有提供相应的功能,客户只能本身在开源社区里找解决方案。而对于pulumi,因为其使用各开发语言实现,能够很是方便地在代码里面使用各种数据库进行数据操作。同时terraform对于状态的展示,以及部署过程中可视化展现,几乎未做这方面的支持,用户体验不佳。而对于pulumi,其目标明确地支持状态管理和可视化操作,切实地解决了用户的痛点。

除此上面提到的状态管理,pulumi还做到了对状态中的隐私内容进行真正的加密,这一点很关键。

【Provider 支持】

上文也说到,Pulumi通过转换工具支持了terraform 所有的Provider。同时Pulumi 深度支持K8s等云原生技术,支持了Terraform无法表达的高级部署场景。 这包括Prometheus-based canariesautomatic Envoy sidecar injection等等。云计算浪潮之后云原生是一种趋势,可以清晰地认识到,Pulumi深耕于云原生,励志成为下一代DevOps工具的领头羊。

【开源协议】

Terraform 使用较弱的 Copyleft Mozilla Public License 2.0。 相反,Pulumi 开源项目使用宽松且商业友好的 Apache License 2.0。其开源内容包括核心 Pulumi 存储库、所有开源 Pulumi 资源提供程序(例如 Azure Native 提供程序)、转换实用程序(如 tf2pulumi)以及其他有用的项目。

【可重复使用的组件】

由于拥有真正的语言,我们可以构建更高层次的抽象。使用TypeScript等其它语言构建抽象,重复使用模块,相较于使用YAML的文内容,有了大幅度地减少。

【Lambda无服务功能】

可以用自身熟悉的语言使用lambda表达式来编写无服务器函数,而不需要一行YAML或其它声明式语言。

import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
​
const example = new aws.lambda.FunctionEventInvokeConfig("example", {
    functionName: aws_lambda_alias.example.function_name,
    destinationConfig: {
        onFailure: {
            destination: aws_sqs_queue.example.arn,
        },
        onSuccess: {
            destination: aws_sns_topic.example.arn,
        },
    },
});

除了上面提到的内容,Pulumi在重命名重构上也支持的相当好,并且也提供了Tranformation 的机制,允许我们用代码定义对资源定义的修改逻辑。

四、总结

通过上面的分析比较,pulumi有这么多突出的优点,那是不是我们必然选择pulumi作为我们的Iac工具了。那确实不一定!首先我们分析比较两个关键词的Google热度指数(2021年10月10日),蓝色曲线代表terraform ,红色曲线代表Pulumi。

图片.png

结果很明显,terraform 作为一个2014年开始构建生态的产品,是比作为2017年初出茅庐的Pulumi有着更多的热度。Pulumi的生态比terraform 还差得远。而且terraform 也许会很快上市,到时候对Pulumi就是资本的降维打击了。所以选用Pulumi要慎重考虑。

图片.png

然后同时分析Github的关注度(2021年10月10日),总的来说terraform的关注度是远远高于Pulumi,这一点也侧面印证了Google热度指数。但对于这个结果也要辩证地看待,毕竟Pulumi作为一个后起之秀,就目前的关注度,社区活跃度已经是相当不错了。

同时从另一方面来说,Pulumi提供了开发人员熟悉的代码描述资源,表现力足够,但会不会难以阅读和调试?这样Dev + Ops真的会难以分开了。这样组织架构也会发生调整,研发和运维一体了。到底这个变化是好还是坏,就看团队怎么辩证的看待了。

相关文章
|
存储 Devops 测试技术
【云计算】打破神话:容器vs虚拟机
【云计算】打破神话:容器vs虚拟机
|
机器学习/深度学习 人工智能 边缘计算
云计算人工智能vs边缘人工智能:2022年选择哪个更好?
云计算人工智能vs边缘人工智能:2022年选择哪个更好?
|
存储 云安全 监控
云计算vs.内部部署软件的辩论
如今,每当企业部署新软件时,他们都会面临一个两难的境地:他们应该使用基于云计算的软件即服务(SaaS)解决方案,还是应该在自己的数据中心内部部署应用程序?对于越来越多的组织来说,云计算已经成为一种可行的选择,至少对于某些需求而言。在RightScale Cloud of 2018年调查报告中,96%的受访者表示他们正在使用某种形式的云计算。
229 0
|
15天前
|
存储 安全 网络安全
云计算时代的网络安全挑战与策略
【10月更文挑战第34天】在数字化转型的浪潮中,云计算作为一项关键技术,正深刻改变着企业的运营方式。然而,随着云服务的普及,网络安全问题也日益凸显。本文将探讨云计算环境下的安全挑战,并提出相应的防护策略。
|
5天前
|
监控 安全 网络安全
云计算环境下的网络安全防护策略
在云计算的浪潮下,企业和个人用户纷纷将数据和服务迁移到云端。这种转变带来了便利和效率的提升,同时也引入了新的安全挑战。本文将探讨云计算环境中网络安全的关键问题,并介绍一些实用的防护策略,帮助读者构建更为安全的云环境。
|
11天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全策略
【10月更文挑战第39天】随着云计算的飞速发展,越来越多的企业和个人将数据和服务迁移到云端。然而,随之而来的网络安全问题也日益突出。本文将从云计算的基本概念出发,深入探讨在云服务中如何实施有效的网络安全和信息安全措施。我们将分析云服务模型(IaaS, PaaS, SaaS)的安全特性,并讨论如何在这些平台上部署安全策略。文章还将涉及最新的网络安全技术和实践,旨在为读者提供一套全面的云计算安全解决方案。
下一篇
无影云桌面