Pulumi

Pulumi

Pulumi

pulumi是什么

pulumi通常和terraform进行对比,所以它是一个iac工具,为什么有了 terraform还会有pulumi?我觉得pulumi可以做很好的补充,对于开发者来说会 多一个选择,并且terraform被IBM收购,许可证改变,谁知道后续会发生啥呢? 而我们作为云平台的使用者,多了解这些工具肯定是没问题的。

有的人可能会问,为什么我不直接调用各个云的sdk?当然可以!只是调用sdk是 一个动作,而iac是代码即技术设施,你编写的代码会转化成若干基础设施,并 且非常方便迁移到另一个云的,而无需关注很多细节。有点类似ansible和 puppet。通过大量的dsl把api隐藏了,你只需要关注里面的属性和对象,然后按 照provider提供的方式进行编写就好了。

下面我将演示下国内常用的阿里云和腾讯云的pulumi的用法。

首先标记下官方文档 https://www.pulumi.com/docs/

安装

在官方文档这里安装说明直接进行安装即可 https://www.pulumi.com/docs/install/

但是我使用curl的方式实在太慢了,于是选择下载里面的二进制格式, 这里我 建议你下载最新版本,目前没有进入debian源,还是比较遗憾的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
➜  /tmp wget https://get.pulumi.com/releases/sdk/pulumi-v3.114.0-linux-x64.tar.gz
--2024-04-30 10:27:35--  https://get.pulumi.com/releases/sdk/pulumi-v3.114.0-linux-x64.tar.gz
正在解析主机 get.pulumi.com (get.pulumi.com)... 99.84.238.96, 99.84.238.106, 99.84.238.101, ...
正在连接 get.pulumi.com (get.pulumi.com)|99.84.238.96|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:159768914 (152M) [application/x-tar]
正在保存至: “pulumi-v3.114.0-linux-x64.tar.gz”

pulumi-v3.114.0-linux-x64.tar.gz        100%[=============================================================================>] 152.37M  11.3MB/s  用时 15s     

2024-04-30 10:27:51 (10.1 MB/s) - 已保存 “pulumi-v3.114.0-linux-x64.tar.gz” [159768914/159768914])

➜  /tmp tar xf pulumi-v3.114.0-linux-x64.tar.gz 
➜  /tmp ls pulumi/
pulumi                         pulumi-language-dotnet  pulumi-language-nodejs       pulumi-language-yaml           pulumi-watch
pulumi-analyzer-policy         pulumi-language-go      pulumi-language-python       pulumi-resource-pulumi-nodejs
pulumi-analyzer-policy-python  pulumi-language-java    pulumi-language-python-exec  pulumi-resource-pulumi-python
➜  /tmp sudo mv pulumi/* /usr/local/bin
➜  /tmp pulumi version
v3.114.0

pulumi工作方式

如果你用过terraform, 我想说其实是类似的 ../../images/pulumi/concepts.png◎ ../../images/pulumi/concepts.png

编写或者生成iac代码,通过cli把代码传递给language hosts, 调用对应的 provider进行实际状态的同步(增删改查),最终把state保存在一个地方,方 便后续的diff和一致性。更多的你可以参考pulumi concepts

在pulumi的工作目录里面,基本按照这个层级,

project->stack->resource

项目最大,可以在里面放很多stack, 一般是放类似分支的部分,比如dev, staging, production。

在stack里面放实际的resources,比如ec2, s3等等。

多个资源也可以合并,在pulumi里面叫component。

先了解导入资源

具体可以参考这个链接 https://www.pulumi.com/docs/using-pulumi/adopting-pulumi/import/

一旦了解了导入,我们就可以很快的进行编写和参考,如果你用过 terraform import 应该会了解这个

导入以后也可以在这个基础上进行额外的修改

aliyun使用

转换

https://www.pulumi.com/docs/using-pulumi/adopting-pulumi/

一般我个人是不太喜欢转换的,因为毕竟原来的工具的特性不是转换工具能大部 分覆盖住的,转换也会让个人丢失不少细节,在下次修改的时候不方便,不过如 果转换确实能基本可用,那也是可以使用下看看的。