亚马逊云科技

广告

安信SSL证书

广告

亚马逊云服务器Amazon EC2实现自动关机以降低成本的方法

美国云服务器推荐

亚马逊云服务器Amazon EC2使用过程中,无论是免费还是付费套餐都需要对资源进行使用控制,从而避免资源浪费或导致额外成本。本文将主要分享亚马逊云服务器Amazon EC2实例自动关机机制的实现,从而大幅降低云支出。

亚马逊云科技官网:点击直达

本文将介绍以下两种简单且实用的方法:

  • 使用Amazon CloudWatch告警实现非活动状态的实例动态关机;
  • 使用AWS Lambda和Amazon EventBridge实现计划关机和指定批量关机。

前提条件

在开始实验前之前,请确保已满足以下条件:

1、一个具有所需资源权限的Amazon Web Services (AWS) 账户。具体注册教程:《亚马逊云科技账号注册流程图解

2、基本了解Amazon EC2、CloudWatch、Lambda、Amazon Identity and Access Management (IAM)和EventBridge等AWS服务。

3、了解基本的Python编程知识。

方法 1:使用CloudWatch告警动态关闭实例

这种方法非常适合根据实例的活动状态水平自动管理实例。能够对关机条件进行精细控制,这意味着你可以动态地优化资源用途和成本。监控实例的非活动状态时期,并根据CloudWatch告警触发针对空闲实例的关机操作,确保在你的整个AWS环境中高效地分配资源。

步骤 1:定位EC2实例

执行以下步骤,找到你的EC2实例并创建CloudWatch告警:

  • Amazon EC2控制台中,选择你希望自动关机的实例;
  • 在Alarm status(告警状态)列,选择+图标,然后创建CloudWatch告警,如下面的截图所示。

定位EC2实例

步骤 2:创建CloudWatch告警

我们需要创建一个CloudWatch告警,用于在实例的CPU利用率在1小时内保持在3%或以下(表示非活动状态)时自动停止该实例。在 Manage CloudWatch alarms(管理CloudWatch告警)页面中,完成以下设置项:

1、选择Create an alarm(创建告警)。

2、(可选)启用 Alarm notification(告警通知),并配置接收告警通知的 Amazon Simple Notification Service (Amazon SNS) 主题。

3、启用Alarm action(告警操作),并选择Stop(停止)。

4、在Alarm thresholds(告警阈值)部分,进行以下配置:

  • 在Group samples by(样本分组依据)中,选择Average(平均值)
  • 在Type of data to sample(采样数据类型)中,选择CPU Utilization(CPU 利用率)。
  • 在Alarm when(告警触发条件)中,选择 <=
  • 在Percent(百分比)中,选择3
  • 在Consecutive period(连续周期数)中,选择1
  • 在Period(周期时间)中,选择1 Hour(1小时)

为告警命名(例如,AutoShutdownInstance)。

描述告警相关的信息。

5、选择Create(创建)。

设置CloudWatch告警自动关闭实例可能会导致的问题是,意外停止正在执行关键后台任务但CPU使用率较低的实例。为了降低这种风险,在启用自动关机机制之前,请仔细审查你实例的工作负载模式。可以考虑使用除CPU利用率之外的其他指标(如网络活动或自定义应用程序指标),以便系统进行更全面的实例活动评估。

方法 2:使用Lambda和EventBridge实现计划关机和指定批量关机

此方法具有更高的可扩展性和灵活性,适用于管理企业机构在AWS环境中的多个实例。此方法允许在预定时间按计划关闭实例,也允许根据资源标签对实例进行批处理,从而全面控制Amazon EC2资源管理。

下图中的解决方案架构展示了如何使用AWS服务来根据预定义的EventBridge计划和资源标签自动关闭Amazon EC2实例,从而实现资源高效利用和成本优化。

计划关机和指定批量关机

步骤 1:创建AWS Lambda函数

执行以下步骤,创建AWS Lambda函数:

  • 在AWS Lambda控制台中,选择Create function(创建函数)。
  • 选择Author from scratch(从头开始创建)。
  • 为函数命名,例如“auto-stop-instances”。
  • 在Runtime(运行时)字段,选择Python 3.13。
  • 选择Create function(创建函数)。
  • 在Function(函数)页面的Code(代码)选项卡上,将默认代码替换为以下内容:

import boto3

def lambda_handler(event, context):

# Initialize the EC2 client

ec2 = boto3.client(‘ec2’)

# Define the tag key and value to identify instances to be stopped

tag_key = ‘AutoStop’

tag_value = ‘True’

# Get a list of all instances

instances = ec2.describe_instances(Filters=[{‘Name’: ‘tag:’+tag_key, ‘Values’: [tag_value]}])

# Iterate through reservations and instances

for reservation in instances[‘Reservations’]:

for instance in reservation[‘Instances’]:

instance_id = instance[‘InstanceId’]

# Check the current state of the instance

instance_state = instance[‘State’][‘Name’]

# If the instance is running, stop it

if instance_state == ‘running’:

ec2.stop_instances(InstanceIds=[instance_id])

