即使在设置了内存和超时设置之后,AWS Lambda也会发生超时错误

时间:2020-10-21 07:52:20

标签: amazon-web-services amazon-ec2 aws-lambda python-3.6 boto3

我试图在EC2区域列出所有t2.micro类型running的{​​{1}}实例。我已经用Python(Sydney)编写了Lambda函数。下面是我的代码:

Python 3.6

我已为Lambda授予了所有必要的权限,包括import json import boto3 from pprint import pprint def lambda_handler(event, context): client = boto3.client("ec2") response = client.describe_instances( Filters=[ { 'Name': 'instance-state-name', 'Values': [ 'running', ], }, { 'Name': 'instance-type', 'Values': [ 't2.micro', ], }, { 'Name': 'availability-zone', 'Values': [ 'ap-southeast-2', ], }, ], ) print(response) return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!') } AmazonEC2FullAccessAmazonEC2ReadOnlyAccess。我将内存调整到AWSLambdaBasicExecutionRole,并将超时值设置为3GB。仍然没有运气。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

  • 很遗憾,我无法发表评论。如果您在不带NAT网关的lambda上使用VPC,则boto3无法正常工作。
  • 顺便说一句,如果您尝试仅通过lambda描述实例,则无需配置任何VPC。
  • 使用此链接访问create a NAT gateway

答案 1 :(得分:0)

问题出在Lambda与使用互联网网关的公共子网相关联。

由于Lambda将通过VPC出站连接,因此没有NAT就无法连接到Internet,这是因为Lambda本身没有被授予公用IP地址,这会阻止Internet网关的功能正常工作。

或者,对于许多服务,您可以改而使用VPC endpoint,在您的情况下(EC2),有一个端点。重要的是要了解,尽管您的EC2实例位于VPC中,但EC2 API操作是针对EC2服务执行的,而不是与VPC的资源进行交互。