0

使用 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": "*********"
  }
}

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

问题: 我认为配置/应用程序设置可能不足以解决此问题。我找不到使用多个不同参数两次运行该函数的方法。

问题:我有哪些选择才能达到我的目标?我的一个想法是将用户/密码放入 functions.json 中,但我不知道如何从应用程序函数中访问该信息。

4

3 回答 3

1

你有两个选择:

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

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

在此处输入图像描述

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

这是文档:

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

于 2020-06-09T07:11:40.600 回答
0

编辑/解决方案:我最终在我的环境变量中有以下键:

"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)
于 2020-06-18T20:17:30.827 回答
0

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

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

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

如果您需要在不同的计划上运行它们,请创建一个共享的 Python 函数DoTheThing(credentialIndex)来实际完成工作,然后创建多个 Azure 函数来简单地调用DoTheThing(0), DoTheThing(1), ...

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

于 2020-06-09T14:37:00.777 回答