为了保持可持续性发展,企业不断寻求IT成本优化方法,进而大幅降低云支出。其中对Amazon EC2实例的管理尤为重要,实现Amazon EC2实例自动关机机制可以降低企业成本。本文就以亚马逊云科技为例,为大家介绍下实现Amazon EC2实例自动关机机制的方法,希望可以对大家有所帮助。
亚马逊云科技Amazon EC2是一款强大、安全和稳定的云服务器,提供免费试用服务,提供的配置是1核1G、30GB SSD硬盘,多操作系统可选,可以免费试用12个月。
亚马逊云科技免费Amazon EC2:点击获取
相关推荐:《如何注册亚马逊AWS账号》
可以实现Amazon EC2实例自动关机机制的方法有两种,一是使用Amazon CloudWatch告警实现非活动状态的实例动态关机;二是使用AWS Lambda和Amazon EventBridge实现计划关机和指定批量关机。
一、使用Amazon CloudWatch告警动态关闭实例
1、定位Amazon EC2实例
执行以下步骤,找到用户的Amazon实例并创建Amazon CloudWatch告警:
在Amazon EC2控制台中,选择你希望自动关机的实例。
在Alarm status(告警状态)列,选择+图标,然后创建CloudWatch告警,如下面的截图所示。
2、创建Amazon CloudWatch告警
选择Create an alarm(创建告警)。
启用Alarm action(告警操作),并选择Stop(停止)。
在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)。
- 描述告警相关的信息。
选择Create(创建)。
二、使用AWS Lambda和Amazon EventBridge实现关机机制
1、创建AWS Lambda函数
在AWS Lambda控制台中,选择Create function(创建函数)。
选择Author from scratch(从头开始创建)。
为函数命名,例如“auto-stop-instances”。
在Runtime(运行时)字段,选择Python 3.13。
选择Create function(创建函数)。
在Function(函数)页面的Code(代码)选项卡上,将默认代码替换为以下内容:
```python
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、修改AWS Lambda函数执行角色
在Lambda函数页面的Configuration(配置)选项卡上,从导航栏中选择Permissions(权限)。
在Role name(角色名称)下,点击角色链接,打开IAM控制台中的Lambda函数执行角色页面。
在IAM角色页面上,选择Add permissions(添加权限),然后选择Create inline policy(创建内联策略)。
在JSON编辑器中,将默认策略替换为以下策略:
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:DescribeInstances"
],
"Resource": "*"
}
]
}
```
Amazon EC2的ec2:Describe*API操作不支持资源级权限,这意味着你无法在控制台中限制用户访问特定资源的权限。这就是需要在IAM策略声明的Resource元素中使用*通配符的原因。
选择Next(下一步)。
为策略命名,例如auto-stop-instance-policy。
选择Create policy(创建策略)。
3、创建AWS EventBridge计划
在Amazon EventBridge控制台的导航栏中,选择Schedules(计划),然后选择Create schedule(创建计划)。
在计划详情页面中,为计划命名,例如“auto-stop-instances”。
在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(下一步)。
在Select target(选择目标)页面上,选择Templated targets(模板化目标),然后选择AWS Lambda。
选择你在步骤1中创建的Lambda函数作为目标。选择Next(下一步)。
保留Settings(设置)中的默认设置。选择Next(下一步)。
检查设置,确认无误后选择Create schedule(创建计划)。
4、为AWS EC2实例添加标签
为每个需要实施自动关闭的EC2实例添加一个标签,标签的键值分别为你在步骤1中创建Lambda函数的Python代码中设置的键和值。默认的键值对为:
tag_key = 'AutoStop'
tag_value = 'True'