首页 > 解决方案 > 与输入参数并行的 aws 阶跃函数

问题描述

我正在尝试使用 AWS 步骤函数来创建并行执行分支。一个并行分支启动另一个 step 函数调用,我们如何将输入从这个并行分支传递到下一个 step 函数执行

{
  "Comment": "Parallel Example.",
  "StartAt": "FunWithMath",
  "States": {
    "FunWithMath": {
    "Type": "Parallel",
    "End": true,
    "Branches": [
      {
        "StartAt": "Add",  /// This receives some json object here input {}
        "States": {
          "Add": {    
            "Type": "Task",  ***//How to pass the received input to the following arn as input?***
            "Resource": ""arn:aws:states:::states:startExecution",
            Parameters: {
                 "StateMachineArn": "anotherstepfunctionarnpath"
                }
            "End": true
          }
        }
      },
      {
        "StartAt": "Subtract",
        "States": {
          "Subtract": {
            "Type": "Task",
            "Resource": "some lambda arn here,
            "End": true
          }
        }
      }
    ]
   }
  }
}

另一个stepfunctionarnpath

{

        "Comment": "Second state machine",
        "StartAt": "stage1",
         "Resource": "arn:aws:states:::glue:startJobRun.sync",
         "Parameters":{
             "Arguments":{
                 "Variable1" :"???" / how to access the value of the input passed to here
                }
           }
}

标签: amazon-web-servicesstate-machineaws-step-functions

解决方案


您可以使用Input将输出从一个 SFN 传递到另一个:

第一个 SFN(它将调用第二个 SFN)

{
  "Comment": "My first SFN",
  "StartAt": "First SFN",
  "States": {
    "First SFN": {
      "Type": "Task",
      "ResultPath": "$.to_pass",
      "Resource": "arn:aws:lambda:us-east-1:807278658150:function:test-lambda",
      "Next": "Trigger Next SFN"
    },
    "Trigger Next SFN": {
      "Type": "Task",
      "Resource": "arn:aws:states:::states:startExecution",
      "Parameters": {
        "Input": {
          "Comment.$": "$"
        },
        "StateMachineArn": "arn:aws:states:us-east-1:807278658150:stateMachine:MyStateMachine2"
      },
      "End": true
    }
  }
}

第二个 SFN (MyStateMachine2)

{
  "Comment": "A Hello World example of the Amazon States Language using Pass states",
  "StartAt": "Hello",
  "States": {
    "Hello": {
      "Type": "Pass",
      "Result": "Hello",
      "Next": "World"
    },
    "World": {
      "Type": "Pass",
      "Result": "World",
      "End": true
    }
  }
}

第一次SFN的执行

在此处输入图像描述

第二次SFN的执行

在此处输入图像描述

解释 Lambdatest-lambda正在返回:

{
  "user": "stackoverflow",
  "id": "100"
}

它存储在"ResultPath": "$.to_pass"这里的to_pass变量中。我将相同的输出传递给下一个状态机MyStateMachine2

"Input": {
   "Comment.$": "$"
}

在下一个状态机的执行中,您会看到接收到的相同数据作为由第一个 Lambda 创建的输入。

你可以在这里阅读更多关于它的信息。


推荐阅读