如何将文件中的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
相关产品推荐
相关产品推荐

