存储 Azure 函数机密:Startup.Configure 未执行
Storing Azure Function secrets: Startup.Configure is not executed
我有一个 Azure Function 应用程序。秘密存储在 local.settings.json 和 secrets.json:
中
{
"Values": {
"BASIC_AUTH_USERNAME": "<USERNAME>",
"BASIC_AUTH_PASSWORD": "<PASSWORD>"
}
}
消费秘钥的Azure函数代码:
string username = Environment.GetEnvironmentVariable("BASIC_AUTH_USERNAME", EnvironmentVariableTarget.Process);
string password = Environment.GetEnvironmentVariable("BASIC_AUTH_PASSWORD", EnvironmentVariableTarget.Process);
在这里 https://www.koskila.net/how-to-configure-azure-functions-startup/ 我找到了如何使用启动 class 和配置功能添加 startup.cs 文件:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Configuration;
[assembly: WebJobsStartup(typeof(Startup))]
namespace LATICRETE.IdentityFunctions
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var config = new ConfigurationBuilder()
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}
}
}
但是 GetEnvironmentVariable() 方法 returns 只有 null,而 Startup.Configure() 方法永远不会执行。我错过了什么?
尝试按照以下代码片段更新您的代码;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Azure.WebJobs.Host.Bindings;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using System.Linq;
[assembly: WebJobsStartup(typeof(LATICRETE.IdentityFunctions.Startup))]
namespace LATICRETE.IdentityFunctions
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var executionContextOptions = builder.Services.BuildServiceProvider().GetService<IOptions<ExecutionContextOptions>>().Value;
var appDirectory = executionContextOptions.AppDirectory;
var config = new ConfigurationBuilder()
.SetBasePath(appDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange:true).AddEnvironmentVariables()
.Build();
builder.Services.Replace(ServiceDescriptor.Singleton(typeof(IConfiguration),
config));
}
}
}
并且此代码只会在我们 运行 项目或部署代码时第一次执行。
然后,您可以将 IConfiguration 注入到您想要的 class 中,并且可以从它的实例访问配置设置。
using Microsoft.Extensions.Configuration
public class TestClass{
private readonly IConfiguration _config;
public TestClass(IConfiguration config)
{
_config = config;
}
public void DoSomeThing()
{
var localSettingA = _config["localSettingA"];
}
}
需要导入 Microsoft.Extensions.Configuration 才能使用 IConfiguration。
敌人的更多信息,看看这篇文章 - https://medium.com/@padala.suresh.ece/loading-keyvault-secrets-and-appsettings-in-to-application-configuration-in-azure-function-apps-c1798a8fd93f
我有一个 Azure Function 应用程序。秘密存储在 local.settings.json 和 secrets.json:
中{
"Values": {
"BASIC_AUTH_USERNAME": "<USERNAME>",
"BASIC_AUTH_PASSWORD": "<PASSWORD>"
}
}
消费秘钥的Azure函数代码:
string username = Environment.GetEnvironmentVariable("BASIC_AUTH_USERNAME", EnvironmentVariableTarget.Process);
string password = Environment.GetEnvironmentVariable("BASIC_AUTH_PASSWORD", EnvironmentVariableTarget.Process);
在这里 https://www.koskila.net/how-to-configure-azure-functions-startup/ 我找到了如何使用启动 class 和配置功能添加 startup.cs 文件:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.Configuration;
[assembly: WebJobsStartup(typeof(Startup))]
namespace LATICRETE.IdentityFunctions
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var config = new ConfigurationBuilder()
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
}
}
}
但是 GetEnvironmentVariable() 方法 returns 只有 null,而 Startup.Configure() 方法永远不会执行。我错过了什么?
尝试按照以下代码片段更新您的代码;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Azure.WebJobs.Host.Bindings;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using System.Linq;
[assembly: WebJobsStartup(typeof(LATICRETE.IdentityFunctions.Startup))]
namespace LATICRETE.IdentityFunctions
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
var executionContextOptions = builder.Services.BuildServiceProvider().GetService<IOptions<ExecutionContextOptions>>().Value;
var appDirectory = executionContextOptions.AppDirectory;
var config = new ConfigurationBuilder()
.SetBasePath(appDirectory)
.AddJsonFile("local.settings.json", optional: true, reloadOnChange:true).AddEnvironmentVariables()
.Build();
builder.Services.Replace(ServiceDescriptor.Singleton(typeof(IConfiguration),
config));
}
}
}
并且此代码只会在我们 运行 项目或部署代码时第一次执行。 然后,您可以将 IConfiguration 注入到您想要的 class 中,并且可以从它的实例访问配置设置。
using Microsoft.Extensions.Configuration
public class TestClass{
private readonly IConfiguration _config;
public TestClass(IConfiguration config)
{
_config = config;
}
public void DoSomeThing()
{
var localSettingA = _config["localSettingA"];
}
}
需要导入 Microsoft.Extensions.Configuration 才能使用 IConfiguration。 敌人的更多信息,看看这篇文章 - https://medium.com/@padala.suresh.ece/loading-keyvault-secrets-and-appsettings-in-to-application-configuration-in-azure-function-apps-c1798a8fd93f