在 Azure Function V4 中配置 Azure KeyVault 端点

Configure Azure KeyVault Endpoint in Azure Function V4

我目前正在将 dotnet 隔离的 v3 函数 (.net 5) 迁移到非隔离的 v4 azure 函数 (.net 6)

在 v3 dotnet-isolated 我有一个控制台应用程序,所以 Program.cs 包含以下代码:

public static void Main()
        {
            var host = new HostBuilder()
                .ConfigureAppConfiguration(AddAzureAppConfig)
                .Build();

            host.Run();
        }

     private static void AddAzureAppConfig(IConfigurationBuilder builder)
        {
            var azureAppConfigurationEndpoint = Environment.GetEnvironmentVariable("AzureAppConfiguration");

            builder.AddAzureAppConfiguration(options =>
                  options.Connect(azureAppConfigurationEndpoint).ConfigureKeyVault(kv =>
                  {
                      kv.SetCredential(new DefaultAzureCredential());
                  }).Select(KeyFilter.Any, LabelFilter.Null)
            );
        }

现在在 v4 中我有一个库,所以没有 program.cs。相反,我创建了一个 Startup.cs 派生自 FunctionsStartup

 public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            builder.Services.AddHttpClient();
...
}
}

据我了解 v4 Azure Functions 没有任何 IConfigurationBuilder,如果您直接想访问任何配置值则不需要。

现在我的问题是,虽然 Microsoft.Extension.Configuration.AzureAppConfigurationExtensions 中的 AddAzureAppConfiguration 有一个我可以使用的重载 (AddAzureAppConfiguration(this IServiceCollection services)),但它缺少 Action<AzureAppConfigurationOptions> action 参数( IConfigurationBuilder- 变体有),我需要添加 KeyVault 选项。

我必须修改什么才能使用与我的 AddAzureAppConfig() 相同的方法,该方法适用于 v3 隔离控制台应用程序方法?

您可以覆盖 FunctionsStartup 中的 ConfigureAppConfiguration 方法。在方法内部,您可以调用 ConfigurationBuilder.AddAzureKeyVault ,这与函数 v3.

非常相似

示例如下:

    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {


        }

        public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
        {
            var builtConfig = builder.ConfigurationBuilder.Build();
            var keyVaultEndpoint = builtConfig["AzureKeyVaultEndpoint"];

            if (!string.IsNullOrEmpty(keyVaultEndpoint))
            {

                var config = builder.ConfigurationBuilder
                        .AddAzureKeyVault(keyVaultEndpoint)
                    .Build();

                var kvSecret = config["kvSecretName"];

            }
        }
    }

AzureKeyVaultEndpoint 在本地环境的 local.settings.json 和 Azure 环境的 AppConfig 中传递。