【问题标题】:AWS Lambda inside VPC. 504 Gateway Timeout (ENI?)VPC 内的 AWS Lambda。 504 网关超时 (ENI?)
【发布时间】:2020-08-07 14:40:57
【问题描述】:

我在 AWS 上部署了一个 Serverless .net core web api lambda 应用程序。

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

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

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

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

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

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

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

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

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

【问题讨论】:

  • 执行角色呢?也许某人/某物正在改变执行角色,从而阻止在 vpc 中正常工作?

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

这是因为 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/

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 2021-06-30
    • 2013-12-03
    • 2018-08-14
    • 2021-02-16
    • 2013-05-20
    • 2020-12-16
    相关资源
    最近更新 更多