You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Step Functions是否支持二进制数据?集成API Gateway遇输入为空问题

解决API Gateway集成Step Functions输入为空问题及二进制数据支持说明

我来帮你拆解这两个问题,一步步解决:

一、先明确Step Functions对二进制数据的支持情况

Step Functions不直接支持原始二进制数据作为执行输入/输出,因为它的核心数据格式是JSON。不过我们可以通过编码的方式间接处理二进制数据:

  • 先在API Gateway层将二进制数据编码为Base64字符串
  • 将Base64字符串作为JSON的一部分传入Step Functions
  • 在状态机的后续处理步骤(比如Lambda函数)中,再把Base64字符串解码回原始二进制数据进行操作

这个方案是目前处理二进制数据的标准方式,完全可行。

二、修复Step Functions执行输入为空的问题

你遇到的执行输入为空({}),大概率是Body Mapping Template的配置没跟上Step Functions的API要求。按以下步骤调整:

1. 确认API Gateway的二进制媒体类型配置

先确保你之前配置的二进制支持是生效的:

  • 进入API Gateway控制台,打开你的API,切换到Settings页面
  • 在Binary Media Types里确认已经添加了你需要处理的媒体类型(比如application/octet-stream、image/png等)
  • 保存后重新部署API,让配置生效

2. 调整POST方法的Integration Request设置

  • 进入POST方法的Integration Request页面
  • 在Content Handling下拉菜单选择Convert to binary,确保二进制请求被正确编码为Base64
  • 找到Body Mapping Templates,点击Add mapping template,输入你请求对应的Content-Type(比如application/octet-stream),然后创建模板

3. 编写正确的Body Mapping Template

Step Functions的StartExecution API要求请求体必须包含stateMachineArn和input字段,所以模板要构造符合要求的JSON:

{
  "stateMachineArn": "arn:aws:states:你的AWS区域:你的账号ID:stateMachine:你的状态机名称",
  "input": "{\"binaryPayload\": \"$input.body\"}"
}

这里的$input.body会被API Gateway自动替换为Base64编码后的二进制请求体,最终Step Functions的执行输入就会是包含binaryPayload字段的JSON,而不是空对象。

如果你想直接把Base64字符串作为输入(不嵌套字段),可以用这个模板:

{
  "stateMachineArn": "你的状态机ARN",
  "input": "\"$input.body\""
}

注意外层的引号,因为input需要是一个合法的JSON字符串。

4. 验证执行角色权限

确保API Gateway集成使用的角色拥有调用Step FunctionsStartExecution的权限,示例策略如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "states:StartExecution",
      "Resource": "你的状态机ARN"
    }
  ]
}

5. 测试请求

发送POST请求时,务必保证请求的Content-Type和你在API Gateway中配置的二进制媒体类型一致,请求体是原始二进制数据。这时再查看Step Functions的执行记录,就能看到包含Base64数据的输入了。

内容的提问来源于stack exchange,提问作者chinskiy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:29:13