首页 > 解决方案 > VPC 内的 AWS Lambda。504 网关超时 (ENI?)

问题描述

我在 AWS 上部署了一个无服务器 .net 核心 web api lambda 应用程序。

当我在同一个 VPC 中访问 ElasticSearch 服务时,我将它放在 VPC 中。

我有两个连接到 Elasticsearch 服务的 API 微服务。

一段时间不使用(4 小时、6 小时、18 小时 - 我不确定但似乎是随机的)后,该功能变得无响应并且我收到 504 网关超时错误,“找不到端点”

我在某处读到,如果“空闲”时间过长,ENI 将被释放回 AWS 系统,再次触发 Lambda 应该会启动它。

我似乎无法通过调用它来“唤醒”该函数,因为它会因上述错误而超时(我还增加了默认超时)。

这是踢球者 - 如果我对特定的 lambda 函数进行任何更改,并保存这些更改(这包括像更改超时值这样简单的事情) - 我的 API 调用(它们两个,即使不同的 lambdas)再次开始像它一样工作已经“踢”回来了。显然这些变化是这样做的,但为什么呢?

显然,我不希望在生产环境中超时,无论使用多少,或者使用多少 lambda 或 API 调用。

我需要一个防弹的解决方案。当然这是一些描述的配置问题,但我只是不确定在哪里看。

我为 VPC 更改了路由表、公共/私有子网、CIDR 块、创建的互联网网关、NAT 等。这一切都有效,但是这两个需要 VPC 访问的 lambda 以某种方式一直处于“睡眠状态”。

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


这是因为 Lambda 的冷启动。reInvent 2019 中发布了一项新功能,其中为 lambda 提供了预置并发(不要与预留并发混淆)。

确保配置的并发性至少为 1(或并行服务的请求数量)以始终使 lambda 暖并为请求提供服务

参考:https ://aws.amazon.com/blogs/aws/new-provisioned-concurrency-for-lambda-functions/

为了获得更多上下文,VPC 中的 Lambda 使用超平面 ENI 和共享同一安全组的同一账户中的函数:子网配对使用相同的网络接口。

如果账户中的 Lambda 函数闲置一段时间(通常使用该 ENI 的所有函数在 40 分钟内没有使用,因为我从 AWS 支持获得了这个时间信息),该服务将回收未使用的超平面资源,因此非常不经常调用的函数可能仍然看到更长的冷启动时间。

参考:https ://aws.amazon.com/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/


推荐阅读