微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AWS Step Function 同步任务令牌

如何解决AWS Step Function 同步任务令牌

我有一个用例,我想使用 Step Functions 来解决它,但我找不到解决此问题的方法。您的帮助将不胜感激。

问题是这样的:我有一个 Amazon API Gateway,它有一个 /start 端点。此端点的 POST 应启动数据处理会话并将 URL 返回到 API 客户端可用于捕获某些数据的应用程序。数据捕获完成后,会在最终响应通过回调发送到 API 客户端之前进行一些处理。

正如您在下面看到的,我的想法是生成一个任务令牌并将其发送到数据捕获服务。然后,当用户数据捕获完成时,服务可以向 Step Function API 发送请求以说明该阶段已完成。问题是如何从 Step Function 中将 URL 返回给客户端?我不想使用回调来做到这一点。

一种选择是在“Step Function Initiator”Lambda 中创建数据捕获会话,但是我如何为数据捕获服务提供任务令牌?

实际上,我需要的是某种机制,可以将某些内容(来自该调用的 URL 或来自第一阶段的任务令牌)从 Step Function 内同步返回到启动执行的 Lambda。这可能吗?你会如何解决这个问题?

enter image description here

解决方法

  • 在步进函数启动器 lambda 中,您必须执行 start-execution 返回 executionArn
  • 接下来,您可以循环调用 get-execution-history api,任务令牌将成为“捕获数据”任务参数的一部分。由于这是第一步,这确实应该在几秒钟内完成,因此,我们可以每秒继续运行此循环,直到启动步骤函数中所需的步骤并获得任务令牌。

以这个例子为例,我将任务令牌传递给当前步骤函数的另一个步骤函数调用。

{
   "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 Gateway。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。