amazon-web-services - AWS Step Function 同步任务 token

标签 amazon-web-services aws-lambda aws-api-gateway serverless aws-step-functions

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

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

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

一种选择是在“Step Function Initiator”Lambda 中创建数据捕获 session ,但如何向数据捕获服务提供任务 token ?

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

enter image description here

最佳答案

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

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

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

结果:

执行历史记录和任务 token 中的前几个条目之一是参数的一部分。我们可以退出循环,捕获它,将其发送回 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\"}"
    }
}

关于amazon-web-services - AWS Step Function 同步任务 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66601619/

相关文章:

java - API Gateway Lambda 集成 SelectionPattern 不匹配

typescript - 如何使用 CDK 正确配置 CORS 的 APIGateway

node.js - 亚马逊认知 : How to implement Post Confirmation Trigger which works only after SignupConfirmation not after ForgotPassword/ResetPassword Confirmation

amazon-web-services - 如何从 CloudFormation AWS::Lambda::Alias 获取函数名称和别名?

amazon-web-services - 旧 Lambda 函数是使用新 Lambda 函数更新现有 API Gateway 后触发的函数

amazon-web-services - 为什么我可以从 VPC 外的 aws lambda 调用 VPC 内的 aws lambda,反之则不行?

amazon-web-services - 如何从 Amazon Certificate Manager 下载公共(public)证书

amazon-web-services - Lambda 函数所承担的角色的 ARN 是什么?

amazon-web-services - 如何在 AWS Elastic Beanstalk 上安装音频波形程序

amazon-web-services - CloudFormation,AWS Lambda : Ignore Parameter from Old Template