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

Azure functions Azure函数-从Azure密钥库获取服务总线连接字符串,azure-functions,connection-string,azureservicebus,azure-keyvault,Azure Functions,Connection String,Azureservicebus,Azure Keyvault,我有一个运行在docker容器中的Azure函数。此函数需要使用Azure服务总线。因此,我的函数使用属性“ServiceBusAccount”来获取服务总线连接字符串 [FunctionName("MyFunc")] [ServiceBusAccount("ServiceBusConnectionString")] public async Task MyFunc(...) ... 在configuration buil

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

    [FunctionName("MyFunc")]
    [ServiceBusAccount("ServiceBusConnectionString")]
    public async Task MyFunc(...)
    ...
在configuration builder中,我运行以下代码以从Azure密钥库(包括服务总线连接字符串)获取一些值:

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

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

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

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

我的理解是,在启动函数之前,以及在项目的启动类中调用configuration builder之前,主机环境正在尝试获取服务总线连接字符串

有没有办法在运行时设置服务总线连接字符串

编辑


如果您使用的是Azure DevOps,这将有助于解决此问题

您可以在函数的
应用程序设置中设置
@Microsoft.KeyVault(SecretUri=SecretUri with version)

1.打开Azure功能的
Identity

2.转到密钥库的
访问控制
部分,单击添加角色分配刀片,将角色分配给职能部门的服务负责人

3.转到您的密钥保管库,单击访问策略
,然后单击将策略添加到具有密钥或机密权限的功能的服务主体

4.在Azure函数中使用密钥保管库机密


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

您使用的是servicebus触发功能,或者在其他类型的触发功能中使用servicebus?我使用的是servicebus触发功能。如果我将服务总线连接字符串放在local.settings.json中,一切正常。当我从那里移除它并在运行时从Azure Key Vault中提取连接字符串时,我得到了上面提到的错误。我的函数正在容器中运行。它们不在Azure门户上。因此,我想你的解决方案不是viable@AlessandroLallo你能找到一个可行的解决方案吗?我遇到了同样的问题。@tubakaya如果您使用的是Azure DevOps,这应该会有所帮助@AlessandroLallo谢谢您的回复。我已经有了一个可以在构建期间替换appsettings的实现。我正在寻找一种方法,完全不用appsettings中的设置,而是在启动过程中指示服务总线连接字符串,正如您的问题所示。
     var configBuilder = new ConfigurationBuilder();

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