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
相关产品推荐
相关产品推荐

