【问题标题】:AWS Step-Function: pass a specific value from one AWS lambda to another in step function parallel stateAWS Step-Function:将特定值从一个 AWS lambda 传递到另一个在 step 函数并行状态下
【发布时间】:2021-07-14 21:22:13
【问题描述】:

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

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

整个 id 对象应该被传递给所有的 lambdas。请提出实现此目的的方法。

{
    "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
                            }
                        }
                     }
                   
                   }
                    
                ]
            }
        }
    }
}

【问题讨论】:

    标签: amazon-web-services aws-lambda aws-step-functions


    【解决方案1】:

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

    “参数”:{ "toprocess.$": "$.MetaData.CorrelationId" },

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

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

    【讨论】:

      【解决方案2】:

      您正在寻找的是Map State。在这种状态下,您传入迭代器,在您的情况下是 id 的路径。地图状态将为列表中的每个项目运行一次。在地图状态中,您有一个完整的状态机,因此您可以调用 Lambda 或任何其他状态。如果需要,它可以控制同时运行的数量。

      【讨论】:

        猜你喜欢
        • 2023-02-03
        • 2022-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多