【问题标题】:Lambda function times out when connecting to a boto3 client连接到 boto3 客户端时 Lambda 函数超时
【发布时间】:2020-11-27 06:30:01
【问题描述】:

问题

我正在尝试设置一个 lambda 函数来在 ec2 上执行一些任务。我一直遇到超时错误。重现该问题的最小示例如下:

import boto3

REGION = "us-west-2"
ec2 = boto3.client('ec2', region_name=REGION)


def main(event, context):
    
    region = ec2.describe_regions()
    return region

lambda 函数称为lambda_function,处理程序为lambda_function.main。运行时环境是 Python 3.6、Python 3.7 或 Python 3.8(我每个都有相同的错误)。

此函数返回以下错误:

Response:
{
  "errorMessage": "2020-11-27T05:26:27.739Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after 20.02 seconds"
}

Request ID:
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Function logs:
START RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Version: $LATEST
END RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
REPORT RequestId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  Duration: 20020.38 ms   Billed Duration: 20000 ms   Memory Size: 128 MB Max Memory Used: 81 MB  Init Duration: 343.37 ms    
2020-11-27T05:26:27.739Z xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Task timed out after 20.02 seconds

权限和政策

lambda 函数正在使用具有以下权限的角色运行:

  • AmazonEC2FullAccess
  • AWSLambdaFullAccess
  • CloudWatchLogsFullAccess

正在设置 lambda 函数的用户具有以下权限:

  • AmazonRDSFullAccess
  • AmazonEC2FullAccess
  • SecretsManagerReadWrite
  • AWSLambdaFullAccess
  • AmazonS3FullAccess
  • AmazonDynamoDBFullAccess
  • AWSLambda_FullAccess
  • EC2InstanceConnect

如果我从终端运行命令,使用该 IAM 用户拥有的相同凭证,我会得到预期的输出。

$ aws ec2 describe-regions
{
    "Regions": [
        {
            "Endpoint": "ec2.eu-north-1.amazonaws.com",
            "RegionName": "eu-north-1",
            "OptInStatus": "opt-in-not-required"
        },

    ...]
}

网络和安全组

lambda 分配给 IAM 用户的默认 VPC。附加到此 lambda 函数的安全组是此 VPC 的默认安全组,以及一些允许某些额外访问的附加安全组。

是什么导致超时?我该如何解决这个问题?

【问题讨论】:

  • 您可以确认 Lambda 函数可以访问互联网吗?
  • 端口 80、443 和 22 的入站访问,以及所有端口的出站访问。除非我误解了你的问题......?
  • 我猜你没有配置任何 NAT 实例……对吧?
  • 我没有配置任何 NAT 实例
  • 我明白了。尝试查看我添加的一些资源,看看是否是您的问题的原因。我在公共 Lambda 中测试了您的函数代码,它运行良好。所以我想我有你的问题

标签: amazon-web-services amazon-ec2 aws-lambda


【解决方案1】:

对于需要连接到 Internet 端点的工作负载,您的函数很可能没有 Internet 访问权限

默认情况下,VPC 内的 Lambda will not have access to the Internet

要启用互联网访问,您需要configure NAT Gateways or Instances

【讨论】:

  • 这就像一个魅力!我按照链接资源中的说明配置了一个具有公有和私有子网的 NAT 实例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 2014-04-18
相关资源
最近更新 更多