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

如何将文件中的JSON传入AWS Kinesis put-record命令

报错根因

--cli-input-json 参数要求直接传入JSON格式的参数字符串作为入参,你命令里用的 < file.json 是Shell标准输入重定向语法,不会把文件内容作为参数值传递给 --cli-input-json,相当于该参数缺失实际传入值,因此触发 argument --cli-input-json: expected one argument 报错。

正确操作方案

根据实际使用场景选对应写法即可:

场景1:通过JSON文件统一传入put-record的所有接口参数

--cli-input-json 的设计是支持通过单个JSON结构定义命令所需的全部参数,无需在命令行逐一声明。
首先按照AWS CLI的参数格式编写参数文件,示例 cli-params.json 内容如下:

{
  "StreamName": "test_event",
  "PartitionKey": "1",
  "Data": "eyJtc2ciOiJ0ZXN0IGNvbnRlbnQifQ=="
}

注意:Kinesis接口要求Data字段传入Base64编码后的内容,不能直接传明文文本。
执行命令时用AWS CLI原生支持的文件引用语法读取文件即可:

aws kinesis put-record --cli-input-json file://cli-params.json

file:// 是AWS CLI原生识别的文件路径前缀,会自动读取对应路径下的文件内容作为参数值,支持相对路径和绝对路径。

场景2:仅将本地JSON文件作为消息体写入Kinesis,其余参数命令行指定

这是最常用的场景:流名称、分区键直接在命令行声明,仅把本地JSON文件的内容作为要投递的消息数据。此时不需要用--cli-input-json参数,直接给--data参数传文件内容即可,注意不同CLI版本写法有区别:

  • AWS CLI v2(推荐版本,自动处理Base64编码)
aws kinesis put-record \
  --stream-name test_event \
  --partition-key 1 \
  --data fileb://message.json

fileb://前缀表示读取二进制文件内容,CLI会自动完成Base64编码,不会出现转义错误。

  • AWS CLI v1(需手动完成Base64编码)
    Linux/macOS环境执行:
aws kinesis put-record \
  --stream-name test_event \
  --partition-key 1 \
  --data "$(base64 -w 0 message.json)"

Windows PowerShell环境执行:

aws kinesis put-record `
  --stream-name test_event `
  --partition-key 1 `
  --data ([Convert]::ToBase64String([IO.File]::ReadAllBytes("message.json")))
注意事项
  • 不要重复传参:如果已经在--cli-input-json的JSON结构里定义了StreamName、PartitionKey等参数,不要再在命令行追加同名参数,否则会触发参数冲突报错。
  • Kinesis单条put-record的消息大小上限为1MB,超出限制需要拆分消息或使用put-records批量投递接口。
  • 不要直接给--data传未编码的明文JSON,会触发接口序列化报错。

内容的提问来源于stack exchange,提问作者O'Leg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:39:17