使用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": "*********"
}
}
目标: 我想运行两个具有相同功能的实例,但是要使用两个不同的配置,即Users + Passwords。
问题: 我认为配置/应用程序设置可能不足以实现此目的。我找不到使用多个不同参数两次运行函数的方法。
问题:我必须实现哪些选择?我的一个想法是将User / PW放到functions.json中,但我不知道如何从app函数中访问该信息。
答案 0 :(得分:1)
您有两个选择:
读取自定义json(不必读取function.json的值),可以在函数app中添加自定义json,然后根据json文件的层次结构读取所需的值,然后使用您在触发器中读取的值。
使用部署槽。 (这是官方方法,我认为这完全适合您当前的需求)
在这个新创建的插槽中,您可以在“配置设置”中使用完全不同的环境变量。
这是文档:
https://docs.microsoft.com/en-us/azure/azure-functions/functions-deployment-slots
答案 1 :(得分:0)
我可能会通过拥有一个包含JSON数组的单一设置来实现的,即
"Credentials": "[{'username':'***','password':'***'},{'username':'******','password':'******'}]"
然后,假设您想同时处理它们,则创建一个函数来解析数组并遍历每个用户名和密码。
如果需要按照不同的时间表运行它们,请创建一个共享的Python函数DoTheThing(credentialIndex)
来实际完成工作,然后创建多个Azure函数,这些函数只需调用DoTheThing(0)
,DoTheThing(1)
等。
(安全说明:与当前问题不直接相关,但最好将秘密保存在Key Vault等秘密存储中,而不是直接保存在设置中)
答案 2 :(得分: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)