【问题标题】:get Response from AWS step function after execution of each map iteration在执行每个地图迭代后从 AWS step 函数获取响应
【发布时间】:2022-12-09 09:34:50
【问题描述】:

我有一个用例,其中用户定义了一个工作流。当用户点击 API 时,step 函数就会启动。 lambda 返回基于用户的步骤列表并启动工作流,例如:

步骤1。它处理(提取)文档,
第2步。插入一些数据到 D B

第三步。 .....

第4步。 .....

这里的步骤在地图中,因为这些步骤是从 lambda 返回的。 有没有什么方法可以从每个地图迭代中获得响应,以便我可以向用户展示流程在哪一步,以及上一步的输出。

这是我的阶跃函数设计:

测试获取输入工作流:返回一个数组:[step1, step2, ....]

工作流步骤-lambda:根据步骤名称调用一些 lambda

【问题讨论】:

  • 考虑在每个地图迭代中包含一个任务,以将状态更新事件放入 EventBridge。

标签: aws-api-gateway aws-step-functions aws-event-bridge


【解决方案1】:

假设您使用的是标准工作流,您可以使用 GetExecutionHistory API 操作获取此信息:https://docs.aws.amazon.com/step-functions/latest/apireference/API_GetExecutionHistory.html

您需要查找 MapIterationSucceeded 类型的事件,获取 previousEventId,然后在 HistoryEvent 中查找具有该 ID 的输出。

例如,如果您有这样的状态机:

{    
"StartAt": "Generate Array for Map",
"States": {
  "Generate Array for Map": {
    "Type": "Pass",
    "Next": "Map",
    "Result": [
      1,
      2,
      3,
      4,
      5
    ]
  },
  "Map": {
    "Type": "Map",
    "ItemProcessor": {
      "ProcessorConfig": {
        "Mode": "INLINE"
      },
      "StartAt": "Generate Random Number",
      "States": {
        "Generate Random Number": {
          "Type": "Pass",
          "End": true,
          "Parameters": {
            "Random Number.$": "States.MathRandom(1,1000)"
          }
        }
      }
    },
    "End": true
  }
}

}

您的执行历史将如下所示:

