Asp.net core 在没有临时HTTP 404的情况下将ASP.NET核心应用程序部署到ElasticBeanstalk

Asp.net core 在没有临时HTTP 404的情况下将ASP.NET核心应用程序部署到ElasticBeanstalk,asp.net-core,amazon-elastic-beanstalk,Asp.net Core,Amazon Elastic Beanstalk,目前,ElasticBeanstalk仅在Windows平台上支持ASP.NET核心应用程序(当使用web角色时),而在基于Windows的平台上,无论出于何种原因,您都不能进行不可变的更新,甚至不能使用附加批处理进行滚动。如果应用程序使用单个实例运行,则最终会出现只更新正在运行的实例的情况。(运行单个实例的可能原因:节省成本,因为它只是一个小型后端服务,或者与CPU时间相比,它可能需要大量RAM,因此运行一个较大的实例比运行多个较小的实例更有意义。) 因此,在部署新应用程序版本的过程中,在新应

目前,ElasticBeanstalk仅在Windows平台上支持ASP.NET核心应用程序(当使用web角色时),而在基于Windows的平台上,无论出于何种原因,您都不能进行不可变的更新,甚至不能使用附加批处理进行滚动。如果应用程序使用单个实例运行,则最终会出现只更新正在运行的实例的情况。(运行单个实例的可能原因:节省成本,因为它只是一个小型后端服务,或者与CPU时间相比,它可能需要大量RAM,因此运行一个较大的实例比运行多个较小的实例更有意义。)

因此,在部署新应用程序版本的过程中,在新应用程序版本实际可用之前,在长达30秒的时间内,您首先获得HTTP 503,然后是HTTP 404,然后是HTTP 502坏网关。显然,与在“经典”环境中的单个服务器上使用WebDeploy相比,这要糟糕得多

我能想到的可能解决办法:

  • 蓝色/绿色部署:速度慢(因为它取决于DNS更改),而且它似乎更适合于“监督”部署,而不是自动部署管道
  • 修改autoscaling组以在部署之前强制执行2个活动实例(以便EB可以执行其正常的滚动更新操作),然后更改回。但是,处理由EB创建和管理的资源(如autoscaling group)还远远不够理想,而且需要相当复杂的脚本(您需要等待第二个实例变为活动状态,需要等待滚动部署等)

我不敢相信这是唯一的选择。还有其他想法吗?对我来说,最起码可行的解决办法是至少去掉临时的404,因为这可能会严重误导API客户机(或者,如果搜索引擎蜘蛛在每个URL上都得到404,那么想想网站的SEO效果)。只要是5xx,至少每个人都知道这只是一个暂时的错误。

最后,在2019年2月,AWS发布了Elastic Beanstalk Windows Server platform v2,该平台支持不可变和滚动,并提供了额外的批部署和平台更新(如其基于Linux的堆栈已支持多年):

即使对于(通常)只运行一个实例的环境,这也解决了这个问题