在 ELB 后面的 VPC 中调用 AWS Elastic Beanstalk 服务器的首次加载时间非常慢

Jos*_*ana 7 amazon-web-services amazon-vpc amazon-elastic-beanstalk

我在 Application Load Balancer 后面有一个 Elastic Beanstalk 服务器,全部在 VPC 内。离开服务器一段时间后第一次调用服务器需要很长时间。就好像实例正在启动一样!而不是已经在...

此问题不会出现在本地,也不会出现在 VPC 之外,它只会发生在 AWS 上的 VPC 中,因此我的配置中的某些内容必须关闭。

VPC 有 3 个公有子网和 3 个私有子网,在同一个可用区,公有子网都有自动分配公网IP

子网 可用区 自动分配公共 ip

我已将这些分配给我的 Elastic Beanstalk 环境中的网络设置,将公共子网分配给公共负载均衡器,然后将私有子网分配给私有实例。

负载均衡器设置 实例设置

我已将 Auto Scaling 负载平衡组设置为最少 3 个实例,并确认它们正在运行

自动伸缩组 实例 地位

尽管如此,在离开站点一段时间后......对服务器的第一次新调用始终需要超过一分钟,然后效果很好。我想我只是错过了一些小东西,但无法弄清楚它是什么......

提前致谢!

我确信这不是应用程序问题,因为在第一次加载时调用需要超过一分钟,但在后续加载中它几乎是即时的,并且这种行为在几天内保持不变。在本地,我从来没有遇到过这个问题。在 VPC 之外,我从来没有遇到过这个问题。

首次/慢速加载(将应用程序单独放置一夜之后) 慢负载

第二次/快速加载(在上述之后刷新) 快速加载

更新

AWS 支持建议我取消子网与路由表的关联。我这样做了,现在所有公共和私有子网都显示了当前的路由表 Main。但是现在,所有对我的服务器的调用都失败了,而不是花很长时间!

我尝试通过边缘关联将该 VPC 中的互联网网关附加到路由表,但我收到错误消息

路由表包含不受支持的路由目的地。不受支持的路由目的地不如 VPC 本地 CIDR 具体或不重叠

有一个公共子网,其 CIDR 与 Internet 网关重叠(子网为 10.1.0.0/24,网关为 10.1.0.0/24)。我尝试手动将其与主路由表相关联,但仍然出现相同的错误

Sni*_*192 0

这是一个多么相似的问题。假设您正在使用自动缩放,您很可能需要添加一个 LifeCycle 挂钩。您可以通过编辑文件来执行此操作,ElasticBeanstalk如下所示.ebextensions/as-hook.config。您将使用EC2_INSTANCE_LAUNCHING过渡。在您的挂钩中发出类似于应用程序所做的请求,这可以确保实例已准备好开始提供流量。

如果您仍然遇到问题,您可以使用更多技术进行调试,例如,X-Ray但您需要运行代理并为您的应用程序配置 SDK,这将是一些工作,因此可能不值得付出努力。如果这只是第一个需要很长时间的请求,那么钩子就是最佳选择。