代码之家  ›  专栏  ›  技术社区  ›  vkt

与输入参数并行的aws阶跃函数

  •  0
  • vkt  · 技术社区  · 6 年前

    我正在尝试使用AWS 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
              }
            }
          }
        ]
       }
      }
    }
    

    其他步骤函数路径 :

    {
    
            "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
                    }
               }
    }
    
    0 回复  |  直到 6 年前
        1
  •  4
  •   CK__    6 年前

    您可以使用 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的执行

    enter image description here

    SFN第二次执行

    enter image description here

    解释 Lambda test-lambda 正在返回:

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

    存储在 "ResultPath": "$.to_pass" 在这里 to_pass 变量。我正在将相同的输出传递给下一个状态机 MyStateMachine2 这是通过以下方式完成的

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

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

    你可以阅读更多关于它的信息 here .