Pulumi 实战:引用没有被 Pulumi 管理的资源
Pulumi 是一款 “基础设施即代码”(Infrastructure as Code, IaC)工具,它允许用户使用代码来定义云资源,进而以声明式(Declarative)的方式管理亚马逊云科技(AWS)、微软 Azure、谷歌云平台(GCP)等云服务上的各类资源。尽管 IaC 是时髦的工程实践,但如果“不幸地”工作在遗留项目中,那么在使用 Pulumi 管理资源时,可能需要引用一些手动创建(或者以其他工具创建)的资源。幸运的是,Pulumi 的 Get 函数可用于引用那些不被 Pulumi 管理的资源。
Pulumi 的 get
函数 🔗
Pulumi 的文档《Get functions》 详细介绍了 get
函数:
你可以使用所有资源类型都具备的静态
get
函数,来查找未由 Pulumi 管理的现有资源。get
函数与import
CLI 命令有所不同:pulumi import
用于将现有资源纳入 Pulumi 的管理之下,而get
函数则用于在 Pulumi 程序中使用现有资源的属性。通过get
函数读取的资源在更新期间绝不会被 Pulumi 更新或删除。
get
函数需要两个参数:
- Pulumi 用来引用该资源的逻辑名称。
- 该资源在目标云中的物理 ID。
以 Python 语言的 azure-native
软件包为例,如果想获取已经存在的 ResourceGroup
,那么用法如下:
import pulumi_azure_native as azure_native
resource_group = azure_native.resources.ResourceGroup.get(resource_name="", id="")
其中 resource_group
即资源在 Pulumi 里的逻辑名称,它必须在当前的 Pulumi 程序里是唯一的;而 id
是资源在 Azure 上的 id
。可在 Azure Portal 上打开该资源,点击 "JSON View" 查看资源的 id
。比如 ResourceGroup 的 id
形式为 /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}
。
需要注意的是,在某些情况下,Pulumi 程序可能会在多个引用该资源。此时需要将 get
返回的资源缓存起来,而不是针对同一个资源,多次调用 get
方法。