将已有的云基础设施导入 Pulumi 项目
· 约 1 分钟阅读
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)。