print(f”Stopped EC2 instance {instance_id}”)

else:

print(f”EC2 instance {instance_id} is in state {instance_state}, skipping.”)

可以将tag_key和tag_value变量值替换为你要分配给EC2实例的标签信息。

步骤 2:修改Lambda函数执行角色

执行以下步骤,修改Lambda函数的执行角色:

1、在Lambda函数页面的Configuration(配置)选项卡上,从导航栏中选择Permissions(权限)。

2、在Role name(角色名称)下,点击角色链接,打开IAM控制台中的Lambda函数执行角色页面。

修改Lambda函数执行角色

3、在IAM角色页面上,选择Add permissions(添加权限),然后选择Create inline policy(创建内联策略)。

4、在JSON编辑器中,将默认策略替换为以下策略:

{

“Version”: “2012-10-17”,

“Statement”: [

{

“Effect”: “Allow”,

“Action”: [

“ec2:StopInstances”,

“ec2:DescribeInstances”

],

“Resource”: “*”

}

]

}

“`

Amazon EC2的 ec2:Describe* API 操作不支持资源级权限,这意味着你无法在控制台中限制用户访问特定资源的权限。这就是需要在 IAM 策略声明的 Resource 元素中使用 * 通配符的原因。

5、选择 Next(下一步)。

6、为策略命名,例如 auto-stop-instance-policy。

7、选择 Create policy(创建策略)。

步骤 3:创建EventBridge计划

执行以下步骤,创建 EventBridge 计划:

1、在Amazon EventBridge控制台的导航栏中,选择Schedules(计划),然后选择Create schedule(创建计划)。

2、在计划详情页面中,为计划命名,例如“auto-stop-instances”。

3、在Schedule pattern(计划模式)部分,进行以下配置:

  • 在Occurrence(频次)字段,选择Recurring schedule(重复计划);
  • 在Time zone(时区)字段,选择运行计划的区域所对应的时区;
  • 在Schedule type(计划类型)字段,选择Cron-based schedule(基于Cron的计划);
  • 在Cron expression(Cron 表达式)字段,输入计划表达式参数。例如,你可以输入 0 17 * ? Cron 表达式中的 通配符表示每天在 17:00 触发,如以下截图所示;
  • 在Flexible time window(灵活时间窗口)字段,选择Off(关闭);
  • 选择Next(下一步)。

创建EventBridge计划

4、在Select target(选择目标)页面上,选择Templated targets(模板化目标),然后选择AWS Lambda。

5、选择你在步骤 1 中创建的Lambda函数作为目标。选择Next(下一步)。

6、保留Settings(设置)中的默认设置。选择Next(下一步)。

7、检查设置,确认无误后选择Create schedule(创建计划)。

步骤 4:为Amazon EC2实例添加标签

为每个需要实施自动关闭的Amazon EC2实例添加一个标签,标签的键值分别为你在步骤1中创建Lambda函数的Python代码中设置的键和值。默认的键值对为:

tag_key = ‘AutoStop’
tag_value = ‘True’

可以在Amazon EC2实例控制台页面上的Tags(标签)选项卡,或使用AWS Resource Groups 控制台中的标签编辑器,为EC2实例添加标签。Lambda函数将在计划的时间自动停止所有带有该资源标签的EC2实例。

总结一下,上述第一种方法使用Amazon CloudWatch告警动态关闭非活动状态的实例,非常适合于监控重要资源。第二种方法使用AWS Lambda和Amazon EventBridge实施计划关机和指定批量关机,从而实现对多个实例的高效管理。这些方法有助于优化EC2资源使用,在不需要时关闭实例,从而最大限度地减少不必要的开支。

最佳实践和注意事项:

1、定期审查:定期审查你的自动关机机制设置,确保其符合不断变化的资源使用模式。

2、沟通:确保所有团队成员都了解自动关机策略,以防止服务意外中断。

3、例外情况处理:实施关键时期暂时不对实例排执行自动关机的流程。

4、监控和日志记录:配置全面的日志记录,用于跟踪关机事件和任何潜在问题。

5、成本分析:定期分析通过自动关机机制节省的成本,向利益相关者展示投资回报 (ROI)。

若需对Amazon EC2实例的运行时长进行有效检查,并通过邮件的方式将超出预期使用时间的EC2实例ID发送到预先设定的邮箱,实现提醒用户及时释放资源的方法建议参考:《Amazon EC2实例运行时长监控教程 避免资源浪费》。

(本文由美国主机侦探原创,转载请注明出处“美国主机侦探”和原文地址!)

主机侦探企业微信

微信扫码加好友进群

主机优惠码及时掌握

主机侦探QQ群

QQ群号:938255063

主机优惠发布与交流

温馨提示:

1、本站部分图片来源于互联网,如有侵权请联系删除。邮箱:2942802716#qq.com(#改为@)

2、本文评论没有专人回复,如果您有问题请到美国主机侦探论坛提问!

3、美国主机侦探免费为您提供美国主机购买咨询。

RAKsmart美国服务器
返回顶部