我有一个在 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();
问题是当主机启动时我首先收到警告:
"Warning: Cannot find value named 'ServiceBusConnectionString'"
然后在发现我的函数后我得到了这个错误:
A host error has occurred. Microsoft.Azure.WebJobs.ServiceBus: Microsoft Azure WebJobs SDK ServiceBus connection string 'ServiceBusConnectionString' is missing or empty
我的理解是主机环境甚至在启动函数之前和在项目的启动类中调用配置构建器之前就试图获取服务总线连接字符串。
有什么方法可以在运行时设置服务总线连接字符串吗?
编辑
如果您使用的是 Azure DevOps,这应该有助于解决这个问题 https://daniel-krzyczkowski.github.io/How-to-inject-Azure-Key-Vault-secrets-in-the-Azure-DevOps-CICD-pipelines/
最佳答案
您可以在函数的 Application Setting
中设置 @Microsoft.KeyVault(SecretUri=Secret URI with version)
。
1.打开 Azure 函数的 Identity
。
2.转到 Key Vault 的 Access Control
部分,然后单击 Add a role assignment blade,为您的函数的服务主体分配一个角色。
3.转到您的 Key Vault 并单击 Access Policies
,然后单击 Add policy to your function's service principal with key or secret permission。
4.在 Azure Function 中使用 Key Vault Secret。
更多详情,可以引用这个article .
关于azure-functions - Azure 函数 - 从 Azure key 保管库获取服务总线连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58507744/