【问题标题】:Webhook Activity runs forever in ADF V2Webhook 活动在 ADF V2 中永久运行
【发布时间】:2020-12-01 20:47:41
【问题描述】:
我想通过我在 Power Shell 中编写代码的运行手册来处理我的多维数据集。我想从 ADF 的 webhook 活动中调用此运行手册。但是此活动一直运行到超时并且无法完成,但是它正在处理多维数据集通过触发运行手册成功。我是否必须编写更多代码才能使其在 ADF 中成功或失败。还是我的配置中缺少其他内容。
【问题讨论】:
标签:
powershell
webhooks
azure-data-factory-2
azure-automation
【解决方案1】:
如果您希望 ADF 等到运行手册完成,那么 Webhook 活动(就像您正在做的那样)是正确的。但是您的 Runbook 需要使用 $webhookData parameter in the Azure Automation webhook documentation 接收 callbackUri 参数。并且 Runbook 需要对 ADF 回调 API 进行 Web 回调以告知其已完成。
另一方面,如果您不希望 ADF 等待或知道 Runbook 是否失败,则使用 Web Activity 而不是 Webhook Activity。
如果继续使用 ADF Webhook,则需要更改 Azure 自动化运行手册以包含以下参数和解析:
param(
[object] $WebhookData
)
$ErrorActionPreference = "Stop";
try
{
#parse the webhook parameters
if (-Not $WebhookData.RequestBody)
{
#we're testing in the test pane
$WebhookData = ConvertFrom-Json -InputObject $WebhookData
}
$WebhookBody = ConvertFrom-Json -InputObject $WebhookData.RequestBody
[string] $callbackUri = $WebhookBody.callbackUri
#complete your typical runbook work here...
if ($callbackUri)
{
$null = Invoke-WebRequest -Method Post -Uri $callbackUri -ContentType "application/json" -Body '{"StatusCode": "200"}' -UseBasicParsing
}
}
catch
{
if ($callbackUri)
{
$null = Invoke-WebRequest -Method Post -Uri $callbackUri -ContentType "application/json" -Body '{"StatusCode": "500", "Error": {"ErrorCode":100,"Message","$_"}}' -UseBasicParsing
}
"Failed: $_"
throw $_
}
这应该可以解决您认为 Runbook 永远运行的 ADF 问题。