【发布时间】: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