如何从 adf webhook 活动将输入参数传递到 azure python3 runbook

问题描述 投票:0回答:2

我想将参数从 azure 数据工厂管道 webhook 活动传递到我的 azure 自动化 python runbook。 我该怎么做?

python azure-data-factory azure-automation azure-runbook
2个回答
0
投票

对于这个问题,我在我这边测试了一下,发现很难通过数据工厂管道中的webhook活动请求python runbook。我在 Runbook 中的 python 代码如下所示:

#!/usr/bin/env python3

import sys
import re
import json
from urllib import parse

def fixJSON(string):
  res = re.sub(r"([^{}:,]+):([^{}:,]+),?", r'"\1":"\2",', string )
  res = re.sub('"[ ]*,[ ]*}', '"}', res)
  # and empty string
  res = re.sub("\"(''|\")\"", '""', res)
  # property : {...}
  res = re.sub(r"([^{}:,]+)(?=:{)", r'"\1"', res )
  return res

print("===")

test = str(sys.argv[1])
jsonStr = fixJSON(test)

jsonStr = jsonStr.replace("\"\"", "\"")
print(jsonStr)

jsonData = json.loads(jsonStr)
print(jsonData["RequestBody"])

我用请求正文测试它:

{
    "name":"hury"
}

如果我在邮递员中测试它,如下图所示(请求正文中没有换行符),它工作正常:

但是如果请求正文中有换行符(如下图所示),则在 python runbook 中执行

\r\n
时总是会失败。不幸的是,我们似乎无法删除python runbook中的换行符(我用多种方法进行了测试,例如
replace("\r\n", "")
xxx.rstrip()
,它们都不起作用)

如果我们只需要在postman中请求,我们可以设置请求体不带换行符。但是,如果我们在数据工厂的 webhook 活动中请求它,即使我只是将请求主体设置为一行,请求主体似乎也会使用换行符进行格式化:

所以我建议您使用“Web”活动而不是“Webhook”活动,因为在“Web”活动中我们可以输入字符串而不是json数据作为请求正文。如果在“Webhook”活动中,它不允许我们在请求正文中输入无效的 json 数据。


0
投票

正如 Hury Shen 提到的,使用正则表达式解析 sys.argv 值是我看到的唯一选项。我尝试了很多方法来找到一种更复杂/更美观的方法,但到目前为止还没有这样的选项。

我有 1 个解决方法,

  1. 创建 Powershell Runbook 而不是 Python。
  2. 调用 webhook 并将参数传递给 powshell runbook,它具有更多本机支持。你不需要做正则表达式。您可以使用 [.] 点运算符获取参数值。
  3. 使用也支持参数的 line 命令从该 powshell runbook 调用 python runbook。 (简单的谷歌搜索就能找到它)。

使用 powshell 编排你的 Python Runbook。 我知道这不是利基解决方案,但在我必须编写大量 Python 代码的地方帮助了我。

评论提出进一步问题,很乐意帮忙

© www.soinside.com 2019 - 2024. All rights reserved.