在 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 中传递。
我目前正在将 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();
...
}
}
据我了解
现在我的问题是,虽然 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 中传递。