将已有的云基础设施导入 Pulumi 项目
Pulumi 是一个用户实现“基础设施即代码” 的工具。遗留项目中的基础设置,可能是手动创建或者使用其他工具创建,那么如何使用 Pulumi 管理这些已有资源呢?Pulumi 提供“导入”功能,将这些资源导入到 Pulumi 项目中,实现基础设施即代码。
导入资源 🔗
Pulumi 提供了两种方式导入现有资源:单次导入和批量导入。
导入单个资源 🔗
参考官方文档《pulumi import》,使用 pulumi import
命令,并传入资源的类型、名称和 ID,即可导入。
批量导入 🔗
导入单个资源的情况比较少见,通常需要导入多个资源。那么如果通过调用多次 pulumi import
导入单个资源的话,就会比较慢。幸运的是,pulumi import
还支持批量导入(见文档《Bulk Import Operations》):首先将需要导入的资源写入文件(比如 ./my-resources.json
),然后使用如下命令导入:
pulumi import --file ./my-resources.json
那么,如何定义这个文件呢?它的结构类似如下:
{
"resources": [
{
"type": "...",
"name": "...",
"id": "..."
}
],
"nameTable": {
"variableName": "resource urn"
}
}
其中,resources
里的每个资源,可能还会有 parent
字段等。
更新和执行代码 🔗
pulumi import
命令执行后,还需要修改代码。幸运的是,这条命令在运行成功后,会贴心地打印出已导入资源对应的代码,可作为参考。
同时,导入的资源被标记成了 protected
,需要执行 pulumi up
才可以解除保护。此后,这些导入的资源就被真正被 Pulumi 管理了。
实操经验 🔗
在导入资源时,可能会出现认为错误。比如,未能正确设置资源ID。为此,可以将状态文件回滚到导入之前,然后重新导入。注意,状态文件是快照文件,而不是增量文件(checkpoint)。