amazon-web-services - AWS Elastic Beanstalk 在部署时会突然停机

标签 amazon-web-services amazon-elastic-beanstalk

我正在为我的 node.js express.js 应用程序测试 Elastic Beanstalk。当我部署更新时,应用程序会关闭几秒钟,并且我从 ngnix 收到“坏网关”。

这是因为我现在只有 1 个实例吗?我如何为生产做好准备?就像零停机时间一样。

最佳答案

即使使用具有 1 个以上实例的 Elastic Beanstalk 环境,您也可能会遇到相同的不良行为。原因是所有实例可能会同时运行更新过程。

如果您想避免停机,Elastic Beanstalk 上有一个名为 的内置功能。交换 URL .这是蓝绿部署策略的一个非常简单的实现。

基本上,在蓝绿部署策略中,您有 2 组资源:蓝色资源和绿色资源。假设最初,蓝色资源正在接收和处理生产流量。该策略的工作原理如下:(1)您将应用程序的新版本部署到绿色资源中; (2) 你运行任何你可能想要的热身程序,如果你有的话; (3) 您使用某种“流量管理器”将生产流量发送到您的绿色资源中; (4) 一旦所有流量从蓝色资源迁移到绿色资源,您可以选择关闭蓝色资源。

在 Elastic Beanstalk 中,为此您需要 2 个环境。假设我们有 2 个具有以下名称和 URL 的环境:

  • 第一个环境名为 Env-Blue , 带有 URL myapp-prod.elasticbeanstalk.com .
  • 第二个环境称为 Env-Green , 带有 URL myapp-staging.elasticbeanstalk.com .

  • 我们还假设您有自己的域名,www.myapp.com , 指向 myapp-prod.elasticbeanstalk.com .您目前正在 Env-Blue 上运行 v1.0,并且正在努力推出 v1.1。

    当您准备好部署 v1.1 时,您将其部署到 Env-Green 中——您这样做是因为它是当前的“暂存”环境。然后你可以连接到它,确保它完全按照你的意愿工作。

    最后,您在 Elastic Beanstalk 上选择两个环境并选择交换 URL 功能 .您的环境将如下所示:
  • 第一个环境名为 Env-Blue , 带有 URL myapp-staging.elasticbeanstalk.com ,运行旧的 v1.0。
  • 第二个环境称为 Env-Green , 带有 URL myapp-prod.elasticbeanstalk.com ,运行新的 v1.1。

  • www.myapp.com仍然指向myapp-prod.elasticbeanstalk.com ,您的用户,他们正在连接到 www.myapp.com ,现在将被发送到运行 v1.1 的 Env-Green。随着用户刷新他们的 DNS 缓存,他们将逐渐迁移到 v1.1。

    最后一个非常重要的注意事项:要使此策略正常工作,为域记录配置适当的 TTL 非常重要。如果它太长,您的用户可能会将您的 DNS 缓存很长时间,并且迁移需要一段时间。在此期间,您必须保持 2 组资源运行(您将为此付费)。

    关于amazon-web-services - AWS Elastic Beanstalk 在部署时会突然停机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37671446/

    相关文章:

    angular - 如何获取和更新用户属性 AWS amplify angular 6

    powershell - DynamoDB API 过滤扫描不返回任何结果

    php - AWS Elastic Beanstalk PHP 日志不在 CloudWatch 中

    symfony - 将 Symfony 应用程序部署到 Elastic Beanstalk

    amazon-web-services - AWS 云信息 : how to manage relationship between configtemplate and environment?

    security - 使用 ECS 时保护来自 EC2 实例的出站流量规则

    amazon-web-services - AWS SSM : Pass tag-name instead of Instance-ID

    amazon-web-services - 如何将授权/api key 附加到 sam cli 生成的 api?

    amazon-web-services - 如何使用ElasticBeanstalk设置自动伸缩组运行状况检查类型

    python - Django collectstatic 命令在 AWS Elastic Beanstalk Amazon Linux 2 Python 3 平台中失败