Azure TimerTrigger 具有不同配置的多个实例

Azure TimerTrigger Multiple instances with different configuration

使用 VS Code + "Azure Function" 扩展,我使用以下设置生成了默认的 python 3.7 timedTrigger 函数:

// functions.json
{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "mytimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 0 */6 * * *"
    }
  ]
}

我还设置了两个环境变量"USER"和"PASSWORD",它们是在应用服务的配置中设置的。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": ****************,
    "FUNCTIONS_WORKER_RUNTIME": "python",
    "USER": "********",
    "PASSWORD": "*********"
  }
}

目标: 我想 运行 相同功能的两个实例,但使用两个不同的配置,即用户+密码。

问题: 我认为 Configuration/App 设置可能不足以满足此要求。我找不到使用多个不同参数两次 运行 函数的方法。

问题:我有哪些选择可以实现我的目标?我的一个想法是将 User/PW 放入 functions.json,但我不知道如何从应用程序功能中访问该信息。

你有两个选择:

  1. 读取一个自定义json(不一定读取function.json的值),可以在函数app中添加一个自定义json,然后读取根据 json 文件的层次结构你想要的值,然后使用你在触发器中读取的值。

  2. 使用部署槽。 (这是官方的方法,我觉得完全适合你现在的需求)

在这个新创建的插槽中,您可以在配置设置中使用完全不同的环境变量。

这是文档:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-deployment-slots

我可能会通过一个包含 JSON 数组的设置来做到这一点,即

"Credentials": "[{'username':'***','password':'***'},{'username':'******','password':'******'}]"

然后,假设您想同时处理它们,创建一个函数来解析数组并遍历每个用户名和密码。

如果您需要 运行 它们在不同的时间表上,创建一个共享 Python 函数 DoTheThing(credentialIndex) 实际完成工作,然后创建多个 Azure Functions 只需调用 DoTheThing(0), DoTheThing(1), ...

(安全说明:与手头的问题没有直接关系,但秘密最好保存在密钥库等秘密​​存储中,而不是直接保存在设置中)

EDIT/SOLUTION: 我最终在我的环境变量中有以下键:

"USERS": "[\"UserA\", \"UserB\"]"
"UserA_USER": "Username1"
"UserA_PW": "Password1"
"UserB_USER": "Username2"
"UserB_PW": "Password2"

然后我遍历了 USERS 数组并检索了每个用户的密钥,如下所示:

import os
import json

users = json.loads(os.environ["USERS"])
for u in users:
   user = os.environ[u + "_USER"]
   pw = os.environ[u + "_PW"]
   doStuff(user, pw)