如何实现Amazon EC2实例自动关机机制

为了保持可持续性发展,企业不断寻求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告警,如下面的截图所示。

创建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函数执行角色页面。

AWS 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(下一步)。

AWS Lambda函数

在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'

使用教程

1Panel面板快速搭建WordPress网站教程

2025-10-17 17:40:06

使用教程

恒创科技云服务器安装Plesk控制面板

2025-10-20 17:55:34

相关推荐