AWS Step-Function:在步进函数并行状态下将特定值从一个 AWS lambda 传递到另一个 AWS l



我有下面的状态机。要求是有一个 lambda 来查询数据库并获取所有 ID。接下来,我有一个并行状态调用,它一次调用五个以上的 lambda。我需要将各自的 id 传递给每个 lambda,而不是将所有获取的 id 传递给所有 lambda。

在下面的状态语言中,第一次调用是DB_CALL,假设它返回 {id1, id2, id3, id4, id5, id6},我只想将 id1 传递给 First_Lambda,将 id2 传递给Second_Lambda等等......

整个 id 对象应该传递给所有 lambda。请提出一种方法来实现此目的。

{
"Comment": "Concurrent Lambda calls",
"StartAt": "StarterLambda",
"States": {
"StarterLambda": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:DB_CALL",
"Next": "ParallelCall"
},
"State": {
"ParallelCall": {
"Type": "Parallel",
"End": true,
"Branches": [
{
"StartAt": "First",
"States": {
"First": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:First_Lambda",
"TimeoutSeconds": 120,
"End": true
}
}
},
{
"StartAt": "Second",
"States": {
"Second": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Second_Lambda",
"Retry": [ {
"ErrorEquals": ["States.TaskFailed"],
"IntervalSeconds": 1,
"MaxAttempts": 2,
"BackoffRate": 2.0
} ],
"End": true
}
}
},
{
"StartAt": "Third",
"States": {
"Third": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Third_Lambda",
"Catch": [ {
"ErrorEquals": ["States.TaskFailed"],
"Next": "CatchHandler"
} ],
"End": true
},
"CatchHandler": {
"Type": "Pass",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:CATCH_HANDLER",
"End": true
}
}
},
{
"StartAt": "Fourth",
"States": {
"Fourth": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Fourth_Lambda",
"TimeoutSeconds": 120,
"End": true
}
}
},
{
"StartAt": "Fifth",
"States": {
"Fifth": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Fifth_Lambda",
"TimeoutSeconds": 120,
"End": true
}
}
},
{
"StartAt": "Sixth",
"States": {
"Sixth": {
"Type": "Task",
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:Sixth_Lambda",
"TimeoutSeconds": 120,
"End": true
}
}
}

}

]
}
}
}
}

您可以使用步进函数参数选项。 这将允许您将特定值或 json 发送到下一个 lambda。

"参数":{ "toprocess.$": "$.元数据.相关性 Id" },

因此,与第一个 lambda 相比,对这个 lambda 的输入将小于 dto。因此,在从此 lambda 返回值时,请避免将其分配回 Step 函数结果。

"OutputPath": "$",     
"ResultPath": "$.PartialResutl",

您要查找的是地图状态。使用此状态,您可以传入迭代器,在您的情况下是指向 id 的路径。映射状态将为列表中的每个项目运行一次。在映射状态中,您有一个完整的状态机,因此您可以调用 Lambda 或任何其他状态。如果需要,它具有控件来限制一次运行的数量。

相关内容

最新更新