亚马逊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 发送到用户设置的邮箱中。
方案架构图
![]() |
运行流程
- 通过 EventBridge 规则定时触发 Lambda 函数进行检测。例如,设置每天上午 09:00 执行检测,规则事件计划时间的 Cron 表达式为 ‘0 9 * * ? *’。
- Lambda 函数读取 DynamoDB 表中配置的实例类型和计划运行时长。
- Lambda 函数根据读取到的信息和正在运行的 EC2 实例进行匹配,获取不包含标签 prod=1 且超过运行时长的实例信息。
- 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 次邮件通知 |