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

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

一、前言

实现多云管理的基础设施即代码的工具包括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真的会难以分开了。这样组织架构也会发生调整,研发和运维一体了。到底这个变化是好还是坏,就看团队怎么辩证的看待了。

猜你喜欢

转载自juejin.im/post/7018373444928536584