Lambda 中的部署问题疑难解答
更新函数时,Lambda 使用更新的代码或设置来启动函数的新实例,从而部署更改。部署错误会阻止新版本的使用,并可能由于部署程序包、代码、权限或工具中的问题而引起。
当您使用 Lambda API 或客户端(如 Amazon CLI)将更新直接部署到函数时,您可以直接在输出中查看 Lambda 中的错误。如果您使用 Amazon CloudFormation、Amazon CodeDeploy 或 Amazon CodePipeline 等服务,请在该服务的日志或事件流中查找来自 Lambda 的响应。
以下主题为您在使用 Lambda API、控制台或工具时可能遇到的错误和问题提供故障排除建议。如果您发现某个问题未在此处列出,可以使用此页上的 Feedback 按钮来报告。
有关更多故障排除建议和常见支持问题的答案,请访问Amazon知识中心
有关对 Lambda 应用程序进行调试和故障排除的更多信息,请参阅 Serverless Land 中的 Debugging
主题
常规:权限被拒绝/无法加载此类文件
错误: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 运行时需要权限才能读取部署包中的文件。在 Linux 权限八进制表示法中,Lambda 对于不可执行文件(rw-r--r--)需要 644 个权限,对于目录和可执行文件需要 755 个权限(rwxr-xr-x)。
在 Linux 和 MacOS 中,使用 chmod
命令更改部署包中文件和目录的文件权限。例如,要为不可执行文件提供正确的权限,请运行以下命令。
chmod 644 <filepath>
要在 Windows 中更改文件权限,请参阅 Microsoft Windows 文档中的 Set, View, Change, or Remove Permissions on an Object
注意
如果您不向 Lambda 授予访问部署包中目录所需的权限,Lambda 会将这些目录的权限设置为 755(rwxr-xr-x)。
常规:调用 UpdateFunctionCode 时出错
错误:An error occurred (RequestEntityTooLargeException) when calling the UpdateFunctionCode operation(在调用 UpdateFunctionCode 操作时出错 (RequestEntityTooLargeException))
在将部署包或层归档直接上载到 Lambda 时,ZIP 文件的大小最多为 50 MB。要上载一个较大的文件,请将此文件存储在 Amazon S3 中并使用 S3Bucket 和 S3Key 参数。
注意
当您直接使用 Amazon CLI、Amazon 开发工具包或通过其他方式上传文件时,二进制 ZIP 文件将转换为 base64,其大小将增加约 30%。为了支持这一点以及请求中其他参数的大小,Lambda 应用的实际请求大小限制会更大。因此,50 MB 的限制是近似值。
Amazon S3:错误代码 PermanentRedirect。
错误:Error occurred while GetObject.(GetObject 时发生错误。) S3 错误代码:PermanentRedirect。S3 错误消息:存储桶位于此区域中:us-east-2。请使用此区域重试请求
当您从 Amazon S3 存储桶上载函数的部署包时,存储桶必须与函数位于同一区域。当您在 UpdateFunctionCode 调用中指定 Amazon S3 对象或在 Amazon CLI 或 Amazon SAM CLI 中使用程序包并部署命令时,可能会出现此问题。为您在其中开发应用程序的每个区域创建部署构件存储桶。
常规:找不到、无法加载、无法导入、找不到类、没有此类文件或目录
错误:找不到模块“function”
错误:cannot load such file -- function(无法加载此文件 – 函数)
错误:无法导入模块“function”
错误:找不到类:function.Handler
错误:fork/exec/var/task/function:没有这样的文件或目录
错误:无法从程序集“Function”加载类型“Function.Handler”。
函数处理程序配置中文件或类的名称与您的代码不匹配。有关更多信息,请参阅下文的 部分。
常规:未定义的方法处理程序
错误:index.handler 未定义或未导出
错误:模块“function”上缺少处理程序“handler”
错误:undefined method `handler' for #<LambdaHandler:0x000055b76ccebf98>(#<LambdaHandler:0x000055b76ccebf98> 的未定义的方法“handler”)
错误:在类 function.Handler 上没有找到具有正确方法签名的名为 handleRequest 的公共方法。
错误:Unable to find method 'handleRequest' in type 'Function.Handler' from assembly 'Function'(无法从程序集“Function”的类型“Function.Handler”中找到方法“handleRequest”)
函数处理程序配置中的处理程序方法的名称与您的代码不匹配。每个运行时为处理程序定义一个命名约定,例如 filename
.methodname
。处理程序是函数代码中的方法,在调用函数时由运行时运行该方法。
对于某些语言,Lambda 提供了包含接口的库,该接口需要具有特定名称的处理程序方法。有关每种语言的处理程序命名的详细信息,请参阅以下主题。
常规:超出 Lambda 代码存储限制
错误:超出代码存储限制。
Lambda 将您的函数代码存储在您账户私有的内部 S3 存储桶中。每个 Amazon 账户在每个区域分配 75 GB 存储空间。代码存储包括 Lambda 函数和层使用的总存储空间。如果您达到配额,在尝试部署新函数时会收到 CodeStorageExceededException。
通过清理旧版本的函数、删除未使用的代码或使用 Lambda 层来管理可用的存储空间。此外,最好为单独的工作负载使用单独的 Amazon 账户来帮助管理存储配额。
您可以在 Lambda 控制台的控制面板子菜单下查看总存储使用量:

Lambda:图层转换失败
错误:Lambda 图层转换失败。有关解决此问题的建议,请参阅《Lambda 用户指南》中的“排查 Lambda 中的部署问题”页面。
当您使用图层配置 Lambda 函数时,Lambda 会将该层与您的函数代码合并。如果此过程无法完成,Lambda 会返回此错误。如果遭遇此错误,请执行以下步骤:
从图层中删除所有未使用的文件
删除图层中的所有符号链接
重命名任何与函数层中目录同名的文件
Lambda:InvalidParameterValueException or RequestEntityTooLargeException
错误:InvalidParameterValueException: Lambda was unable to configure your environment variables because the environment variables you have provided exceeded the 4KB limit.(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": "nodejs22.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Environment": { "Variables":
{ "BUCKET": "amzn-s3-demo-bucket", "KEY": "file.txt" }
}, ... }
在此示例中,对象为 39 个字符,并且它在存储(不含空格)为字符串 {"BUCKET":"amzn-s3-demo-bucket","KEY":"file.txt"}
时占用 39 个字节。环境变量值中的每个标准 ASCII 字符使用一个字节。每个扩展 ASCII 和 Unicode 字符可以使用 2 到 4 个字节。
Lambda:InvalidParameterValueException
错误:InvalidParameterValueException: Lambda 无法配置您的环境变量,因为您提供的环境变量包含目前不支持修改的保留键。
Lambda 会预留一些环境变量键供内部使用。例如,运行时使用 AWS_REGION
来确定当前区域且它不能被覆盖。运行时使用其他变量(如 PATH
),但这些变量可以在函数配置中扩展。有关完整列表,请参阅定义运行时环境变量。
Lambda:并发和内存限额
Error: Specified ConcurrentExecutions for function decreases account's UnreservedConcurrentExecution below its minimum value(错误:为函数指定的 ConcurrentExecutions 会导致账户的 UnreservedConcurrentExecution 降至其最小值以下)
Error: 'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008(错误:“内存大小”值不满足约束条件:成员的值必须小于或等于 3008)
超出您账户的并发或内存限额时,就会出现这些错误。新的 Amazon 账户减少了并发和内存配额。若要解决与并发相关的错误,您可以请求增加配额。您无法请求增加配额。
-
并发:如果您尝试使用预留或预配置并发创建函数,或者如果您的每函数并发请求(PutFunctionConcurrency)超出您账户的并发限额,则可能会收到错误。
-
内存:如果分配给函数的内存量超过您账户的内存限额,则会出现错误。