我正在尝试使用AWS CLI创建一个AWS Lambda函数。我使用
问题在于,当我执行创建函数的命令时,会出现以下错误:
这是相同的.zip文件。你有什么提示关于我在这里做错了什么吗?我已经尝试用以下内容替换
编辑: 我发现--debug选项,我们可以将其传递给CLI命令。问题在于当我们从JSON提供输入时,工具无法正确读取ZipFile。因此,例如,如果我运行命令并在命令中提供所有参数,则可以看到正确的zip文件以base64编码,即:
但是当我从JSON文件提供参数,即--cli-input-json时,命令会将JSON中ZipFile键的值(即该文件的URI,即fileb://C:/Projects/src/zip/MyFunction.zip)进行base64编码。
现在我不确定需要向ZipFile键提供什么值,或者这是否是工具/命令中的错误?
编辑2:如果我提供我的zip文件的base64编码字符串,命令将再次对该字符串进行base64编码,这将导致相同的错误(即无法解压缩)。那么,字段ZipFile需要什么?带有file://协议的URL还是fileb://?Zip文件内容的base-64编码?
--generate-cli-skeleton
参数生成了用于 aws lambda create-function
函数的JSON输入框架,然后相应地替换了值。问题在于,当我执行创建函数的命令时,会出现以下错误:
A client error (InvalidParameterValueException) occurred when calling the CreateFunction operation: Could not unzip uploaded file. Please check your file, then try to upload again.
这是我的命令运行方式:
aws lambda create-function --cli-input-json file://C:\Projects\Automated_Deployment\lambda_function_deploy.json
.json 文件的内容如下:{
"FunctionName": "MyFunction",
"Runtime": "nodejs",
"Role": "arn:aws:iam::------------:role/lambda_dynamo",
"Handler": "index.handler",
"Code": {
"ZipFile": "fileb://C:/Projects/src/zip/MyFunction.zip"
},
"Description": "description goes here",
"Timeout": 10,
"MemorySize": 128,
"Publish": true
}
令人惊讶的是,如果我不使用JSON文件,在命令行中提供所有参数来创建函数,那么它将正常工作。因此,例如,这可以完全没有任何问题地运行:
aws lambda create-function --function-name MyFunction --runtime nodejs --role arn:aws:iam::------------:role/lambda_dynamo --handler index.handler --zip-file fileb://C:/Projects/src/zip/MyFunction.zip
这是相同的.zip文件。你有什么提示关于我在这里做错了什么吗?我已经尝试用以下内容替换
"ZipFile": "fileb://C:/Projects/src/zip/MyFunction.zip"
:
"ZipFile": "file://C:/Projects/src/zip/MyFunction.zip"
和 "ZipFile": "C:/Projects/src/zip/MyFunction.zip"
,但问题仍然存在。编辑: 我发现--debug选项,我们可以将其传递给CLI命令。问题在于当我们从JSON提供输入时,工具无法正确读取ZipFile。因此,例如,如果我运行命令并在命令中提供所有参数,则可以看到正确的zip文件以base64编码,即:
2016-02-08 10:43:59,831 - MainThread - botocore.endpoint - DEBUG - Making request for <botocore.model.OperationModel object at 0x0000000004149F28> (verify_ssl=True) with params: {'body': '{"Code": {"ZipFile": "UEsDBBQAAAAIAFiGPUiLOeW/nwcAANsdAAAIAAAAaW5kZXguanO1Gdtu2zb0PUD+gdVDI2OOmrZrBzgICi9OC29FYsRpX4pCUCQ65iJLqk
....
redacted
但是当我从JSON文件提供参数,即--cli-input-json时,命令会将JSON中ZipFile键的值(即该文件的URI,即fileb://C:/Projects/src/zip/MyFunction.zip)进行base64编码。
现在我不确定需要向ZipFile键提供什么值,或者这是否是工具/命令中的错误?
编辑2:如果我提供我的zip文件的base64编码字符串,命令将再次对该字符串进行base64编码,这将导致相同的错误(即无法解压缩)。那么,字段ZipFile需要什么?带有file://协议的URL还是fileb://?Zip文件内容的base-64编码?