Step Functions调用S3 putObject时Body内容被自动加引号问题求助
解决Step Functions调用S3 putObject时Body带引号的问题
问题原因
Step Functions的AWS SDK集成会自动将任务参数序列化为JSON格式。当直接写Body: Foo时,这个值会被当作JSON字符串处理,最终序列化为带双引号的"Foo"写入S3。
无Lambda的解决方案
不需要额外Lambda,只需修改Body的定义方式,使用表达式语法(Body.$)传递原始字符串:
固定字符串(如示例中的Foo)
将Body改为表达式形式,用单引号包裹字符串:
Put item in export: Type: Task Resource: arn:aws:states:::aws-sdk:s3:putObject Parameters: Bucket: my-bucket-1234655 Key.$: States.Format('export/items/{}.txt', $.item.id) Body.$: "'Foo'" # 用表达式传递原始字符串 ContentType: text/plain ResultPath: null Next: ...
动态内容(如状态机中的XML)
如果内容存在于状态机的变量中(比如$.item.xmlContent),直接通过路径引用:
Body.$: "$.item.xmlContent"
这样Step Functions会直接把变量中的原始字符串作为Body,不会进行JSON序列化。
原理说明
使用Body.$表达式时,Step Functions会直接将表达式的结果作为原始字节流传递给S3的putObject API,而不会将其序列化为JSON。这样就能确保写入S3的内容是你预期的纯字符串(或XML),不带额外的双引号。
内容的提问来源于stack exchange,提问作者Alex Jäger
相关产品推荐
相关产品推荐

