存储Azure功能的环境变量的最佳位置

时间:2017-01-05 01:29:05

标签: azure-functions

我用几个api键在本地测试azure函数。什么是存储环境变量的最佳位置以及如何访问它们?我试过了

System.Environment.GetEnvironmentVariable("name")}

但我不确定环境变量的存储位置。

谢谢!

4 个答案:

答案 0 :(得分:15)

你应该有一个名为local.settings.json的文件。这是Functions-Run-Local

的天蓝网站

说明

  

这些设置也可以在代码中作为环境变量读取。在C#中,使用System.Environment.GetEnvironmentVariable或ConfigurationManager.AppSettings。在JavaScript中,使用process.env。指定为系统环境变量的设置优先于local.settings.json文件中的值。

示例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"
  }
}

答案 1 :(得分:6)

要存储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);
}

详细说明: https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-csharp#environment-variables

谢谢,Alexey

答案 2 :(得分:3)

将键/值对放在“Values”属性下的appsettings.json文件中。

答案 3 :(得分:1)

在Azure Functions 2中,我们已移至ASP.NET Core配置,并且不再支持ConfigurationManager。

我看过许多文章,这些文章使人们不禁使ConfigurationBuilder设置起作用。问题是,一旦开始执行DI(最近添加),就会由于无法访问Context参数(1)而引起一些烦人的情况。仅使用Environment.GetEnvironmentVariable会更清洁。

这完美地映射到Azure Functions的配置模型:在dev中,它拾取local.settings.json> Values数组中的项,在生产中,它拾取环境变量。它只是工作。

除了与我们在MVC中所做的不同之外,我没有其他缺点。但这不是MVC,而是功能,在MS使这些平台更好地保持一致之前,我们应该对功能最擅长的领域持开放态度,而不是强迫其他范例在这里工作。

您的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