{
"events": [
    {
        "timestamp": "2022-12-08T16:44:07.651000-08:00",
        "type": "ExecutionStarted",
        "id": 1,
        "previousEventId": 0,
        "executionStartedEventDetails": {
            "input": "{
    "Comment": "Insert your JSON here"
}",
            "inputDetails": {
                "truncated": false
            },
            "roleArn": "arn:aws:iam::000000000000:role/service-role/StepFunctions-MapTest-role-613230dd"
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateEntered",
        "id": 2,
        "previousEventId": 0,
        "stateEnteredEventDetails": {
            "name": "Generate Array for Map",
            "input": "{
    "Comment": "Insert your JSON here"
}",
            "inputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateExited",
        "id": 3,
        "previousEventId": 2,
        "stateExitedEventDetails": {
            "name": "Generate Array for Map",
            "output": "[1,2,3,4,5]",
            "outputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapStateEntered",
        "id": 4,
        "previousEventId": 3,
        "stateEnteredEventDetails": {
            "name": "Map",
            "input": "[1,2,3,4,5]",
            "inputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapStateStarted",
        "id": 5,
        "previousEventId": 4,
        "mapStateStartedEventDetails": {
            "length": 5
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationStarted",
        "id": 6,
        "previousEventId": 5,
        "mapIterationStartedEventDetails": {
            "name": "Map",
            "index": 0
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationStarted",
        "id": 7,
        "previousEventId": 5,
        "mapIterationStartedEventDetails": {
            "name": "Map",
            "index": 1
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationStarted",
        "id": 8,
        "previousEventId": 5,
        "mapIterationStartedEventDetails": {
            "name": "Map",
            "index": 2
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationStarted",
        "id": 9,
        "previousEventId": 5,
        "mapIterationStartedEventDetails": {
            "name": "Map",
            "index": 3
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationStarted",
        "id": 10,
        "previousEventId": 5,
        "mapIterationStartedEventDetails": {
            "name": "Map",
            "index": 4
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateEntered",
        "id": 11,
        "previousEventId": 6,
        "stateEnteredEventDetails": {
            "name": "Generate Random Number",
            "input": "1",
            "inputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateExited",
        "id": 12,
        "previousEventId": 11,
        "stateExitedEventDetails": {
            "name": "Generate Random Number",
            "output": "{"Random Number":259}",
            "outputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationSucceeded",
        "id": 13,
        "previousEventId": 12,
        "mapIterationSucceededEventDetails": {
            "name": "Map",
            "index": 0
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateEntered",
        "id": 14,
        "previousEventId": 7,
        "stateEnteredEventDetails": {
            "name": "Generate Random Number",
            "input": "2",
            "inputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateExited",
        "id": 15,
        "previousEventId": 14,
        "stateExitedEventDetails": {
            "name": "Generate Random Number",
            "output": "{"Random Number":776}",
            "outputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationSucceeded",
        "id": 16,
        "previousEventId": 15,
        "mapIterationSucceededEventDetails": {
            "name": "Map",
            "index": 1
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateEntered",
        "id": 17,
        "previousEventId": 8,
        "stateEnteredEventDetails": {
            "name": "Generate Random Number",
            "input": "3",
            "inputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateExited",
        "id": 18,
        "previousEventId": 17,
        "stateExitedEventDetails": {
            "name": "Generate Random Number",
            "output": "{"Random Number":743}",
            "outputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationSucceeded",
        "id": 19,
        "previousEventId": 18,
        "mapIterationSucceededEventDetails": {
            "name": "Map",
            "index": 2
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateEntered",
        "id": 20,
        "previousEventId": 9,
        "stateEnteredEventDetails": {
            "name": "Generate Random Number",
            "input": "4",
            "inputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateExited",
        "id": 21,
        "previousEventId": 20,
        "stateExitedEventDetails": {
            "name": "Generate Random Number",
            "output": "{"Random Number":790}",
            "outputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationSucceeded",
        "id": 22,
        "previousEventId": 21,
        "mapIterationSucceededEventDetails": {
            "name": "Map",
            "index": 3
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateEntered",
        "id": 23,
        "previousEventId": 10,
        "stateEnteredEventDetails": {
            "name": "Generate Random Number",
            "input": "5",
            "inputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "PassStateExited",
        "id": 24,
        "previousEventId": 23,
        "stateExitedEventDetails": {
            "name": "Generate Random Number",
            "output": "{"Random Number":632}",
            "outputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapIterationSucceeded",
        "id": 25,
        "previousEventId": 24,
        "mapIterationSucceededEventDetails": {
            "name": "Map",
            "index": 4
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapStateSucceeded",
        "id": 26,
        "previousEventId": 25
    },
    {
        "timestamp": "2022-12-08T16:44:07.698000-08:00",
        "type": "MapStateExited",
        "id": 27,
        "previousEventId": 25,
        "stateExitedEventDetails": {
            "name": "Map",
            "output": "[{"Random Number":259},{"Random Number":776},{"Random Number":743},{"Random Number":790},{"Random Number":632}]",
            "outputDetails": {
                "truncated": false
            }
        }
    },
    {
        "timestamp": "2022-12-08T16:44:07.745000-08:00",
        "type": "ExecutionSucceeded",
        "id": 28,
        "previousEventId": 27,
        "executionSucceededEventDetails": {
            "output": "[{"Random Number":259},{"Random Number":776},{"Random Number":743},{"Random Number":790},{"Random Number":632}]",
            "outputDetails": {
                "truncated": false
            }
        }
    }
]

}

【讨论】:

    猜你喜欢
    • 2019-09-07
    • 2018-04-18
    • 2022-11-10
    • 2016-11-03
    • 2023-01-12
    • 1970-01-01
    • 2018-12-27
    • 2023-02-10
    • 2018-03-04
    相关资源
    最近更新 更多