【问题标题】:Pause an Elastic Beanstalk app environment?暂停 Elastic Beanstalk 应用程序环境?
【发布时间】:2015-11-19 12:49:52
【问题描述】:

我想在升级数据库时关闭应用服务器。

有没有办法在不终止/破坏环境的情况下暂停或停止应用服务器?

我是否可以只使用 Elastic Beanstalk 负载均衡器并临时更改它,而不会对 Elastic Beanstalk 配置或其管理服务器的方式造成任何问题或后果?

【问题讨论】:

  • 它曾经支持 CLI 命令 'eb stop' 和 'eb start' 但现在不再支持。怀疑您需要拍摄数据快照,然后终止并从同一版本重新创建环境。见docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
  • @jarmod - 我认为现在可以使用eb scale 有效地实现暂停环境,详情请参阅my answer
  • 如果只有一个实例,难道不能直接从 EC2 控制台停止底层 EC2 实例吗?

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


【解决方案1】:

这是唯一对我有用的方法。

1) 转到您要暂停的环境AWS Management Console

2) 选择“配置”

3) 打开“容量”

4) 一直向下滚动到“基于时间的缩放”

5) 点击“添加计划操作”按钮

6) 将操作设置为未来几分钟(推荐:5 分钟,以便环境有时间重置),为其命名(例如“终止”)并将最小和最大实例设置为“0”:

请注意,时间设置为 UTC。您可以使用time.is/UTC 来确定当前的UTC。

这会产生一个错误,导致您的环境关闭,因此您无需为此付费。 建议的任何其他方法只是在应用时创建一个错误,因此它不会通过并且环境仍然可以工作。

要重新启用环境,只需使用实例 min 1 和 max 4 安排另一个操作(这些是默认值)。

【讨论】:

  • 现在不行了。 Beanstalk 首先验证配置,然后直接发送一条带有错误的服务消息,而不应用配置。
  • @JorgeOrpinel 您确定您使用的是扩展环境而不是“单实例”吗?我每天都在使用它(预定)...
  • 你是对的。我的预定操作从未运行,因为我没有正确设置时间!我不认为您必须使用UTC时间。 time.is/UTC 对此很有用 B) 毕竟它似乎有效。
  • @JorgeOrpinel 很高兴它仍然有效,感谢您改进答案。 :)
  • 它对我有用,但我还必须将所需容量设为零。但是,不错的答案
【解决方案2】:

来自AWS What's New blog Dec 16, 2016

您现在可以恢复已在 终止。您可以在 42 内恢复 Elastic Beanstalk 环境 它们终止的天数,恢复的环境将保留 原始环境 ID、CNAME、应用程序版本和 配置选项。

您可以使用 Elastic Beanstalk 控制台 EB CLI、AWS CLI、SDK 和 API 用于恢复已 终止。访问documentation了解更多信息。

【讨论】:

    【解决方案3】:

    根据您编排AWS Elastic Beanstalk 环境的方式,这可以通过EB 命令行界面的eb scale 命令来实现,例如:

    将环境缩放为始终在指定数量的 实例,将最小和最大实例数设置为 指定的号码。

    • 还可以通过 Elastic Beanstalk 控制台的“配置”部分(特别是“缩放”磁贴)访问基础 Auto Scaling 设置。

    或者,您始终可以通过将最小实例数和所需实例数设置为零来手动缩减 Auto Scaling 组。

    【讨论】:

    • 嗯,它似乎不允许我将其设置为 0
    • @MonkeyBonkey - 您是否将最小和所需数字都设置为 0?我特别尝试过,因为我不是 100% 积极的。 EB 行为也是如此,在这方面确实可能存在一些限制 - 但是,它对我来说效果很好,此后环境被简单地标记为红色,也就是不健康,但除此之外它只是工作并保持这种状态,直到我终止它几个小时后。
    • 是的,我试过了,它说最大值不能小于最小值,也不会让我设置 0。
    • 这很奇怪,您使用的是什么解决方案堆栈?无论哪种方式,一种替代方法可能是转到 EC2 控制台(仪表板左下方)中的 Auto Scaling 组管理并调整相应的值。从那里开始的 ASG - 这不受 Elastic Beanstalk 的控制,因此可能规避任何 EB 特定约束。
    • @SteffenOpel scale 如果它是负载平衡服务器,则可以工作。如果没有,您将收到此消息:The environment is currently a single-instance. Do you want to change to a load-balancing environment? WARNING: If you choose yes, the environment and your application will be temporarily unavailable.
    【解决方案4】:

    Configuration > Capacity > Auto Scaling Group 下将minmax 设置为0 将关闭EC2 实例。

    事件条目: There are no instances. Auto Scaling group desired capacity is set to zero.

    【讨论】:

    • 注意: 如果您设置了滚动更新,这将不起作用(错误:“滚动更新服务中的最小实例(1) 应小于 Autoscaling 组 (1)") 的最大实例数;要解决此问题,还将 Rolling updates and deployments > Configuration updates > Rolling update type 更改为 Disabled
    • 您仍需为负载均衡器付费。我被这个打击了几个月。
    【解决方案5】:

    我只能通过直接设置 ASG 值来使用 aws-cli 来完成这项工作。扩展到 1 个实例:

    aws autoscaling update-auto-scaling-group --auto-scaling-group-name <ASG-Name> 
      --min-size=1 --max-size=1 --region <region>
    

    然后暂停,将 ASG 中的最小尺寸减小到 0:

    aws autoscaling update-auto-scaling-group --auto-scaling-group-name <ASG-Name> 
      --min-size=0 --max-size=1 --region <region>`
    

    然后将所需容量设置为 0 以杀死实例:

    aws autoscaling set-desired-capacity --auto-scaling-group-name <ASG-Name>
      --desired-capacity 0 --region <region>
    

    【讨论】:

      猜你喜欢
      • 2020-09-29
      • 2019-01-28
      • 2016-07-30
      • 2015-03-25
      • 2018-06-07
      • 2018-06-19
      • 2015-10-17
      • 2015-09-18
      • 2019-09-16
      相关资源
      最近更新 更多