2

我正在尝试将我的函数应用程序连接到 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();
            })
4

2 回答 2

0

您需要使用另一个重载的 ConfigureAppConfiguration 方法:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureAppConfiguration((hostBuilder, config) =>
    {
        if (hostBuilder.HostingEnvironment.IsProduction())
        {
            var builtConfig = config.Build();
            var secretClient = new SecretClient(new Uri($"https://{builtConfig["KeyVaultName"]}.vault.azure.net/"), new DefaultAzureCredential());
            config.AddAzureKeyVault(secretClient, new KeyVaultSecretManager());
        }
    })
    .Build();
于 2021-11-12T03:18:18.803 回答
0

这是官方文档中的HostBuilder 管道示例,请注意Build函数:

var host = new HostBuilder()
    .ConfigureFunctionsWorkerDefaults()
    .ConfigureServices(s =>
    {
        s.AddSingleton<IHttpResponderService, DefaultHttpResponderService>();
    })
    .Build();
于 2021-04-23T08:19:03.680 回答