从 Azure KeyVault 找不到服务总线帐户连接字符串

问题描述 投票:0回答:1

我有一个用 .net 7 编写的独立 Azure 函数,由服务总线触发。 我正在尝试将我的连接字符串(以及其他凭据移至 KeyVault Secrets)

我已经创建了一个名为 ServiceBusConnectionString 的 Keyvault 密钥。

这是我的简化app.settings.json(我在Azure功能中有类似的配置)

"Values": {
"KeyVaultUri": "https://xxxxxxx-vault.vault.azure.net/",
  "AzureWebJobsStorage": "UseDevelopmentStorage=true",
  "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
  "StorageConnectionString": "Moved to Keyvault",
  "ServiceBusConnectionString": "Moved to Keyvault"
}

这是我的简化程序.cs:

    internal class Program
 {
     private static void Main(string[] args)
     {
         string keyVaultUri = string.Empty;
         SecretClient _secretClient;
         var host = new HostBuilder()
     .ConfigureFunctionsWorkerDefaults()
     .ConfigureOpenApi()
     .ConfigureAppConfiguration((context, config) =>
     {
          var builtConfig = config.Build();
          keyVaultUri = builtConfig["KeyVaultUri"];
          builtConfig = config.AddAzureKeyVault(new Uri(keyVaultUri), new DefaultAzureCredential());
     })
     .ConfigureServices(services =>
     {
         _secretClient = new SecretClient(new Uri(keyVaultUri), new DefaultAzureCredential());
         services.AddOptions<DemandwareSettings>().Configure<IConfiguration>((settings, configuration) =>
         {
             configuration.GetSection("Demandware").Bind(settings);
             settings.SFCCCustomerListId = _secretClient.GetSecret(configuration["SFCCCustomerListId"]).Value.Value;
         });
         services.AddSingleton<ISQLHelper, SQLHelper>();
         services.AddHttpClient();
     })
     .Build();
        host.Run();
     }
 }

最后这是我的 Azure 函数:

public class UpdateInvoices
{
    [Function("UpdateInvoices")]
     public async Task Run([ServiceBusTrigger("omssalespostings", "canadagoosetoods", Connection = "ServiceBusConnectionString")] string msg)
    {
        //....
    }
}

在本地运行此 Azure 函数时,我收到此错误消息:

函数“Functions.UpdateInvoices”的侦听器无法启动。 Microsoft.Azure.WebJobs.Extensions.ServiceBus:服务总线帐户连接字符串“ServiceBusConnectionString”不存在。确保它是已定义的应用程序设置。

但是,当我在

.build()
中的第 18 行末尾添加
Program.cs
以及
builtConfig
的断点,然后使用 Immediate Window 检索builtConfig["ServiceBusConnectionString"] 时,我得到了丢失的连接字符串值。 (请参阅下面的快照)

注意:我不想设置

"ServiceBusConnection" : "@Microsoft.KeyVault(SecretUri=<Y...

在我的

local.settings.json.
这就是为什么 从 Azure 服务总线读取并从 Azure KeyVault 加载连接配置的函数 对我不起作用。

azure-functions azureservicebus azure-keyvault azure-functions-isolated
1个回答
0
投票

尝试将这些行添加到您的 UpdateInvoices 类中。

private readonly IConfiguration _configuration;

public UpdateInvoices(IConfiguration configuration)
{
    _configuration = configuration;
}
© www.soinside.com 2019 - 2024. All rights reserved.