向HTTP请求返回动态信息,触发步进函数



TLDR:我如何从HTTP触发的阶跃函数lambda传递动态数据到我的HTTP响应?

我有一个由HTTP请求触发的步骤函数状态机。它是使用无服务器框架和无服务器步骤函数插件设置的,但我认为解决方案是通用的/可以应用到我的模板。

使用http处理程序的默认配置,如

stepFunctions:
stateMachines:
hellostepfunc1:
events:
- http:
path: hello
method: GET
definition:
...

返回一个ARN和一个开始日期(这显然不是理想的,因为它暴露了我的帐户ID等)

{"executionArn":"arn:aws:states:x:x:execution:hellostepfunc1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx","startDate":1.68062354019E9}
我可以配置一个响应模板来覆盖这个
stepFunctions:
stateMachines:
hellostepfunc1:
events:
- http:
path: hello
method: GET
response:
headers:
Content-Type: "'application/json'"
template:
application/json: |
{
"status": 200,
"info": "OK"
}
definition:

工作正常,并按照预期使用以下内容响应HTTP请求

{"status": 200,"info": "OK"}

但是,我想从lambda函数返回信息,如错误状态或不同的状态码等。

  • 我已经在状态机步骤上尝试了ResultPath,但这只影响发送到下一步的数据,并且不改变HTTP响应

  • 我已经尝试修改模板与变量,但他们引用了原始的(arn和开始日期),而不是从我的函数返回的

template:
application/json: |
{
"statusCode": "$input.path('$.statusCode')", // blank (i have returned it in my function)
"body": "$input.body", // returns ARN and start date
"path": "$input.path('$')" // returns ARN and start date
}

我考虑过只是调用一个标准的API网关lambda,从那里返回我的HTTP响应,并使用Step Functions SDK单独触发状态机,但感觉很复杂。

我如何通过动态数据到我的HTTP响应从一步函数lambda触发HTTP?

您需要使用步骤函数StartSyncExecution API Action返回给API Gateway的output字段的数据。

您可以在这里找到一个更完整的示例(使用SAM而不是Serverless,但应该是类似的):通过Amazon API Gateway触发并等待响应。

最新更新