我正在尝试从状态机将参数传递给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
}
我希望状态机第二部分中的'Parameters'参数将解析来自第一lambda的输出,并且仅将第一部分(即“ A”)传递给第二lambda。但是事实并非如此。第二个lambda的输出是:
"InputPathInputPath": "$.a$.a"
第二个lambda的输入仅仅是第一个lambda的输出。
我想解析第一个lambda的输出,并将每个部分并行发送到下游的另一个lambda。
我一定在这里错过了一个把戏吗?如果有人知道这会对您有很大帮助?
p.s。我确信我可以处理并行化部分,只需解析参数,然后将其传递给我正在苦苦挣扎的下游函数即可。
答案 0 :(得分:1)
第一个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"
}
是错字吗?