亚马逊AWS官方博客

监控 Amazon EC2 实例运行时长,及时释放临时资源

在日常资源管理时,我们经常会遇到临时业务需求、开发测试环境、业务峰值应对等场景,为了满足这些需求我们需要扩展 Amazon EC2 资源。在使用这些资源完成后,及时删除它们非常重要,以避免资源浪费,尤其是对于加速计算和大规格的实例类型。传统的预算、账单警报方式只能监控到每日账单费用,无法及时发现和定位这些超出预期使用时间的临时资源。

本文介绍了如何利用亚马逊云科技的 Amazon EventBridge、Amazon DynamoDB、Amazon Lambda 和 Amazon SNS 等服务,实现对亚马逊云科技账号中 EC2 实例运行时长的检查,并通过邮件的方式将超出预期使用时间的 EC2 实例 ID 发送到设定的邮箱,提醒用户及时释放资源。这样一来,用户就能够方便地定位临时资源,有效避免资源的浪费。

方案原理

通过 Amazon EventBridge 定时触发 Amazon Lambda 函数读取预先存储在 Amazon DynamoDB 中的实例类型和计划运行时长等信息,同时使用标签来区分长期和临时资源。使用这些信息和标签对处于运行状态的 Amazon EC2 实例信息进行筛选;将筛选后的信息通过 Amazon SNS 发送到用户设置的邮箱中。

方案架构图

运行流程

  1. 通过 EventBridge 规则定时触发 Lambda 函数进行检测。例如,设置每天上午 09:00 执行检测,规则事件计划时间的 Cron 表达式为 ‘0 9 * * ? *’。
  2. Lambda 函数读取 DynamoDB 表中配置的实例类型和计划运行时长。
  3. Lambda 函数根据读取到的信息和正在运行的 EC2 实例进行匹配,获取不包含标签 prod=1 且超过运行时长的实例信息。
  4. Lambda 函数将超时运行的实例信息发布到 SNS Topic,通过邮件推送到订阅邮箱。

部署方式

通过 Amazon Cloudformation 部署

部署步骤

1. 准备模版文件

从地址 https://github.com/nwcd-samples/ec2-runtime-reminder/blob/main/ec2_runtime_timeout_reminder.yaml 下载模版。

2. 创建堆栈

3. 输入堆栈名称、监控的实例类型、预计运行天数、接收通知的邮箱地址等信息

4. 点击下一步

5. 部署过程中会创建用于 Lambda 执行的 IAM Role

请选择“我确认,Amazon CloudFormation 可能创建 IAM 资源” 然后点击提交。

6. 部署完成后请查看您在部署时配置的邮箱,点击 Confirm subscription 确认订阅SNS 通知

7. 如需增加或调整监控的实例类型,请在 DynamoDB 表中进行修改

8. 对于需要长期运行的实例,请增加为实例增加 Tag name 为 prod 、Value 为 1 的 Tag,用于将此实例排除在通知清单中

运行效果

在设置的时间,如果存在运行超出预设时间的实例,您将收到提醒邮件:

清理环境

删除 cloudformation 堆栈

方案所需资源估算

按照每天检测 1 次的频率,方案每月资源用量为:

服务类型 每月使用量
Amazon EventBridge 30 个事件
Amazon Lambda

内存 128M

30 次请求

月执行总时长 900 秒

Amazon DynamoDB

写入 1 次

读取 30 次

Amazon SNS 30 次邮件通知

本篇作者

杨月威

西云数据解决方案架构师。15+年产品研发和解决方案咨询经验,专注计算、操作系统、数据处理、AI 等技术。