【发布时间】:2020-02-18 19:25:02
【问题描述】:
我有一个在 docker 容器中运行的 Azure 函数。此功能需要使用 Azure 服务总线。所以我的函数是使用属性“ServiceBusAccount”来获取服务总线连接字符串
[FunctionName("MyFunc")]
[ServiceBusAccount("ServiceBusConnectionString")]
public async Task MyFunc(...)
...
在配置生成器中,我运行以下代码从 Azure Key Vault 获取一些值(包括服务总线连接字符串):
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”丢失或为空
我的理解是宿主环境甚至在启动函数之前以及在项目的启动类中调用配置生成器之前,都试图获取服务总线连接字符串。
有没有办法在运行时设置服务总线连接字符串?
编辑
如果你使用 Azure DevOps,这应该有助于解决这个问题https://daniel-krzyczkowski.github.io/How-to-inject-Azure-Key-Vault-secrets-in-the-Azure-DevOps-CICD-pipelines/
【问题讨论】:
-
您是在使用 servicebus 触发功能还是在使用 servicebus 的其他类型的触发功能?
-
我正在使用服务总线触发功能。如果我将服务总线连接字符串放在我的 local.settings.json 中,一切都很好。当我从那里删除它并在运行时从 Azure Key Vault 中提取连接字符串时,我收到了上面提到的错误。
标签: azure-functions connection-string azureservicebus azure-keyvault