启动和停止 AWS EC2 实例

Posted

技术标签:

【中文标题】启动和停止 AWS EC2 实例【英文标题】:Start and stop AWS EC2 instance 【发布时间】:2019-08-03 10:44:36 【问题描述】:

我有一个要求,我需要每天自动(在 Autoscaling 组内)。这主要是为了防止成本。我已经构建了一个 Python 脚本来启动和停止 EC2 实例,但它无法正常工作,因为 EC2 实例位于自动缩放组中。 有谁知道这个问题的解决方案吗?

【问题讨论】:

如果可能的话,您能否分享您的代码的 sn-p,这将有助于人们更好地回答您的问题 【参考方案1】:

Amazon EC2 Auto Scaling 组旨在自动扩展,以便在工作负载较高时添加额外实例,在工作负载较少时删除实例。

Auto Scaling 还有助于确保应用程序的运行状况。如果 Auto Scaling 组中的实例未通过健康检查,它将自动终止。然后 Auto Scaling 将启动一个新实例来替换它。

您的要求似乎是在不使用应用程序时降低成本。这可以通过创建定义 Auto Scaling 何时应添加和删除实例的扩展策略来完成,例如:

平均 CPU 利用率在 15 分钟内超过 65%(所有实例)时添加实例 当平均 CPU 利用率在 30 分钟内低于 30% 时删除实例

(请注意,通常快速向外扩展是好的,但要缓慢地向下扩展。)

通过使用这样的扩展策略,甚至 automatic Target Tracking,Auto Scaling 会为您处理好事情。

另一方面,如果您希望手动控制 Auto Scaling 组,您可以使用以下方法添加和删除实例:

set_desired_capacity() 告诉 Auto Scaling 您想要多少个实例(并让它启动/终止实例以匹配) terminate_instance_in_auto_scaling_group() 从 Auto Scaling 组中删除 特定 个实例

您应该永远不要直接停止/终止 Auto Scaling 组中的实例,否则 Auto Scaling 将假定该实例失败并自动启动替换。

【讨论】:

嗨 John,感谢您的 amnswer。但我们的要求是使用 Lambfa 函数根据计划开始停止 EC2 实例。请注意,我们所有的 EC2 实例都在 Autoscaling 组中。我们确实手动配置了调度程序在 Autoscaling 组中,但我们希望使用 Lamba 函数/Cloudwatch 使其自动化。 为什么实例在 Auto Scaling 组中?您的要求似乎与使用 Auto Scaling 组不兼容。 嗨 John,如果我们在增加和减少所需容量的情况下手动执行此操作,EC2 实例将从 Autoscaling 组停止和启动。此外,我们在 Autoscaling 组中使用了计划的操作功能.是否可以使用 Lamba 功能和 Cloudwatch 对其进行某种程度的自动化,以便 Ec2 实例停止是营业时间,并在营业时间开始前的第二天开始。时间将是一个输入。 首先,请注意 Auto Scaling 不会停止和启动——它会终止和启动(差别很大!)。 Scheduled Scaling 怎么不能满足你的需求?是的,您可以通过来自 Lambda 的 API 调用,通过上述 API 调用来控制它。但是,现实情况是您应该拥有可以根据需求自动调整的 Scaling Policies(这是使用 Auto Scaling 组的全部目的)。【参考方案2】:

您需要做的是自动化自动缩放参数,用于所需的实例、最小实例和最大实例。理想情况下,您希望更改所需的实例数量。这将导致自动缩放器终止过多的实例,以满足所需的实例数量。

【讨论】:

理想情况下,您希望答案提供更多信息,也许共享链接或具有代码 sn-ps,就目前而言,这不是我将其归类为好的答案,等待 OP 也是有益的在回答问题之前发布一些代码 对不起,我只是匆忙发布,将开始提供更多信息性答案,谢谢

以上是关于启动和停止 AWS EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

用于自动启动和停止 AWS EC2 实例的脚本

如何在 Java 中以编程方式启动和停止 Amazon EC2 实例

aws账户停用,实例未停用,怎么办

玩转 AWS EC2 不得不了解的那些实例购买选项

玩转 AWS EC2 不得不了解的那些实例购买选项

玩转 AWS EC2 不得不了解的那些实例购买选项