Azure QueueTriggered Function app dotnet-isolated input binding from keyvault

问题描述

我正在尝试将我的函数应用连接到密钥库并获取队列名称和连接机密。这在使用 FunctionStartup 中的 ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder) 方法的 .netcore3.1 应用中运行良好。

升级到 .net5 dotnet-isolated 后,绑定不起作用。我在 Program.cs 中配置了 azurekeyvault,但它仍然没有从 keyvault 中选择。

队列函数

 public static void Run([QueueTrigger("%QueueName%",Connection = "QueueConnection")] string message,string id)
    

Startup.cs (.netcore3.1)- 工作

  public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        var azurekeyvaultURL = Environment.GetEnvironmentvariable("AzurekeyvaultURL");
        var azurekeyvaultADAppID = Environment.GetEnvironmentvariable("AzurekeyvaultMIAppID");


        builder.ConfigurationBuilder
                    .SetBasePath(Environment.CurrentDirectory)
                    .AddAzurekeyvault(new Uri(azurekeyvaultURL),new ManagedIdentityCredential(azurekeyvaultADAppID))
                    .AddEnvironmentvariables()
                .Build();
    }

Program.cs (.net5)- 不工作

var host = new HostBuilder()
            .ConfigureFunctionsWorkerDefaults()
            .ConfigureAppConfiguration(config =>{
                 var azurekeyvaultURL = Environment.GetEnvironmentvariable("AzurekeyvaultURL");
                var azurekeyvaultADAppID = Environment.GetEnvironmentvariable("AzurekeyvaultMIAppID");

                config
                   .SetBasePath(Environment.CurrentDirectory)
                   .AddAzurekeyvault(new Uri(azurekeyvaultURL),new ManagedIdentityCredential(azurekeyvaultADAppID))
                   .AddEnvironmentvariables()
                .Build();
            })

解决方法

这是官方文档中的HostBuilder pipeline sample,注意Build函数:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(s =>
    {
        s.AddSingleton<IHttpResponderService,DefaultHttpResponderService>();
    })
    .Build();