Azure functions Azure函数-从Azure密钥库获取服务总线连接字符串
我有一个运行在docker容器中的Azure函数。此函数需要使用Azure服务总线。因此,我的函数使用属性“ServiceBusAccount”来获取服务总线连接字符串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
[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();