AWS Step Function 同步任务令牌
AWS Step Function Synchronous Task Token
我有一个用例想使用 Step Functions 来解决,但我找不到解决这个问题的方法。非常感谢您的帮助。
问题是这样的:我有一个 Amazon API 网关,它有一个 /start
端点。此端点的 POST
应该启动数据处理会话,return 一个 URL 到 API 客户端可以用来捕获一些数据的应用程序。数据捕获完成后,会在最终响应通过回调发送到 API 客户端之前进行一些处理。
正如您在下面看到的,我的想法是生成一个任务令牌并将其发送到数据捕获服务。然后,当用户数据捕获完成时,该服务可以向 Step Function API 发送请求,表明该阶段已完成。问题是我如何从 Step Function 中将 return URL 发送给客户端?我不想使用回调来执行此操作。
一种选择是在 'Step Function Initiator' Lambda 中创建数据捕获会话,但我该如何为数据捕获服务提供任务令牌?
真的,我需要的是某种机制,可以从 Step Function 到 Lambda 同步 return 某些东西(来自该调用的 URL 或来自第一阶段的任务令牌开始执行。这可能吗?你会如何解决这个问题?
- 在 step function initiator lambda 中,您必须执行 start-execution 其中 returns 和
executionArn
- 接下来,您可以循环调用get-execution-history api,任务令牌将成为'capture data'任务参数的一部分。由于这是第一步,这确实应该在几秒钟内完成,因此,我们可以保持 运行 每秒循环一次,直到启动 step 函数中的所需步骤并获得任务令牌。
举个例子,我将任务令牌传递给当前步骤函数调用的另一个步骤函数。
{
"StartAt":"ChildTask",
"States":{
"ChildTask":{
"End":true,
"Type":"Task",
"Resource":"arn:aws:states:::states:startExecution.waitForTaskToken",
"Parameters":{
"Input":{
"token.$":"$$.Task.Token",
"foo":"bar"
},
"StateMachineArn":"arn:aws:states:us-east-1:110011001100:stateMachine:ChildStateMachine",
"Name":"MyExecutionName"
}
}
}
}
获取执行历史:
aws stepfunctions get-execution-history --execution-arn arn:aws:states:us-east-1:110011001100:execution:ParentStateMachine:667102b3-b19c-b7ab-b119-9ec6cf23e505
结果:
执行历史记录和任务令牌中的前几个条目之一是参数的一部分。我们可以退出循环,抓住它,将其发送回 Api 网关。
{
"timestamp": "2021-03-12T13:56:58.097000-05:00",
"type": "TaskScheduled",
"id": 3,
"previousEventId": 2,
"taskScheduledEventDetails": {
"resourceType": "states",
"resource": "startExecution.waitForTaskToken",
"region": "us-east-1",
"parameters": "{\"Input\":{\"foo\":\"bar\",\"token\":\"o6QVQ9gls.......=\"},\"StateMachineArn\":\"arn:aws:states:us-east-1:110011001100:stateMachine:ChildStateMachine\",\"Name\":\"MyExecutionName\"}"
}
}
我有一个用例想使用 Step Functions 来解决,但我找不到解决这个问题的方法。非常感谢您的帮助。
问题是这样的:我有一个 Amazon API 网关,它有一个 /start
端点。此端点的 POST
应该启动数据处理会话,return 一个 URL 到 API 客户端可以用来捕获一些数据的应用程序。数据捕获完成后,会在最终响应通过回调发送到 API 客户端之前进行一些处理。
正如您在下面看到的,我的想法是生成一个任务令牌并将其发送到数据捕获服务。然后,当用户数据捕获完成时,该服务可以向 Step Function API 发送请求,表明该阶段已完成。问题是我如何从 Step Function 中将 return URL 发送给客户端?我不想使用回调来执行此操作。
一种选择是在 'Step Function Initiator' Lambda 中创建数据捕获会话,但我该如何为数据捕获服务提供任务令牌?
真的,我需要的是某种机制,可以从 Step Function 到 Lambda 同步 return 某些东西(来自该调用的 URL 或来自第一阶段的任务令牌开始执行。这可能吗?你会如何解决这个问题?
- 在 step function initiator lambda 中,您必须执行 start-execution 其中 returns 和
executionArn
- 接下来,您可以循环调用get-execution-history api,任务令牌将成为'capture data'任务参数的一部分。由于这是第一步,这确实应该在几秒钟内完成,因此,我们可以保持 运行 每秒循环一次,直到启动 step 函数中的所需步骤并获得任务令牌。
举个例子,我将任务令牌传递给当前步骤函数调用的另一个步骤函数。
{
"StartAt":"ChildTask",
"States":{
"ChildTask":{
"End":true,
"Type":"Task",
"Resource":"arn:aws:states:::states:startExecution.waitForTaskToken",
"Parameters":{
"Input":{
"token.$":"$$.Task.Token",
"foo":"bar"
},
"StateMachineArn":"arn:aws:states:us-east-1:110011001100:stateMachine:ChildStateMachine",
"Name":"MyExecutionName"
}
}
}
}
获取执行历史:
aws stepfunctions get-execution-history --execution-arn arn:aws:states:us-east-1:110011001100:execution:ParentStateMachine:667102b3-b19c-b7ab-b119-9ec6cf23e505
结果:
执行历史记录和任务令牌中的前几个条目之一是参数的一部分。我们可以退出循环,抓住它,将其发送回 Api 网关。
{
"timestamp": "2021-03-12T13:56:58.097000-05:00",
"type": "TaskScheduled",
"id": 3,
"previousEventId": 2,
"taskScheduledEventDetails": {
"resourceType": "states",
"resource": "startExecution.waitForTaskToken",
"region": "us-east-1",
"parameters": "{\"Input\":{\"foo\":\"bar\",\"token\":\"o6QVQ9gls.......=\"},\"StateMachineArn\":\"arn:aws:states:us-east-1:110011001100:stateMachine:ChildStateMachine\",\"Name\":\"MyExecutionName\"}"
}
}