Amazon web services API网关&x2B;λ+;VPC超时问题
早上好,您能帮我们解决下一个问题吗: 我有一个API网关+Java Lambda处理程序。这个Lambda使用httpconnection来获取一些Internet restapi 当我们在没有VPC的情况下使用这个Lambda时,它工作得很好。但是,当我们使用配置了internet访问的VPC时,有时Lambda会因超时错误而失败。在所有请求中,有20%的请求失败(80%的请求可以正常工作),在日志中出现下一个错误Amazon web services API网关&x2B;λ+;VPC超时问题,amazon-web-services,aws-lambda,aws-api-gateway,amazon-vpc,Amazon Web Services,Aws Lambda,Aws Api Gateway,Amazon Vpc,早上好,您能帮我们解决下一个问题吗: 我有一个API网关+Java Lambda处理程序。这个Lambda使用httpconnection来获取一些Internet restapi 当我们在没有VPC的情况下使用这个Lambda时,它工作得很好。但是,当我们使用配置了internet访问的VPC时,有时Lambda会因超时错误而失败。在所有请求中,有20%的请求失败(80%的请求可以正常工作),在日志中出现下一个错误 REPORT RequestId: 16214561-b09a-11e6-a7
REPORT RequestId: 16214561-b09a-11e6-a762-7546f12e61bd Duration: 15000.26 ms Billed Duration: 15000 ms Memory Size: 512 MB Max Memory Used: 47 MB
09:57:49
2016-11-22T09:57:49.245Z 16214561-b09a-11e6-a762-7546f12e61bd Task timed out after 15.00 seconds
根据我的日志,lambda无法发送GET请求。我不确定问题出在哪里。这是Lambda问题、专有网络问题还是某些配置问题。
我也尝试了许多不同的RESTAPI端点,所以这肯定不是端点问题
感谢您的帮助。从您的日志中,
- 计费持续时间:15000毫秒
- 内存大小:512 MB
- 使用的最大内存:47 MB
对于计时问题和测试问题,您可以进行以下操作: 问:AWS Lambda函数可以执行多长时间? Soluiton:对AWS Lambda的所有调用必须在300秒内完成执行。默认超时为3秒,但您可以将超时设置为1到300秒之间的任何值 要确定Lambda函数未按预期工作的原因,请执行以下操作: 您可以像在任何其他Node.js函数中一样在本地测试代码,也可以使用控制台的测试调用功能在Lambda控制台中测试代码,或者使用AWS CLI invoke命令。每次执行代码以响应事件时,它都会将一个日志条目写入与Lambda函数相关联的日志组,即/aws/Lambda/ 如果您在日志中看到超时超过错误,请更改您的超时设置 超过函数代码的运行时间。这可能是因为 超时时间太低,或者代码执行时间太长 解决方案: 使用不同的内存设置测试代码 如果代码执行时间过长,可能是因为它没有足够的计算资源来执行其逻辑。尝试增加分配给函数的内存,并使用Lambda控制台的测试调用功能再次测试代码。您可以在函数日志条目中看到所使用的内存、代码执行时间和分配的内存。更改内存设置可以更改持续时间的收费方式。有关定价的信息,请参阅 资源链接:
对于测试,这里给出了完整的代码示例:当您将Lambda函数放置在VPC内时,它将无法访问VPC外的任何内容。要使Lambda功能能够访问VPC之外的资源,您必须向VPC添加NAT网关。问题已经解决 Lambda VPC配置已连接公共子网
多亏了@Michael sqlbot,几个月前我遇到了几乎相同的问题,下面是我的解决方案: 假设您手动设置Lambda,则在
配置
->高级设置
中,您将找到专有网络
,然后选择子网
和安全组
所选的子网
应与lambda函数调用的其他服务位于同一子网中。在您的情况下,您的lambda服务使用httpconnection到internetrestapi,这很好,但是您可能需要与RDS的DB连接,或者由SQS或SNS触发。因此,请确保子网是正确的
安全组
更为重要。同样,在您的情况下,您需要访问Internet,因此请确保安全组的出站规则
具有外部连接。通常,为了简单起见,我会提供所有端口和所有目的地,当然,您可以限制使用端口80和所需的API的IP地址。这将是一个很好的答案,但我担心这并不能真正解决这个问题中可能出现的问题。如果他们得到超时,可能仅仅是因为他们遇到了一个由Lambda函数本身启动的出站连接(无论是什么)的情况,由于VPC特有的错误配置而从未成功,因为OP说它在部署非VPC时工作。我相信你应该重新考虑你是否在解决问题的关键。但是,没有理由相信内存问题的存在……我认为,只选择私有子网(具有到NAT盒的defaut路由)来分配Lambda函数,因为Lambda ENIs即使在公共子网上也不会被分配公共IP。@Michael sqlbot非常感谢,你说得对,这就是问题所在,我也有类似的问题。并且配置了NAT网关的专用子网,即使如此,仍然无法访问Internet。有什么帮助吗?@Kostanos该专用子网中的EC2实例是否可以访问Internet?您的路由表设置可能不正确。我建议在这里问一个新问题,而不是在这个问题上加标签。谢谢@mark-b我已经解决了。我的问题是我在私有子网内创建了NAT网关,而我应该在公共子网内创建NAT网关。