如何在timerTrigger Azure Functions中设置环境变量或输入?

时间:2019-03-15 12:54:44

标签: node.js azure azure-functions

我正在尝试设置一个timerTrigger天蓝色功能

我的function.json

{
    "disabled": false,
    "bindings": [
        {
            "type": "timerTrigger",
            "direction": "in",
            "name": "sampleCronTrigger",
            "schedule": "*/5 * * * * *",
        }
    ],
    "entryPoint": "sampleCron",
    "scriptFile": "index.js"
}

在这种情况下,我需要设置一个环境变量,但是我不能这样做。我尝试查找一些文档,但找不到不需要在Azure控制台上进行某些设置的任何内容?

我可以定义环境变量吗?或者,如果可以通过任何方式将输入传递给函数,也可以。

2 个答案:

答案 0 :(得分:1)

功能应用程序中的应用程序设置包含全局配置选项,这些选项会影响该功能应用程序的所有功能。在本地运行时,这些设置将以local environment variables访问。

本地设置文件 文件local.settings.json存储应用程序设置,连接字符串以及Azure Functions核心工具的设置。 local.settings.json文件中的设置仅在本地运行时由“功能”工具使用。默认情况下,将项目发布到Azure时不会自动迁移这些设置。发布时使用--publish-local-settings开关以确保将这些设置添加到Azure中的功能应用程序中。

在“功能”中,应用设置(例如服务连接字符串)在执行期间作为环境变量公开。您可以使用process.env来访问这些设置,如GetEnvironmentVariable函数中所示:

module.exports = function (context, myTimer) {
    var timeStamp = new Date().toISOString();

    context.log('Node.js timer trigger function ran!', timeStamp);
    context.log(GetEnvironmentVariable("AzureWebJobsStorage"));
    context.log(GetEnvironmentVariable("WEBSITE_SITE_NAME"));

    context.done();
};

function GetEnvironmentVariable(name)
{
    return name + ": " + process.env[name];
}

您可以通过多种方式添加,更新和删除功能应用程序设置:

在本地运行时,将从local.settings.json项目文件中读取应用程序设置。

参考:

答案 1 :(得分:0)

另外,为了从local.settings.json中检索值,另一种方法是使用ExecutionContext executionContext创建IConfigurationRoot对象。

ExecutionContext可以添加到函数定义中:

[FunctionName("FunctionName")]
        public static async Task Run(
            [ServiceBusTrigger(...)]
            SomeMessage msg,
            ILogger log,
            ExecutionContext executionContext)
{
}

之后,您可以实例化一个IConfigurationRoot实例,该实例指示您有选择地加载local.appsettings.json。

  var configurationRoot = new ConfigurationBuilder()
            .SetBasePath(executionContext.FunctionAppDirectory)
            .AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables()
            .Build();

使用configurationRoot对象,您可以检索配置值:

 var value = configurationRoot["SomeKey"];

示例local.settings.json:

{
 "IsEncrypted": false,
 "Values": {
  "AzureWebJobsStorage": "...",
  "FUNCTIONS_WORKER_RUNTIME": "dotnet",
  "SomeKey": "Value",
},
"Host": {
 "LocalHttpPort": "7071"
}
}