如何排查调用 Lambda 函数时出现的 502 和 500 错误?

上次更新时间:2019 年 9 月 25 日

当我尝试调用 AWS Lambda 函数时,请求失败,并显示 502 或 500 服务器端错误。如何排查这些错误?

解决方法

识别您收到的具体 Lambda Invoke API 错误,然后按照对应于该错误的问题排查步骤着手处理。有关可能的错误列表及其描述,请参阅 Lambda Invoke API 参考中的错误部分。

EC2AccessDeniedException

您的 Lambda 函数的执行角色 必须具有以下权限才能访问 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon Elastic Compute Cloud (Amazon EC2):

  • ec2:CreateNetworkInterface
  • ec2:DescribeNetworkInterfaces
  • ec2:DeleteNetworkInterface

AWS 托管策略 AWSLambdaVPCAccessExecutionRole 中包含这些权限。有关更多信息,请参阅执行角色和用户权限

EC2ThrottledException

AWS 会按区域限制每个 AWS 账户对 Amazon EC2 API 的请求数量,以帮助提高服务性能。有关更多信息,请参阅 Query API 请求速率

使用 Amazon CloudWatch 查看通过您的 AWS 账户发出的 Amazon EC2 API 请求数量。如果您的账户发出的请求已经超出允许的最大请求速率,请减少您在 Lambda 以外发出的此类请求数量。

EC2UnexpectedException

如果 Lambda 在尝试创建弹性网络接口 (ENI) 时收到 500 错误,通常会出现此错误。请使用指数退避算法重试请求。有关更多信息,请参阅 AWS 中的错误重试和指数退避

InvalidSecurityGroupIDException

确认您在 Lambda 函数配置中是否指定了正确的 Amazon VPC 安全组 ID。有关更多信息,请参阅配置 Lambda 函数以访问 VPC 中的资源

ENILimitReachedException

已启用 Amazon VPC 的 Lambda 函数会在关联的子网中创建 ENI。由于这些函数会横向扩展,因此会创建更多的 ENI。ENI 限制分为按账户和按区域两种。要查看您当前的限制,请参阅 Amazon EC2 控制台中的限制

您的 Amazon VPC 必须具有足够的 ENI 容量才能满足 Lambda 函数的要求。要估算您的函数的 ENI 要求,请使用此公式:

Projected peak concurrent executions * (Memory in GB / 3 GB)

如果您的 Amazon VPC 的当前 ENI 限制无法满足您的需求,您可以通过 AWS Support 中心请求提高限制。(在 Requests 下,为 Limit 选择 Network Interfaces per Region)。

SubnetIPAddressLimitReachedException

子网的大小由其 CIDR 块决定。确保您在 Amazon VPC 中指定的 CIDR 块具有足够多的可用 IP 地址,以满足启用了 Amazon VPC 的 Lambda 函数的要求。有关更多信息,请参阅 VPC 和子网大小调整

KMSAccessDeniedException

检查您的 Lambda 函数的 AWS Identity and Access Management (AWS IAM) 权限 以及您的 AWS Key Management Service (AWS KMS) 密钥策略

如果您为客户主密钥 (CMK) 使用自定义密钥策略,则您 Lambda 函数的执行角色IAM 策略必须允许 kms:Decrypt 操作。如果您使用的是默认密钥策略,则您的 Lambda 执行角色已具有访问 AWS KMS 的足够权限。

此外,创建和更新 Lambda 函数的 IAM 用户必须获得使用 CMK 的权限

有关更多信息,请参阅在 AWS KMS 中使用密钥策略

KMSDisabledException

验证 CMK 是否已启用。有关更多信息,请参阅启用和禁用密钥

KMSInvalidStateException

对于 AWS KMS Decrypt API 请求,您的 CMK 处于无效状态。验证 CMK 是否已启用

有关更多信息,请参阅密钥状态对客户主密钥的使用有何影响

KMSNotFoundException

您的请求中指定的 CMK 必须与您的 Lambda 函数位于同一个 AWS 区域和账户。如果两者的区域不同,请改用位于同一区域的另一个 CMK(或者创建一个新 CMK)。

InvalidRuntimeException

配置您的 Lambda 函数,使其为您的函数代码使用正确的 Lambda 运行时

InvalidZipFileException

检查您的 Lambda 部署程序包的权限。有关更多信息,请参阅我在上传部署程序包时遇到 Lambda 错误“permission denied”或“unable to import module”,如何进行问题排查?

此外,确认您正确创建了部署程序包文件。有关更多信息,请参阅创建部署程序包

ServiceException

在极少数情况下,Lambda 服务本身可能会发生内部错误。如果您收到 500 错误,请检查 AWS 服务运行状况控制面板以确定 Lambda 是否不可用。有关更多信息,请参阅 AWS 是否出现故障?

如果 Lambda 可用,请重新尝试调用您的 Lambda 函数的请求。如果问题仍然存在,请通过 AWS Support 中心联系 AWS Support。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?