如何实现AWS APIGATEWAY同步调用并等待Step Function执行完成?
解决步骤
要实现API Gateway同步等待Step Function执行完成再返回结果,需要按以下规则配置:
1. 先确认Step Function工作流类型
只有 Express类型的Step Function 支持同步调用,Standard类型工作流本身不提供同步执行能力,若你当前使用的是Standard流,需先切换为Express类型。
2. 替换API Gateway集成的Step Function API
你当前默认调用的是异步API StartExecution,该API只会触发工作流、立即返回执行ID,不会等待执行结果。需要将集成的API替换为同步执行API StartSyncExecution:
- 进入API Gateway对应资源的集成配置页
- 集成类型选择
AWS服务,服务列表选Step Functions,HTTP方法选择POST,动作栏填写StartSyncExecution - 配置执行角色,该角色必须包含
states:StartSyncExecution权限,且信任策略允许apigateway.amazonaws.com扮演该角色
3. 配置请求映射模板
在集成请求的「映射模板」板块添加application/json类型的模板,构造符合StartSyncExecution要求的请求参数,示例如下:
{ "stateMachineArn": "替换为你的Step Function ARN", "input": "$util.escapeJavaScript($input.body)", "name": "$context.requestId" }
可根据业务需求新增其他入参。
4. 配置响应映射模板
在集成响应的「映射模板」板块添加application/json类型的模板,提取工作流执行结果作为API返回值,示例如下:
#set($executionResult = $input.path('$')) $executionResult.output
若需要返回执行状态、错误信息等元数据,可自行调整返回字段。
5. 注意超时限制
API Gateway的最长集成等待时间为29秒,若你的Step Function执行时长超过29秒,API Gateway会直接返回504超时错误。这种场景下建议改用异步回调模式,避免同步调用。
内容的提问来源于stack exchange,提问作者Royi Namir
相关产品推荐
相关产品推荐

