如何在晚上自动缩减 AWS EC2 实例(停止并更改为 t2.small)并在早上自动扩展(停止并转到 t2.large)?

Posted

技术标签:

【中文标题】如何在晚上自动缩减 AWS EC2 实例(停止并更改为 t2.small)并在早上自动扩展(停止并转到 t2.large)?【英文标题】:How can I do AWS EC2 instance auto scale down in night (stop & change to t2.small) and automatic scale up (stop & go to t2.large) in morning? 【发布时间】:2022-01-02 18:40:36 【问题描述】:

我正在寻找AWS EC2 自动缩放功能,它可以在晚上自动停止我的 EC2 实例并更改我的实例类型(即:t2.xlarget2.small)整个晚上和早上再次停止 EC2 实例并每天更改实例类型(即 t2.smallt2.xlarge)。

请注意: 我已经检查了 IAM 角色 > 创建的角色以授予更改权限。并创建了 Lambda 函数并在 AWS CloudWatch 的帮助下插入停止和重新启动实例的代码,但我需要可以停止实例然后在晚上和早上的特定时间更改类型的代码。

【问题讨论】:

Auto Scaling 组旨在通过添加实例“横向扩展”和通过删除实例“缩减”。它不是旨在更改实例类型。您应该通过更改实例的数量而不是它们的大小来进行扩展。此外,在将 T 系列实例与 Auto Scaling 组一起使用时要非常小心——如果您有一个基于 CPU 利用率的扩展策略,它将不起作用,因为 T 系列实例的 CPU 有限制,它们实际上永远不会达到 100 % 长期。 【参考方案1】:

您可以安排调用AWS lambda 函数的CloudWatch 事件。 在函数中,您可以使用 AWS SDK ModifyInstanceAttribute API 更改实例类型。

请看下面boto3的示例:

import boto3
client = boto3.client('ec2')
# ....
client.modify_instance_attribute(InstanceId=my_instance, Attribute='instanceType', Value='m3.xlarge')

见:https://***.com/a/38671007/8718377

【讨论】:

需要先停止实例,然后实例类型才能更改。如果实例是由 Auto Scaling 启动的,那么 Auto Scaling 组可能会终止该实例,因为它没有运行。因此,这种方法对于 Auto Scaling 组可能不是一个好主意。 及时我正在尝试自动停止和启动,但我的代码在测试时显示错误“任务在 3.00 秒后超时”你知道如何适应它吗?

以上是关于如何在晚上自动缩减 AWS EC2 实例(停止并更改为 t2.small)并在早上自动扩展(停止并转到 t2.large)?的主要内容,如果未能解决你的问题,请参考以下文章

启动和停止 AWS EC2 实例

Celery:AWS ECS Autoscale 缩减事件(如何不破坏长时间运行的任务?)

AWS AutoScaling,缩减 - 等待进程终止

AWS EC2 启动/停止实例的 IAM 策略

无法正确停止我的 AWS EC2 实例

当实例连接到自动扩展组时,AWS EC2 如何更改实例类型?