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

使用Pulumi AzureNative创建ServiceBus后如何获取连接字符串

获取Pulumi AzureNative创建的ServiceBus命名空间连接字符串

在Pulumi的AzureNative模块中,ServiceBus Namespace对象本身不会直接暴露连接字符串属性,需要通过授权规则相关的API来获取密钥和连接字符串,以下是两种常见场景的实现方式:

一、获取默认的RootManageSharedAccessKey连接字符串

ServiceBus命名空间创建时会自动生成名为RootManageSharedAccessKey的默认授权规则,你可以通过GetNamespaceAuthorizationRule和GetNamespaceKeys方法来获取它的连接字符串:

public void CreateNamespace(string namespaceName, SkuName skuname, SkuTier tier)
{
    var serviceBusNamespace = new Namespace(namespaceName, new NamespaceArgs
    {
        Location = _resourceGroup.Location,
        NamespaceName = namespaceName,
        ResourceGroupName = _resourceGroup.Name,
        Sku = new Pulumi.AzureNative.ServiceBus.Inputs.SBSkuArgs
        {
            Name = skuname,
            Tier = tier
        }
    });

    // 获取默认的RootManageSharedAccessKey授权规则
    var defaultAuthRule = Output.Tuple(_resourceGroup.Name, serviceBusNamespace.Name).Apply(names =>
        NamespaceAuthorizationRule.GetNamespaceAuthorizationRuleAsync(new GetNamespaceAuthorizationRuleArgs
        {
            ResourceGroupName = names.Item1,
            NamespaceName = names.Item2,
            AuthorizationRuleName = "RootManageSharedAccessKey"
        })
    );

    // 获取该规则的密钥与连接字符串
    var namespaceKeys = Output.Tuple(_resourceGroup.Name, serviceBusNamespace.Name, defaultAuthRule.Apply(r => r.Name)).Apply(args =>
        Namespace.GetNamespaceKeysAsync(new GetNamespaceKeysArgs
        {
            ResourceGroupName = args.Item1,
            NamespaceName = args.Item2,
            AuthorizationRuleName = args.Item3
        })
    );

    // 输出或使用主连接字符串(示例:打印到控制台)
    namespaceKeys.Apply(keys =>
    {
        Console.WriteLine($"主连接字符串: {keys.PrimaryConnectionString}");
        Console.WriteLine($"次连接字符串: {keys.SecondaryConnectionString}");
        return keys;
    });
}

二、创建自定义授权策略并获取连接字符串

如果需要更细粒度的权限控制,可以创建自定义授权规则,再获取它的连接字符串:

public void CreateNamespaceWithCustomPolicy(string namespaceName, SkuName skuname, SkuTier tier)
{
    var serviceBusNamespace = new Namespace(namespaceName, new NamespaceArgs
    {
        Location = _resourceGroup.Location,
        NamespaceName = namespaceName,
        ResourceGroupName = _resourceGroup.Name,
        Sku = new Pulumi.AzureNative.ServiceBus.Inputs.SBSkuArgs
        {
            Name = skuname,
            Tier = tier
        }
    });

    // 创建自定义授权规则,设置所需权限(Listen/Send/Manage)
    var customAuthRule = new NamespaceAuthorizationRule("sb-custom-policy", new NamespaceAuthorizationRuleArgs
    {
        ResourceGroupName = _resourceGroup.Name,
        NamespaceName = serviceBusNamespace.Name,
        Rights = new List<string> { "Listen", "Send" } // 根据业务需求调整权限
    });

    // 获取自定义规则的密钥与连接字符串
    var customPolicyKeys = Output.Tuple(_resourceGroup.Name, serviceBusNamespace.Name, customAuthRule.Name).Apply(args =>
        Namespace.GetNamespaceKeysAsync(new GetNamespaceKeysArgs
        {
            ResourceGroupName = args.Item1,
            NamespaceName = args.Item2,
            AuthorizationRuleName = args.Item3
        })
    );

    // 使用自定义规则的连接字符串
    customPolicyKeys.Apply(keys =>
    {
        Console.WriteLine($"自定义策略主连接字符串: {keys.PrimaryConnectionString}");
        return keys;
    });
}

关键说明

  • 由于Pulumi资源的创建是异步的,必须通过Output和Apply来处理资源之间的依赖关系,不能直接同步获取属性。
  • 上述方法均属于Pulumi.AzureNative.ServiceBus命名空间,需确保已正确引用Pulumi.AzureNative.ServiceBus NuGet包。

内容的提问来源于stack exchange,提问作者Ole Albers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:48:30