是否可以选择从Azure功能的部署中获取输出值的事件网格触发器url + key?
我们想要的方案如下: - 我们通过ARM在VSTS版本中部署功能服务。 - 部署了Function服务后,我们部署了事件网格订阅。
谢谢, Shraddha Agrawal
答案 0 :(得分:1)
是的,有一种方法可以使用REST API来获取功能访问代码。以下是步骤:
假设函数的名称是 EventGridTrigger2 和run.csx:
#r "Newtonsoft.Json"
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
public static void Run(JObject eventGridEvent, TraceWriter log)
{
log.Info(eventGridEvent.ToString(Formatting.Indented));
}
和function.json文件:
{
"bindings": [
{
"type": "eventGridTrigger",
"name": "eventGridEvent",
"direction": "in"
}
],
"disabled": false
}
正如您所看到的,上述绑定是无类型的,适用于任何输出架构,例如 InputEventSchema , EventGridSchema (默认架构)和 CloudEventV01Schema (修复了一些bug之后)。
创建的订阅的目标属性如下所示:
"destination": {
"properties": {
"endpointUrl": null,
"endpointBaseUrl": "https://myFunctionApp.azurewebsites.net/admin/extensions/EventGridExtensionConfig"
},
"endpointType": "WebHook"
},
请注意,Azure EventGrid触发器的完整subscriberUrl具有以下格式,其中查询字符串包含用于将请求路由到正确函数的参数:
https://{FunctionApp}.azurewebsites.net/admin/extensions/EventGridExtensionConfig?functionName={FunctionName}&code={masterKey}
为了创建订阅者,我们必须使用其完整的subscriberUrl包含查询字符串。在这一刻,唯一未知的值是masterKey。
要获取Function App(Host)masterkey,我们必须使用管理REST API调用:
https://management.azure.com/subscriptions/{mySubscriptionId}/resourceGroups/{myResGroup}/providers/Microsoft.Web/sites/{myFunctionApp}/functions/admin/masterkey?api-version=2016-08-01
响应的格式如下:
{
"masterKey": "*************************************************"
}
请注意,此次通话需要验证不记名令牌。
一旦我们为FunctionApp(主机)提供了一个masterKey,我们就可以将它用于该主机中的任何功能。
答案 1 :(得分:1)
我想您在问:“如何使用ARM在VSTS版本中部署Azure功能并获取其触发网址,以便我可以在下一个VSTS发布步骤中使用触发网址?”
它没有很好的文档记录,但使用official docs,this blog post和一些反复试验,我们已经弄明白了。
这就是ARM的样子:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {}
"variables": {},
"resources": [],
"outputs": {
"triggerUrl": {
"type": "string",
"value": "[listsecrets(resourceId('Microsoft.Web/sites/functions', 'functionAppName', 'functionName'),'2015-08-01').trigger_url]"
}
}
}
您使用“Azure资源组部署”步骤部署它,确保在“部署输出”文本框中输入变量名称,例如triggerUrl
。
示例输出:
{"triggerUrl":{"type":"String","value":"https://functionAppName.azurewebsites.net/api/functionName?code=1234"}}
然后,您将之后的PowerShell步骤(或Azure PowerShell步骤)从变量中获取值。
$environmentVariableName = "triggerUrl"
$outputVariables = (Get-Item env:$environmentVariableName).Value
然后用它做点什么。
答案 2 :(得分:0)
随着Functions App V2.0.12050的更新,事件网格触发器的URI有所不同。另请参见here