存储 Azure 函数环境变量的最佳位置
Best place to store environment variables for Azure Function
我正在使用几个 api 键在本地测试 azure 函数。存储环境变量的最佳位置是什么?如何访问它们?我试过了
System.Environment.GetEnvironmentVariable("name")}
但我不确定环境变量存储在哪里。
谢谢!
要存储 api 密钥,您可以使用应用程序设置。细节:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#application-settings
要获取环境变量或应用设置值,请使用System.Environment.GetEnvironmentVariable,如以下代码示例所示:
public static void Run(TimerInfo myTimer, TraceWriter log)
{
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
log.Info(GetEnvironmentVariable("AzureWebJobsStorage"));
log.Info(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}
public static string GetEnvironmentVariable(string name)
{
return name + ": " +
System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}
谢谢,阿列克谢
将key/value对放在"Values" 属性下的appsettings.json文件中。
您应该有一个名为 local.settings.json 的文件。这是 Functions-Run-Local
的 Azure 网站
上面写着
These settings can also be read in your code as environment variables. In C#, use System.Environment.GetEnvironmentVariable or ConfigurationManager.AppSettings. In JavaScript, use process.env. Settings specified as a system environment variable take precedence over values in the local.settings.json file.
示例local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<connection string>",
"AzureWebJobsDashboard": "<connection string>"
},
"Host": {
"LocalHttpPort": 7071,
"CORS": "*"
},
"ConnectionStrings": {
"SQLConnectionString": "Value"
}
}
它说您需要将应用程序设置放在 local.settings.json.
中的 Values 属性 下
为了检索,我使用了 ConfigurationManager.AppSettings["CustomSetting"]
,因为它可以让您检索连接字符串。
我一直在研究这个,发现您必须有一个字符串键和一个字符串值。当我尝试使用小节时出现错误(就像在 appsettings.json 中一样)。我必须让 local.settings.json 看起来像这样:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<connection string>",
"AzureWebJobsDashboard": "<connection string>"
"CustomSetting":"20"
}
}
在 Azure Functions 2 中,我们转移到 ASP.NET 核心配置,不再支持 ConfigurationManager。这在 3 中仍然成立。
我看过许多文章,其中人们费力地让 ConfigurationBuilder 设置正常工作。问题是,一旦您开始执行最近添加的 DI,由于无法访问 Context 参数 (1),会出现一些烦人的场景。只使用 Environment.GetEnvironmentVariable.
就干净多了
这与 Azure Functions 的配置模型完美对应:在开发中,它选取 local.settings.json > Values 数组中的项目,在生产中它选取你的环境变量。它只是工作。
除了它与我们在 MVC 中所做的不同之外,我看不到任何缺点。但这不是 MVC,而是 Functions,在 MS 使这些平台更好地结合之前,我们应该敞开心扉接受 Functions 中最好的东西,而不是强迫不同的范式在这里工作。
您的 local.settings.json 可能如下所示:
{
"IsEncrypted": false,
"Values": {
"KeystoneDB": "[CONNECTION STRING HERE]"
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
在生产环境中,您可以在门户中设置环境变量。
(1) 据我所知,没有其他干净的方法可以满足 ConfigurationBuilder().SetBasePath。参见:Get root directory of Azure Function App v2
我正在使用几个 api 键在本地测试 azure 函数。存储环境变量的最佳位置是什么?如何访问它们?我试过了
System.Environment.GetEnvironmentVariable("name")}
但我不确定环境变量存储在哪里。
谢谢!
要存储 api 密钥,您可以使用应用程序设置。细节: https://docs.microsoft.com/en-us/azure/azure-functions/functions-how-to-use-azure-function-app-settings#application-settings
要获取环境变量或应用设置值,请使用System.Environment.GetEnvironmentVariable,如以下代码示例所示:
public static void Run(TimerInfo myTimer, TraceWriter log)
{
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
log.Info(GetEnvironmentVariable("AzureWebJobsStorage"));
log.Info(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
}
public static string GetEnvironmentVariable(string name)
{
return name + ": " +
System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
}
谢谢,阿列克谢
将key/value对放在"Values" 属性下的appsettings.json文件中。
您应该有一个名为 local.settings.json 的文件。这是 Functions-Run-Local
的 Azure 网站上面写着
These settings can also be read in your code as environment variables. In C#, use System.Environment.GetEnvironmentVariable or ConfigurationManager.AppSettings. In JavaScript, use process.env. Settings specified as a system environment variable take precedence over values in the local.settings.json file.
示例local.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<connection string>",
"AzureWebJobsDashboard": "<connection string>"
},
"Host": {
"LocalHttpPort": 7071,
"CORS": "*"
},
"ConnectionStrings": {
"SQLConnectionString": "Value"
}
}
它说您需要将应用程序设置放在 local.settings.json.
中的 Values 属性 下为了检索,我使用了 ConfigurationManager.AppSettings["CustomSetting"]
,因为它可以让您检索连接字符串。
我一直在研究这个,发现您必须有一个字符串键和一个字符串值。当我尝试使用小节时出现错误(就像在 appsettings.json 中一样)。我必须让 local.settings.json 看起来像这样:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "<connection string>",
"AzureWebJobsDashboard": "<connection string>"
"CustomSetting":"20"
}
}
在 Azure Functions 2 中,我们转移到 ASP.NET 核心配置,不再支持 ConfigurationManager。这在 3 中仍然成立。
我看过许多文章,其中人们费力地让 ConfigurationBuilder 设置正常工作。问题是,一旦您开始执行最近添加的 DI,由于无法访问 Context 参数 (1),会出现一些烦人的场景。只使用 Environment.GetEnvironmentVariable.
就干净多了这与 Azure Functions 的配置模型完美对应:在开发中,它选取 local.settings.json > Values 数组中的项目,在生产中它选取你的环境变量。它只是工作。
除了它与我们在 MVC 中所做的不同之外,我看不到任何缺点。但这不是 MVC,而是 Functions,在 MS 使这些平台更好地结合之前,我们应该敞开心扉接受 Functions 中最好的东西,而不是强迫不同的范式在这里工作。
您的 local.settings.json 可能如下所示:
{
"IsEncrypted": false,
"Values": {
"KeystoneDB": "[CONNECTION STRING HERE]"
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
在生产环境中,您可以在门户中设置环境变量。
(1) 据我所知,没有其他干净的方法可以满足 ConfigurationBuilder().SetBasePath。参见:Get root directory of Azure Function App v2