首页 文章

使用Elastic Beanstalk部署的应用程序上的弹性IP

提问于
浏览
38

我对Amazazon Web Services提供的弹性IP服务的使用感到有些困惑 . 我想主要的想法是,我可以按照这个简单的过程切换到新版本的Web应用程序,无需停机:

  • 在新的EC2实例上部署新版本

  • 正确配置新版本并使用暂存数据库对其进行测试

  • 经过适当测试,使这个新版本使用实时数据库

  • 将弹性IP与此实例相关联

  • 终止所有无用的服务(登台DB和旧的EC2实例)

这是部署新版Web应用程序的常用方法吗?

现在,如果应用程序在更多实例上扩展,该怎么办?我在Elastic Beanstalk设置中配置了自动缩放,这创建了一个负载均衡器(我可以在AWS管理控制台的EC2部分看到) . 问题是我显然无法将弹性IP与负载均衡器相关联,我必须将其与现有实例相关联 . 我应该将它与哪个实例相关联?我糊涂了...

对不起,如果有些问题可能听起来很愚蠢,但我只是程序员,这是我第一次 Build Cloud 系统 .

谢谢!

3 回答

  • 13

    Elastic Load Balancing (ELB)不适用于Amazon EC2 Elastic IP addresses,实际上这两个概念根本不合用 .

    弹性负载 balancer 弹性

    相反,ELB通常通过CNAME records使用(但见下文),如果需要,它通过允许别名DNS地址更改正在使用的ELB的IP来提供第一级弹性/可用性 . 当您在已注册的EC2实例之间分配流量时,负载均衡器会执行第二级弹性/可用性 .

    可以这样想:CNAME永远不会改变(就像弹性IP地址一样)并且EC2实例的替换是通过负载均衡器,Auto Scaling或您自己(通过注册/取消注册实例)来处理的 .

    Shlomo Swidler的优秀分析The “Elastic” in “Elastic Load Balancing”: ELB Elasticity and How to Test it更详细地解释了这一点,该分析又反映了AWS最近提供的Best Practices in Evaluating Elastic Load Balancing,它确认了他的分析并提供了关于Elastic Load Balancing服务的体系结构及其工作原理的良好总体读数 . (但缺少Shlomo提供的说明性逐步样品) .

    域名

    请注意,前一个需要CNAME的限制同时通过Amazon Route 53的相应添加来解决,以允许使用根域(或区域Apex),请参阅Moving Ahead With Amazon Route 53中的别名和区域Apex以获取快速概述,有关详细信息,请参阅Using Domain Names with Elastic Load Balancing .

    Elastic Beanstalk的弹性

    首先,如上所述,AWS Elastic Beanstalk依次使用Elastic Load Balancing . 如果是这样,它增加了应用程序生命周期管理:

    AWS Elastic Beanstalk是您在AWS Cloud 中快速部署和管理应用程序的更简单方法 . 您只需上传您的应用程序,Elastic Beanstalk会自动处理容量配置,负载 balancer ,自动扩展和应用程序运行状况监视的部署详细信息 . [...] [强调我的]

    这是通过在混合中添加环境概念来实现的,这在_2628202中有解释:

    环境是应用程序的核心 . [...]创建环境时,AWS Elastic Beanstalk会提供运行应用程序所需的资源 . 为环境创建的AWS资源包括一个弹性负载均衡器(图中的ELB),Auto Scaling组和一个或多个Amazon EC2实例 .

    请注意,每个环境都有一个指向负载均衡器的CNAME(URL),就像使用ELB一样 .

    所有这些都汇集在Managing and Configuring Applications and Environments中,它详细讨论了AWS Elastic Beanstalk的一些最重要的功能,包括使用AWS管理控制台,CLI和API的使用示例 .

    零停机时间

    很难确定最相关的部分用于说明目的,但是Deploying Versions With Zero Downtime精确地解决了您的使用案例并且暗示了所有必需的前面步骤(例如Creating New Application VersionsLaunching New Environments),因此阅读部分AWS管理控制台可能会为您提供此平台工作原理的最佳总体情况 .

    祝好运!

  • 3

    除了Steffen的精彩答案中描述的选项之外,如果您不需要Elastic Load的全部功能,Elastic Beanstalk似乎最近也可以选择 enabled Elastic IP . balancer 器(如自动缩放超过一个实例) .

    我在my answer to a similar question中描述了该选项 . Elastic Beanstalk现在允许您在两个Environment Types之间进行选择,而单实例选项可以创建弹性IP .

    Dropdown with options "Single instance" and "Load balancing, autoscaling".


    我认为在大多数情况下使用ELB将是更好的选择,但是对于一个临时服务器,有一个不太复杂(和更便宜)的替代品是很好的 .

  • 61

    几年之后回答帖子的道歉,但对于那些确实需要ELB上的一组静态IP地址的人,可以很好地向AWS请求将他们称之为“稳定IP”的地址添加到ELB,从而给它静态IP地址功能 .

    他们当然不喜欢这样做 - 但是如果你可以证明这一点(主要的理由是你的客户端通过防火墙对出站连接有IP白名单限制,而且完全不愿意采取这种立场) .

    请注意,基于流量选项的“自动缩放”不再是直接的 - AWS无法动态地向ELB添加更多的ELB endpoints ,因为它们使用开箱即用的解决方案,您必须经历随着时间的推移,与您的客户一起开辟新IP地址的痛苦 .

    但是对于原始问题,EB使用ELB来实现EC2实例,其中实际上不需要静态IP地址(没有客户端出站防火墙问题)是根据接受的答案的最佳方式 .

相关问题