如何通过AWS CLI将字符串作为Payload传递给AWS Lambda函数?
解决AWS CLI调用Lambda时的"Invalid base64: ""world"""错误
你遇到的问题是因为--payload参数的格式不符合AWS CLI的要求,具体原因和解决方法如下:
错误原因
AWS CLI要求--payload必须是合法的JSON格式,同时默认会将输入内容视为base64编码(除非使用特定参数调整)。你之前的命令里"world"没有被正确解析为有效JSON,而且外层引号导致CLI实际接收到的是""world"",这既不是有效的base64字符串,也不是合法JSON。
解决方法
下面提供几种可行的修改方式:
1. 转义引号,传递合法JSON字符串
在命令行中直接传递JSON字符串时,需要正确转义引号:
- Linux/macOS(bash/zsh):
或者:aws lambda invoke --invocation-type RequestResponse --function-name HelloWorldJava --payload '"world"' outputfile.txtaws lambda invoke --invocation-type RequestResponse --function-name HelloWorldJava --payload "\"world\"" outputfile.txt - Windows命令提示符:
aws lambda invoke --invocation-type RequestResponse --function-name HelloWorldJava --payload "\"world\"" outputfile.txt
2. 使用文件传递payload
如果payload内容复杂,推荐将其写入JSON文件:
- 创建
payload.json文件,内容为:"world" - 执行命令:
aws lambda invoke --invocation-type RequestResponse --function-name HelloWorldJava --payload file://payload.json outputfile.txt
3. 使用--cli-binary-format参数(AWS CLI v2+)
如果你使用的是AWS CLI v2,可以添加--cli-binary-format raw-in-base64-out参数,让CLI直接将输入的字符串视为原始JSON而非base64:
aws lambda invoke --invocation-type RequestResponse --function-name HelloWorldJava --payload "world" --cli-binary-format raw-in-base64-out outputfile.txt
关于书籍中方法的说明
书籍里的方法可能在旧版本AWS CLI或特定shell环境下有效,因为早期CLI对payload格式的要求更宽松,或者某些shell会自动处理引号转义逻辑。但新版本CLI对格式的规范性要求更高,所以需要按照上述正确格式传递参数。
内容的提问来源于stack exchange,提问作者pulkit
相关产品推荐
相关产品推荐

