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

AWS Step Function读取S3对象报错:Failed to convert 'Body' to string

解决AWS Step Functions调用S3 getObject时的"Failed to convert 'Body' to string"错误

问题根源

当使用Step Functions的AWS SDK集成调用s3:getObject时,S3返回的Body默认是二进制Blob对象,而非直接的字符串类型。无论是否配置ResultSelector,Step Functions在处理这个二进制对象时都会触发转换错误,导致S3.InvalidContent异常。

解决方案

提供两种可行的修复方式,任选其一即可:

方式1:强制S3返回文本格式

在Task的Parameters中添加ResponseContentType参数,指定返回内容为文本类型,这样S3会自动将Body转换为字符串:

{
  "Type": "Task",
  "Next": "Batch Execute Script",
  "Parameters": {
    "Bucket": "<bucketname>",
    "Key": "<keypath>",
    "ResponseContentType": "text/plain"
  },
  "ResultSelector": {
    "Statements.$": "States.StringToJson($.Body)"
  },
  "Resource": "arn:aws:states:::aws-sdk:s3:getObject"
}

方式2:解码Base64格式的Body

Step Functions会自动将二进制Body编码为Base64字符串,因此可以使用States.Base64Decode先解码,再转换为JSON:

{
  "Type": "Task",
  "Next": "Batch Execute Script",
  "Parameters": {
    "Bucket": "<bucketname>",
    "Key": "<keypath>"
  },
  "ResultSelector": {
    "Statements.$": "States.StringToJson(States.Base64Decode($.Body))"
  },
  "Resource": "arn:aws:states:::aws-sdk:s3:getObject"
}

补充说明

即使省略ResultSelector,Step Functions在序列化s3:getObject的返回结果时,依然会尝试处理二进制Body,从而触发相同错误。因此必须通过上述两种方式之一,将Body转换为可处理的字符串类型。

内容的提问来源于stack exchange,提问作者Deadly-Bagel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:07:15