pulumi/pulumi
GitHub: pulumi/pulumi
Pulumi 是一个允许开发者使用 TypeScript、Python、Go 等通用编程语言来定义、部署和管理云基础设施的现代化「基础设施即代码」平台。
Stars: 25029 | Forks: 1348
[](https://slack.pulumi.com/)
[](https://github.com/pulumi/pulumi/discussions)
[](https://npmjs.com/package/@pulumi/pulumi)
[](https://pypi.org/project/pulumi)
[](https://badge.fury.io/nu/pulumi)
[](https://godoc.org/github.com/pulumi/pulumi)
[](LICENSE)
# 以任意编程语言实现的基础设施即代码
**Pulumi 基础设施即代码** 是使用您已熟知并喜爱的编程语言,在任何云平台上构建和部署任何架构基础设施的最简单方式。使用您偏爱的语言和工具更快速地编码并交付基础设施,并通过 [Automation API](https://www.pulumi.com/docs/iac/using-pulumi/automation-api/) 将 IaC 嵌入到任何地方。
只需使用您喜欢的语言编写代码,Pulumi 就会自动在以下平台上配置和管理您的资源:
[AWS](https://www.pulumi.com/docs/iac/clouds/aws/),
[Azure](https://www.pulumi.com/docs/iac/clouds/azure/),
[Google Cloud Platform](https://www.pulumi.com/docs/iac/clouds/gcp/),
[Kubernetes](https://www.pulumi.com/docs/iac/clouds/kubernetes/), 以及 [120 多个提供商](https://www.pulumi.com/registry/),采用
[基础设施即代码](https://www.pulumi.com/what-is/what-is-infrastructure-as-code/) 方式。
跳过 YAML,使用您已熟知并喜爱的标准语言功能,如循环、函数、类
以及包管理。
例如,创建三个 Web 服务器:
```
const aws = require("@pulumi/aws");
const sg = new aws.ec2.SecurityGroup("web-sg", {
ingress: [{ protocol: "tcp", fromPort: 80, toPort: 80, cidrBlocks: ["0.0.0.0/0"] }],
});
for (let i = 0; i < 3; i++) {
new aws.ec2.Instance(`web-${i}`, {
ami: "ami-7172b611",
instanceType: "t2.micro",
vpcSecurityGroupIds: [sg.id],
userData: `#!/bin/bash
echo "Hello, World!" > index.html
nohup python -m SimpleHTTPServer 80 &`,
});
}
```
或者一个简单的无服务器计时器,每天上午 8:30 归档 Hacker News:
```
const aws = require("@pulumi/aws");
const snapshots = new aws.dynamodb.Table("snapshots", {
attributes: [{ name: "id", type: "S", }],
hashKey: "id", billingMode: "PAY_PER_REQUEST",
});
aws.cloudwatch.onSchedule("daily-yc-snapshot", "cron(30 8 * * ? *)", () => {
require("https").get("https://news.ycombinator.com", res => {
let content = "";
res.setEncoding("utf8");
res.on("data", chunk => content += chunk);
res.on("end", () => new aws.sdk.DynamoDB.DocumentClient().put({
TableName: snapshots.name.get(),
Item: { date: Date.now(), content },
}).promise());
}).end();
});
```
在 [pulumi/examples](https://github.com/pulumi/examples) 中提供了涵盖容器、无服务器和基础设施的
许多示例。
Pulumi 在 [Apache 2.0 许可证](https://github.com/pulumi/pulumi/blob/master/LICENSE) 下开源,支持多种语言和云平台,并且易于扩展。本仓库包含 `pulumi` CLI、语言 SDK 和核心 Pulumi 引擎,而各个单独的库位于它们自己的仓库中。
## 欢迎
* **[开始使用 Pulumi](https://www.pulumi.com/docs/iac/get-started/)**:使用 Pulumi 在 AWS、Azure、Google Cloud 或 Kubernetes 中部署一个简单的应用程序。
* **[学习](https://www.pulumi.com/tutorials/)**:遵循 Pulumi 学习路径,通过真实的示例学习最佳实践和架构模式。
* **[示例](https://github.com/pulumi/examples)**:浏览多种语言、云平台和场景下的多个示例,
包括容器、无服务器和基础设施。
* **[文档](https://www.pulumi.com/docs/)**:了解 Pulumi 概念,遵循用户指南,并查阅参考文档。
* **[Registry](https://www.pulumi.com/registry/)**:查找包含您所需资源的 Pulumi 包。将包直接安装到您的项目中,浏览 API 文档,然后开始构建。
* **[Secrets 管理](https://www.pulumi.com/product/secrets-management/)**:使用 Pulumi ESC 安全地管理所有云基础设施和应用程序中的 Secrets 扩散和配置复杂性。
* **[Pulumi 路线图](https://github.com/orgs/pulumi/projects/44)**:查看即将到来的季度计划工作,以及我们关注但尚未排期的选定议题积压。
* **[Community Slack](https://slack.pulumi.com/)**:加入 Pulumi Community Slack。欢迎所有的对话和问题。
* **[GitHub Discussions](https://github.com/pulumi/pulumi/discussions)**:提问或分享您使用 Pulumi 构建的成果。
## 入门指南
[](https://www.youtube.com/watch?v=6f8KF6UGN7g)
请参阅 [入门指南](https://www.pulumi.com/docs/iac/get-started/) 以在您选择的平台和云上
快速开始使用 Pulumi。
或者,以下步骤演示了如何在几分钟内部署您的第一个 Pulumi 程序,使用 AWS
无服务器 Lambda:
1. **安装**:
要安装最新的 Pulumi 版本,请运行以下命令(有关其他安装选项,请参阅完整的
[安装说明](https://www.pulumi.com/docs/iac/download-install/)):
curl -fsSL https://get.pulumi.com/ | sh
2. **创建项目**:
安装完成后,您可以使用 `pulumi new` 命令开始:
mkdir pulumi-demo && cd pulumi-demo
pulumi new serverless-aws-typescript
`new` 命令为所有语言和云平台提供[模板](https://github.com/pulumi/templates/)。不带参数运行它,它会提示
您可用的项目。此命令创建一个用 TypeScript 编写的 AWS Serverless Lambda 项目。
3. **部署到云端**:
运行 `pulumi up` 将您的代码部署到云端:
pulumi up
这将创建运行代码所需的所有云资源。只需对项目进行编辑,随后的
`pulumi up` 将计算最小差异以部署您的更改。
4. **使用您的程序**:
既然代码已部署,您就可以与它交互。在上面的示例中,我们可以 curl 该 endpoint:
curl $(pulumi stack output url)
5. **访问日志**:
如果您使用容器或函数,Pulumi 的统一日志命令将显示您的所有日志:
pulumi logs -f
6. **销毁您的资源**:
完成后,您可以删除程序创建的所有资源:
pulumi destroy -y
要了解更多信息,请前往 [pulumi.com](https://pulumi.com/) 获取更多信息,包括
[教程](https://www.pulumi.com/tutorials/)、[示例](https://github.com/pulumi/examples),以及
核心 Pulumi CLI 和[编程模型概念](https://www.pulumi.com/docs/iac/concepts/) 的详细信息。
## 平台
### 语言
| | 语言 | 状态 | 运行时 | 版本 |
| -- | -------- | ------ | ------- | -------- |
|
| [JavaScript](https://www.pulumi.com/docs/iac/languages-sdks/javascript/) | 稳定版 | Node.js | [Current、Active 和 Maintenance LTS 版本](https://nodejs.org/en/about/previous-releases) |
|
| [TypeScript](https://www.pulumi.com/docs/iac/languages-sdks/javascript/) | 稳定版 | Node.js | [Current、Active 和 Maintenance LTS 版本](https://nodejs.org/en/about/previous-releases) |
|
| [Python](https://www.pulumi.com/docs/iac/languages-sdks/python/) | 稳定版 | Python | [受支持的版本](https://devguide.python.org/versions/#versions) |
|
| [Go](https://www.pulumi.com/docs/iac/languages-sdks/go/) | 稳定版 | Go | [受支持的版本](https://go.dev/doc/devel/release#policy) |
|
| [.NET (C#/F#/VB.NET)](https://www.pulumi.com/docs/iac/languages-sdks/dotnet/) | 稳定版 | .NET | [受支持的版本](https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core#lifecycle) |
|
| [Java](https://www.pulumi.com/docs/iac/languages-sdks/java/) | 稳定版 | JDK | 11+ |
|
| [YAML](https://www.pulumi.com/docs/iac/languages-sdks/yaml/) | 稳定版 | n/a | n/a |
### 已终止发行版本
Pulumi CLI v1 和 v2 已不再支持。如果您尚未运行 v3,请考虑迁移到 v3 以继续享受 Pulumi 提供的最新最强大的功能!:muscle:
* 要从 v2 迁移到 v3,请参阅我们的 [v3 迁移指南](https://www.pulumi.com/docs/iac/download-install/migrating-3.0/)。
### 云平台
访问 [Registry](https://www.pulumi.com/registry/) 获取受支持的云和基础设施提供商的完整列表。
## 贡献
请访问 [CONTRIBUTING.md](https://github.com/pulumi/pulumi/blob/master/CONTRIBUTING.md) 以获取有关从源代码构建 Pulumi 或贡献改进的信息。
* **[开始使用 Pulumi](https://www.pulumi.com/docs/iac/get-started/)**:使用 Pulumi 在 AWS、Azure、Google Cloud 或 Kubernetes 中部署一个简单的应用程序。
* **[学习](https://www.pulumi.com/tutorials/)**:遵循 Pulumi 学习路径,通过真实的示例学习最佳实践和架构模式。
* **[示例](https://github.com/pulumi/examples)**:浏览多种语言、云平台和场景下的多个示例,
包括容器、无服务器和基础设施。
* **[文档](https://www.pulumi.com/docs/)**:了解 Pulumi 概念,遵循用户指南,并查阅参考文档。
* **[Registry](https://www.pulumi.com/registry/)**:查找包含您所需资源的 Pulumi 包。将包直接安装到您的项目中,浏览 API 文档,然后开始构建。
* **[Secrets 管理](https://www.pulumi.com/product/secrets-management/)**:使用 Pulumi ESC 安全地管理所有云基础设施和应用程序中的 Secrets 扩散和配置复杂性。
* **[Pulumi 路线图](https://github.com/orgs/pulumi/projects/44)**:查看即将到来的季度计划工作,以及我们关注但尚未排期的选定议题积压。
* **[Community Slack](https://slack.pulumi.com/)**:加入 Pulumi Community Slack。欢迎所有的对话和问题。
* **[GitHub Discussions](https://github.com/pulumi/pulumi/discussions)**:提问或分享您使用 Pulumi 构建的成果。
## 入门指南
[](https://www.youtube.com/watch?v=6f8KF6UGN7g)
请参阅 [入门指南](https://www.pulumi.com/docs/iac/get-started/) 以在您选择的平台和云上
快速开始使用 Pulumi。
或者,以下步骤演示了如何在几分钟内部署您的第一个 Pulumi 程序,使用 AWS
无服务器 Lambda:
1. **安装**:
要安装最新的 Pulumi 版本,请运行以下命令(有关其他安装选项,请参阅完整的
[安装说明](https://www.pulumi.com/docs/iac/download-install/)):
curl -fsSL https://get.pulumi.com/ | sh
2. **创建项目**:
安装完成后,您可以使用 `pulumi new` 命令开始:
mkdir pulumi-demo && cd pulumi-demo
pulumi new serverless-aws-typescript
`new` 命令为所有语言和云平台提供[模板](https://github.com/pulumi/templates/)。不带参数运行它,它会提示
您可用的项目。此命令创建一个用 TypeScript 编写的 AWS Serverless Lambda 项目。
3. **部署到云端**:
运行 `pulumi up` 将您的代码部署到云端:
pulumi up
这将创建运行代码所需的所有云资源。只需对项目进行编辑,随后的
`pulumi up` 将计算最小差异以部署您的更改。
4. **使用您的程序**:
既然代码已部署,您就可以与它交互。在上面的示例中,我们可以 curl 该 endpoint:
curl $(pulumi stack output url)
5. **访问日志**:
如果您使用容器或函数,Pulumi 的统一日志命令将显示您的所有日志:
pulumi logs -f
6. **销毁您的资源**:
完成后,您可以删除程序创建的所有资源:
pulumi destroy -y
要了解更多信息,请前往 [pulumi.com](https://pulumi.com/) 获取更多信息,包括
[教程](https://www.pulumi.com/tutorials/)、[示例](https://github.com/pulumi/examples),以及
核心 Pulumi CLI 和[编程模型概念](https://www.pulumi.com/docs/iac/concepts/) 的详细信息。
## 平台
### 语言
| | 语言 | 状态 | 运行时 | 版本 |
| -- | -------- | ------ | ------- | -------- |
| 标签:AWS, Azure, CMS安全, DNS解析, DPI, EC2, EVTX分析, GCP, Go, Google Cloud, IaC, JavaScript, JS文件枚举, MITM代理, Python, Ruby工具, Serverless, SOC Prime, TypeScript, 云资源管理, 多云管理, 多人体追踪, 子域名突变, 安全插件, 容器编排, 开发工具, 开源框架, 开源项目, 持续部署, 持续集成, 无后门, 日志审计, 漏洞利用检测, 自动化API, 自动化运维, 资源编排, 逆向工具