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

Ale*_*llo 5 connection-string azureservicebus azure-keyvault azure-functions

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

    [FunctionName("MyFunc")]
    [ServiceBusAccount("ServiceBusConnectionString")]
    public async Task MyFunc(...)
    ...
Run Code Online (Sandbox Code Playgroud)

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

     var configBuilder = new ConfigurationBuilder();

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

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

“警告:找不到名为“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 /

Joe*_*Cai 1

你可以@Microsoft.KeyVault(SecretUri=Secret URI with version)设置Application SettingFunction中设置。

1.开机Identity您的Azure功能。

2.前往Access ControlKey Vault 部分,然后单击“添加角色分配”边栏选项卡,将角色分配给您的函数的服务主体。

3.转到您的密钥保管库并单击Access Policies,然后单击将策略添加到具有密钥或秘密权限的函数的服务主体。

4.使用 Azure Function 中的 Key Vault Secret。

欲了解更多详情,您可以参考这篇文章