
使用 AWS CLI 部署 Node.js Lambda 函数时,若错误地用 --code fileb://... 指向 ZIP 文件,会触发 'in ' requires string as left operand, not int 这一隐晦报错;根本原因是 --code 参数不接受二进制 ZIP 文件,而应改用 --zip-file 参数。
使用 aws cli 部署 node.js lambda 函数时,若错误地用 `--code fileb://...` 指向 zip 文件,会触发 `'in
在 AWS CLI v2 中,--code 参数仅支持 JSON 格式的结构化输入(如 { "ZipFile": "base64-encoded-bytes" } 或 { "S3Bucket": "...", "S3Key": "..." }),它不能直接接收 file:// 或 fileb:// 路径——这是常见误解的根源。当你执行:
aws lambda create-function \ --function-name "helloWorld" \ --runtime nodejs20.x \ --role "arn:aws:iam::123456789012:role/lambda-execution-role" \ --handler "helloWorld.handler" \ --code fileb://helloWorld.zip # ❌ 错误:--code 不支持 fileb://
CLI 会尝试将 fileb://helloWorld.zip 解析为 JSON 字符串字面量(而非读取文件),导致内部类型判断失败,最终抛出 'in <string>' requires string as left operand, not int</string> ——该错误实际源于 JSON 解析器在处理非法输入时的底层异常,并非代码逻辑问题。
✅ 正确做法是:使用 --zip-file 参数直接指定 ZIP 文件路径(CLI 自动完成 Base64 编码与封装):
aws lambda create-function \ --function-name "helloWorld" \ --runtime nodejs20.x \ --role "arn:aws:iam::123456789012:role/lambda-execution-role" \ --handler "helloWorld.handler" \ --zip-file fileb://helloWorld.zip # ✅ 正确:--zip-file 支持 fileb://
⚠️ 注意事项:
-
--zip-file是专为本地 ZIP 包设计的参数,必须搭配fileb://(二进制模式)使用;file://(文本模式)会导致编码错误。 - 确保 ZIP 文件结构正确:
helloWorld.js应位于 ZIP 根目录(而非子文件夹),否则 handler 路径helloWorld.handler将无法定位模块。 - GitHub Actions 中建议添加校验步骤,例如:
- name: Verify ZIP contents run: unzip -l helloWorld.zip
? 补充:若需从 S3 部署,才应使用 --code S3Bucket=...,S3Key=...;本地 ZIP 部署请始终优先选用 --zip-file。这一区分是 AWS CLI v2 的明确设计约定,混淆参数将导致不可预测的解析错误。










