服务器 Pulumi 配置教程:从安装到部署一台云主机
Pulumi 是一款用通用编程语言编写基础设施即代码(IaC)的工具,你可以用 TypeScript、Python、Go 等语言描述云服务器、网络和安全组,再通过命令行创建和更新资源。
这篇教程面向零基础用户,带你在一台 Linux 机器上完成 Pulumi 安装、凭据配置,并用 TypeScript 创建一台云主机,最后验证部署结果。
开始之前需要准备什么
Pulumi 本身只是一个客户端工具,它负责把你的代码转换成云厂商的 API 调用。
因此你需要准备三样东西:
- 一台可以联网的 Linux 服务器或本地 Linux 环境,本文以 Ubuntu 22.04 为例,其他发行版命令略有差异。
- 一个云厂商账号,并且已经开通访问密钥(Access Key / Secret Key),本文用通用写法,具体字段名以你使用的云厂商控制台为准。
- 一个 Pulumi 账号,用来保存部署状态。免费的个人账号即可满足学习和单机部署需求,具体额度以官网当前页面为准。
先在终端确认基础环境:
uname -a
node -v
如果没有 Node.js,可以先用系统包管理器安装,例如 sudo apt update && sudo apt install -y nodejs npm。
Pulumi 的 TypeScript 模板依赖 Node.js,版本建议不要太旧。
安装 Pulumi 并完成登录
官方提供了一键安装脚本,适合快速体验:
curl -fsSL https://get.pulumi.com | sh
安装完成后重新加载环境变量,或者直接执行:
export PATH=$PATH:$HOME/.pulumi/bin
pulumi version
能输出版本号就说明安装成功。
随后登录 Pulumi 托管状态的后端:
pulumi login
命令会提示你打开浏览器获取 Access Token,把 Token 粘贴回终端即可。
如果你在无法打开浏览器的服务器上操作,可以先在本地生成 Token,再用 pulumi login 粘贴。
如果你不想把状态放在 Pulumi 云端,也可以使用对象存储作为后端,例如 pulumi login s3://你的桶名。这种方式需要额外配置存储凭据,初学者先用默认方式更容易跑通。
配置云厂商凭据和项目初始化
Pulumi 通过环境变量读取云厂商密钥。
不同厂商的变量名不同,常见形式如下,请替换成你实际使用的厂商文档中给出的名称:
export AWS_ACCESS_KEY_ID="你的AccessKey"
export AWS_SECRET_ACCESS_KEY="你的SecretKey"
export AWS_REGION="ap-southeast-1"
为了让配置在每次打开终端时都生效,可以把上面几行写进 ~/.bashrc,然后执行 source ~/.bashrc。
注意不要把真实密钥提交到 Git 仓库,生产环境更推荐使用临时凭据或密钥管理服务。
接着创建一个项目目录并初始化:
mkdir pulumi-demo && cd pulumi-demo
pulumi new typescript
命令会依次询问项目名、描述和堆栈名。
堆栈可以理解为同一套代码的不同环境,例如 dev 和 prod。
初学者先创建一个 dev 堆栈即可。
初始化完成后,目录里会出现 index.ts 和 package.json。
用 TypeScript 创建一台云主机
打开 index.ts,把内容替换成下面这段示例。
它创建一台最小规格的云主机,并输出公网 IP:
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
const server = new aws.ec2.Instance("demo-server", {
ami: "ami-xxxxxxxx",
instanceType: "t3.micro",
tags: { Name: "pulumi-demo" },
});
export const publicIp = server.publicIp;
其中 ami 需要替换成你目标区域里可用的镜像 ID,instanceType 也要确认该区域支持。
写好后安装依赖并预览变更:
npm install
pulumi preview
preview 只展示将要创建的资源,不会真正扣费或改动线上环境。
确认无误后再执行:
pulumi up
命令会再次列出变更清单,输入 yes 回车后开始创建。
看到 publicIp 输出,说明服务器已经创建成功。
容易踩坑的地方
密钥没有生效:如果 pulumi up 报认证失败,先在当前终端执行 echo $AWS_ACCESS_KEY_ID 确认变量存在。
环境变量只在当前会话有效,新开终端需要重新加载。
镜像 ID 不匹配:AMI 是分区域的,复制其他区域的 ID 会报找不到镜像。
请到你实际使用的区域控制台查询可用镜像。
资源创建后忘记清理:云主机按小时计费,测试完成后执行 pulumi destroy 删除资源,避免持续产生费用。
删除前确认没有需要保留的数据。
状态文件冲突:多人协作时不要各自在本地修改同一堆栈,建议统一使用 Pulumi 云端状态或共享后端,减少状态不一致的问题。
如何验证部署结果
验证分两步。
第一步看 Pulumi 输出:
pulumi stack output publicIp
能打印出 IP 地址,说明资源状态已记录。
第二步登录云厂商控制台,在实例列表里找到名为 pulumi-demo 的服务器,确认状态为运行中。
如果需要对公网访问,还要检查安全组是否放行了对应端口。
常见疑问
Pulumi 和 Terraform 有什么区别? 两者都是基础设施即代码工具,Terraform 使用 HCL 配置语言,Pulumi 支持用通用编程语言编写。
如果你团队已经熟悉 TypeScript 或 Python,Pulumi 的学习成本可能更低;
如果只需要简单的声明式配置,Terraform 的生态和资料也很成熟。
一定要用 Pulumi 云端保存状态吗? 不一定。
你可以用 S3、Azure Blob 等对象存储作为后端,也可以自建后端。
云端方式省去维护成本,自建方式更适合对数据位置有要求的场景。
免费账号够用吗? 个人学习和单机部署通常够用,但团队协作、审计等功能可能涉及付费计划。
具体额度和限制请以 Pulumi 官网当前说明为准。
到这里,你已经完成了服务器 Pulumi 配置教程的核心流程:安装客户端、配置凭据、初始化项目、用 TypeScript 创建云主机并验证结果。
建议先在测试账号中完整跑一遍,再根据实际业务调整实例规格、网络和安全组配置。