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

Dar*_*451 16 azure-functions

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

System.Environment.GetEnvironmentVariable("name")}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

chr*_*389 21

你应该有一个名为local.settings.json的文件.这是功能 - 运行 - 本地的天蓝色网站

它指出

这些设置也可以在代码中作为环境变量读取.在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"
  }
}
Run Code Online (Sandbox Code Playgroud)

它表示您需要将应用程序设置放在local.settings.json中的Values属性下.

要检索我使用ConfigurationManager.AppSettings["CustomSetting"]它,它允许您检索连接字符串.

我刚刚玩这个,发现你必须有一个字符串键和一个字符串值.我尝试使用子部分时遇到错误(就像你在appsettings.json中那样).我必须让local.settings.json看起来像这样:

{
  "IsEncrypted": false,   
  "Values": {
    "AzureWebJobsStorage": "<connection string>", 
    "AzureWebJobsDashboard": "<connection string>" 
    "CustomSetting":"20"
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 你怎么用这个做环境转换?即我的dev env值与prod不同. (4认同)
  • 我不得不重新运行 `func host start` 以从 `process.env` 中获取新的值,例如 `CustomSetting`。 (2认同)

Bri*_*Kay 19

在 Azure Functions 2 中,我们移至 ASP.NET Core 配置,不再支持 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"
    }
}
Run Code Online (Sandbox Code Playgroud)

在生产中,您在门户中设置环境变量。

(1) 没有其他干净的方法可以满足我所知道的 ConfigurationBuilder().SetBasePath 。请参阅:获取 Azure Function App v2 的根目录


Ale*_*nov 6

要存储api密钥,可以使用“应用程序设置”。详细信息:https : //docs.microsoft.com/zh-cn/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);
}
Run Code Online (Sandbox Code Playgroud)

详细信息:https : //docs.microsoft.com/zh-cn/azure/azure-functions/functions-reference-csharp#environment-variables

谢谢阿列克谢