我正在尝试将参数从状态机传递到aws python lambda中。我编写了以下函数:
{
"Comment": "test lambda execution with state machine",
"StartAt": "testPassInArgs",
"States": {
"testPassInArgs": {
"Type": "Task",
"Resource":"arn:aws:lambda:....function:testPassInArgs",
"Next": "testRecieveArgs"
},
"testRecieveArgs": {
"Type": "Task",
"InputPath": "$.a",
"Parameters": {
"InputPath": "$.a"},
"Resource": "arn:aws:lambda:....:function:testRecieveArgs",
"End": true
}
}
}
以下是 lambda 函数testPassInArgs:
import json
def lambda_handler(event, context):
stations={}
stations['a']='A'
stations['b']='B'
stations['c']='C'
return {
'a':stations['a'],
'b':stations['b'],
'c':stations['c']
}
另一个lambda 'testRecieveArgs:
import json
def lambda_handler(event, context):
# TODO implement
out={}
if type(event) == dict:
for item in event:
out[item+item] = event[item]+event[item]
print(item)
print(event[item])
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!'),
'event': out
}
我本以为状态机第二部分中的"参数"参数会解析第一个 lambda 的输出,并仅将第一部分(即"A"(传递给第二个 lambda。然而,事实并非如此。第二个 lambda 的输出为:
"InputPathInputPath": "$.a$.a"
第二个 lambda 的输入只是第一个 lambda 的输出。
我想解析第一个 lambda 的输出,并将每个部分并行发送到下游的不同 lambda。
我这里一定少了一招?如果有人知道这将是一个很大的帮助?
附言我相信我可以处理并行化部分,它只是解析参数,然后将它们传递给我正在努力的下游函数。
第一个 Lambda 函数的输出是
{
"a": "A",
"b": "B",
"c": "C"
}
如果第二个任务定义是:
"testRecieveArgs": {
"Type": "Task",
"InputPath": "$.a",
"Resource": "arn:aws:lambda:....:function:testRecieveArgs",
"End": true
}
第二个 Lambda 将接收"A"
作为其输入。但是,您添加了此内容
"Parameters": {
"InputPath": "$.a"
},
到第二个任务定义,这将覆盖输入 JSON
{
"InputPath": "$.a"
}
是错别字吗?