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

2023-11-11 03:50

本文主要是介绍【云计算】后起之秀Pulumi Vs 当代王者 Terraform,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


theme: condensed-night-purple

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

一、前言

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

这篇关于【云计算】后起之秀Pulumi Vs 当代王者 Terraform的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/387357

相关文章

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

poj 1113 凸包+简单几何计算

题意: 给N个平面上的点,现在要在离点外L米处建城墙,使得城墙把所有点都包含进去且城墙的长度最短。 解析: 韬哥出的某次训练赛上A出的第一道计算几何,算是大水题吧。 用convexhull算法把凸包求出来,然后加加减减就A了。 计算见下图: 好久没玩画图了啊好开心。 代码: #include <iostream>#include <cstdio>#inclu

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

uva 11178 计算集合模板题

题意: 求三角形行三个角三等分点射线交出的内三角形坐标。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <

XTU 1237 计算几何

题面: Magic Triangle Problem Description: Huangriq is a respectful acmer in ACM team of XTU because he brought the best place in regional contest in history of XTU. Huangriq works in a big compa

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

计算数组的斜率,偏移,R2

模拟Excel中的R2的计算。         public bool fnCheckRear_R2(List<double[]> lRear, int iMinRear, int iMaxRear, ref double dR2)         {             bool bResult = true;             int n = 0;             dou

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

Java - BigDecimal 计算分位(百分位)

日常开发中,如果使用数据库来直接查询一组数据的分位数,就比较简单,直接使用对应的函数就可以了,例如:         PERCENT_RANK() OVER(PARTITION BY 分组列名 ORDER BY 目标列名) AS 目标列名_分位数         如果是需要在代码逻辑部分进行分位数的计算,就需要我们自己写一个工具类来支持计算了 import static ja

OpenStack离线Train版安装系列—2计算节点-环境准备

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版