You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pulumi Azure-Native通配符查询资源组的替代方案

使用Pulumi Azure-Native 通过通配符查询资源组并获取外部资源密钥的替代方案

一、直接调用Azure SDK实现通配符查询

如果pulumi azure-native内置的listResourceGroups不可用,可以借助Azure官方SDK直接完成资源组通配符查询,再获取目标资源密钥。

Python示例:

  1. 安装所需Azure SDK包:
pip install azure-mgmt-resource azure-mgmt-storage
  1. 编写查询与密钥获取逻辑:
import pulumi
from azure.identity import DefaultAzureCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.storage import StorageManagementClient

# 加载订阅ID,使用Pulumi配置项
subscription_id = pulumi.config.require("azure-native:subscriptionId")
# 采用默认凭据认证(本地用az login,部署环境用托管标识)
credential = DefaultAzureCredential()

# 初始化资源组管理客户端
resource_client = ResourceManagementClient(credential, subscription_id)
# 通配符筛选资源组(示例:匹配以"prod-"开头的资源组)
target_rgs = [rg for rg in resource_client.resource_groups.list() if rg.name.startswith("prod-")]

# 遍历资源组,获取存储账户密钥
for rg in target_rgs:
    storage_client = StorageManagementClient(credential, subscription_id)
    # 列出资源组内的存储账户,可按需添加名称筛选
    storage_accounts = list(storage_client.storage_accounts.list_by_resource_group(rg.name))
    if storage_accounts:
        target_account = storage_accounts[0]
        keys = storage_client.storage_accounts.list_keys(rg.name, target_account.name)
        primary_key = keys.keys[0].value
        # 将密钥导出为Pulumi输出,供当前部署使用
        pulumi.export(f"storage_primary_key_{rg.name}", primary_key)

二、使用Pulumi Invoke调用Azure REST API

无需额外安装SDK,直接通过Pulumi的invoke功能调用Azure RM REST API实现通配符查询:

Python示例:

import pulumi

# 调用API查询符合通配符的资源组,使用OData筛选器
resource_groups = pulumi.runtime.invoke(
    "azure-native:resources:listResourceGroups",
    {
        "filter": "name startsWith 'prod-'",
        "subscriptionId": pulumi.config.require("azure-native:subscriptionId")
    }
)

# 定义函数获取存储账户密钥
def fetch_storage_keys(rg_name):
    storage_accounts = pulumi.runtime.invoke(
        "azure-native:storage:listStorageAccountsByResourceGroup",
        {"resourceGroupName": rg_name}
    )
    if storage_accounts.result().value:
        account_name = storage_accounts.result().value[0].name
        keys = pulumi.runtime.invoke(
            "azure-native:storage:listStorageAccountKeys",
            {
                "accountName": account_name,
                "resourceGroupName": rg_name
            }
        )
        return keys.result().keys[0].value

# 遍历资源组并导出密钥
for rg in resource_groups.result().value:
    key = fetch_storage_keys(rg.name)
    pulumi.export(f"storage_key_{rg.name}", key)

注意:若invoke操作报错,建议升级pulumi azure-native插件:pulumi plugin install resource azure-native <最新版本号>

三、Pulumi Stack引用(推荐方案)

如果目标资源来自其他Pulumi部署栈,优先使用Stack引用直接获取导出的密钥,避免通配符查询的不确定性:

步骤1:在目标栈中导出密钥

# 目标部署栈的代码
import pulumi
from pulumi_azure_native import storage

# 假设已创建存储账户
storage_account = storage.StorageAccount("prod-storage", ...)
# 导出存储账户主键
storage_keys = storage.list_storage_account_keys_output(
    account_name=storage_account.name,
    resource_group_name=storage_account.resource_group_name
)
pulumi.export("storage_primary_key", storage_keys.keys[0].value)

步骤2:在当前栈中引用目标栈输出

# 当前部署栈的代码
import pulumi
from pulumi import StackReference

# 引用目标栈(格式:<组织名>/<栈名>/<环境>)
target_stack = StackReference("my-org/prod-storage/us-east")
# 获取目标栈导出的密钥
external_storage_key = target_stack.get_output("storage_primary_key")

# 使用密钥部署当前资源,示例:创建Blob容器
from pulumi_azure_native import storage

blob_container = storage.BlobContainer(
    "data-container",
    account_name="current-storage-account",
    resource_group_name="current-rg",
    container_name="raw-data",
    # 传入引用的密钥
    pulumi.Config("azure-native:storageAccountKey", external_storage_key)
)

该方案符合Pulumi基础设施即代码的最佳实践,确保资源依赖可追溯,避免不必要的资源查询开销。


内容的提问来源于stack exchange,提问作者300baud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:22:18