azure-functions - Azure 函数 - 从 Azure key 保管库获取服务总线连接字符串

标签 azure-functions connection-string azureservicebus azure-keyvault

我有一个在 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/

相关文章:

c# - 零星的 MessageLockLostException 但锁未过期并且是同一个 MessageReceiver 实例

Azure - 用于将 Web 作业从 ASE 移动到 Kubernetes (AKS) 的迁移选项

Azure 函数应用程序和 Web 套接字

node.js - 如何使用azure函数在blob触发器上生成大blob文件的校验和?

node.js - 通过事件网格传递来自 Azure Function 的 HTTP 请求

oracle - 如何使用 FailOver 为 ODP.NET 连接字符串配置连接字符串?

entity-framework - Entity Framework 代码优先 Azure 连接

c# - OleDb 连接不读取 excel 文件中的所有行

azure - 在 Azure 服务总线主题订阅中保留已过滤的消息

c# - 如何在服务总线异常中使用 TrackingId?