解决 AWS Lambda 中的部署问题 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

解决 AWS Lambda 中的部署问题

更新函数时,Lambda 使用更新的代码或设置来启动函数的新实例,从而部署更改。部署错误会阻止新版本的使用,并可能由于部署程序包、代码、权限或工具中的问题而引起。

当您使用 Lambda API 或客户端(如 AWS CLI)将更新直接部署到函数时,您可以直接在输出中查看 Lambda 中的错误。如果您使用 AWS CloudFormation、AWS CodeDeploy 或 AWS CodePipeline 等服务,请在该服务的日志或事件流中查找来自 Lambda 的响应。

错误:EACCES: permission denied, open '/var/task/index.js' (EACCES: 权限被拒绝,打开“/var/task/index.js”)

错误:cannot load such file -- function (无法加载此文件 -- 函数)

错误:[Errno 13] Permission denied: '/var/task/function.py' ([Errno 13] 权限被拒绝:“/var/task/function.py”)

Lambda 运行时需要权限才能读取部署包中的文件。您可以使用 chmod 命令更改文件模式。以下示例命令使当前目录中的所有文件和文件夹都可供任何用户使用。

my-function$ chmod 644 $(find . -type f) my-function$ chmod 755 $(find . -type d)

错误:An error occurred (RequestEntityTooLargeException) when calling the UpdateFunctionCode operation (在调用 UpdateFunctionCode 操作时出错 (RequestEntityTooLargeException))

在将部署包或层存档直接上传到 Lambda 时,ZIP 文件的大小最多为 50 MB。要上传一个较大的文件,请将此文件存储在 Amazon S3 中并使用 S3Bucket 和 S3Key 参数。

注意

当您直接使用 AWS CLI、AWS 开发工具包或通过其他方式上传文件时,二进制 ZIP 文件将转换为 base64,其大小将增加约 30%。为了支持这一点以及请求中其他参数的大小,Lambda 应用的实际请求大小限制会更大。因此,50 MB 的限制是近似值。

错误: GetObject 时发生错误。S3 错误代码:PermanentRedirect。S3 错误消息:存储桶位于此区域中:us-east-2。请使用此区域重试请求

当您从 Amazon S3 存储桶上传函数的部署包时,存储桶必须与函数位于同一区域。当您在 UpdateFunctionCode 调用中指定 Amazon S3 对象或在 AWS CLI 或 AWS SAM CLI 中使用包并部署命令时,可能会出现此问题。为您在其中开发应用程序的每个区域创建部署构件存储桶。

错误:找不到模块“function”

错误:cannot load such file -- function (无法加载此文件 -- 函数)

错误:无法导入模块“function”

错误:找不到类:function.Handler

错误:fork/exec/var/task/function:没有这样的文件或目录

错误:无法从程序集“Function”加载类型“Function.Handler”。

函数处理程序配置中文件或类的名称与您的代码不匹配。有关更多信息,请参阅以下条目。

错误:index.handler 未定义或未导出

错误:模块“function”上缺少处理程序“handler”

错误: #<LambdaHandler:0x000055b76ccebf98> 的未定义的方法“handler”

错误:在类 function.Handler 上没有找到具有正确方法签名的名为 handleRequest 的公共方法。

错误: 无法从程序集“Function”的类型“Function.Handler”中找到方法“handleRequest”

函数处理程序配置中的处理程序方法的名称与您的代码不匹配。每个运行时为处理程序定义一个命名约定,例如 filename.methodname。处理程序是函数代码中的方法,在调用函数时由运行时执行该方法。

对于某些语言,Lambda 提供了一个包含一个接口的库,该接口需要具有特定名称的处理程序方法。有关每种语言的处理程序命名的详细信息,请参阅以下主题。

错误:InvalidParameterValueException:Lambda 无法配置您的环境变量,因为您提供的环境变量超过了 4KB 限制。测量的字符串:{"A1":"uSFeY5cyPiPn7AtnX5BsM...

错误:RequestEntityTooLargeException:对 UpdateFunctionConfiguration 操作的请求必须小于 5120 字节

存储在函数配置中的变量对象的最大大小不得超过 4096 个字节。这包括密钥名称、值、引号、逗号和括号。HTTP 请求正文的总大小也受到限制。

{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs12.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables": { "BUCKET": "my-bucket", "KEY": "file.txt" } }, ... }

在此示例中,对象为 39 个字符,并且它在存储(不含空格)为字符串 {"BUCKET":"my-bucket","KEY":"file.txt"} 时占用 39 个字节。环境变量值中的每个标准 ASCII 字符使用一个字节。每个扩展 ASCII 和 Unicode 字符可以使用 2 到 4 个字节。

错误:InvalidParameterValueException: Lambda 无法配置您的环境变量,因为您提供的环境变量包含目前不支持修改的保留键。

Lambda 保留一些环境变量键供内部使用。例如,运行时使用 AWS_REGION 来确定当前区域且它不能被覆盖。运行时使用其他变量(如 PATH),但这些变量可以在函数配置中扩展。有关完整列表,请参阅运行时环境变量