Azure函数-从Azure密钥保管库获取服务总线连接字符串

时间:2019-10-22 15:33:55

标签: azure-functions connection-string azureservicebus azure-keyvault

我有一个运行在docker容器中的Azure函数。此功能需要使用Azure服务总线。所以我的功能是使用属性“ ServiceBusAccount”来获取服务总线连接字符串

    [FunctionName("MyFunc")]
    [ServiceBusAccount("ServiceBusConnectionString")]
    public async Task MyFunc(...)
    ...

在配置生成器中,我运行以下代码以从Azure Key Vault中获取一些值(包括Service总线连接字符串):

     var configBuilder = new ConfigurationBuilder();

     var config = configBuilder.AddAzureKeyVault($"https://{config["keyVaultName"]}.vault.azure.net", config["keyVaultClientId"], config["keyVaultSecret"])
                .Build();

问题是主机启动时,我首先收到警告:

  

“警告:找不到名为'ServiceBusConnectionString'的值”“

然后发现我的函数后,我得到了这个错误:

  

发生主机错误。 Microsoft.Azure.WebJobs.ServiceBus:Microsoft Azure WebJobs SDK ServiceBus连接字符串'ServiceBusConnectionString'丢失或为空

我的理解是,主机环境正在尝试在甚至启动功能之前以及在项目的启动类中调用配置生成器之前获取服务总线连接字符串。

是否可以在运行时设置服务总线连接字符串?

1 个答案:

答案 0 :(得分:0)

您可以在功能的@Microsoft.KeyVault(SecretUri=Secret URI with version)中设置Application Setting

1。打开您的Azure函数Identity

2。转到Key Vault的Access Control部分,然后单击“添加角色分配”刀片,将角色分配给功能的服务主体。

3。转到您的密钥保险库,然后单击Access Policies,然后单击具有密钥或秘密许可的将策略添加到函数的服务主体中。

4。在Azure Function中使用Key Vault Secret。

有关更多详细信息,您可以参考此article