AWS Systems Manager 自动化:配置 EC2 实例定期执行磁盘清理与日志归档
·
AWS Systems Manager 自动化:配置 EC2 实例定期执行磁盘清理与日志归档
1. 核心概念
- Systems Manager:AWS 的集中式运维管理服务,支持自动化任务、补丁管理、状态监控等。
- 自动化文档(Automation Document):定义自动化任务的 YAML/JSON 文件,包含执行步骤和参数。
- 维护窗口(Maintenance Window):设置定期执行任务的计划时间表。
2. 配置步骤
2.1 IAM 角色配置
为 EC2 实例附加 IAM 角色,使其具有以下权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"ssm:SendCommand"
],
"Resource": "*"
}
]
}
2.2 创建自动化文档
在 Systems Manager 中创建自定义文档(类型:Automation),内容如下:
name: DiskCleanupAndLogArchive
description: "执行磁盘清理与日志归档"
schemaVersion: "0.3"
assumeRole: "{{ AutomationAssumeRole }}"
parameters:
InstanceId:
type: "String"
description: "目标 EC2 实例 ID"
LogPath:
type: "String"
default: "/var/log"
S3Bucket:
type: "String"
description: "日志归档的 S3 存储桶"
mainSteps:
- name: CleanDisk
action: "aws:runCommand"
inputs:
DocumentName: "AWS-RunShellScript"
InstanceIds: ["{{ InstanceId }}"]
Parameters:
commands:
- "sudo find /tmp -type f -mtime +7 -delete"
- "sudo journalctl --vacuum-time=7d"
- name: ArchiveLogs
action: "aws:runCommand"
inputs:
DocumentName: "AWS-RunShellScript"
InstanceIds: ["{{ InstanceId }}"]
Parameters:
commands:
- "tar -czvf /tmp/archive-$(date +%Y%m%d).tar.gz {{ LogPath }}"
- "aws s3 cp /tmp/archive-*.tar.gz s3://{{ S3Bucket }}/"
- "rm -f /tmp/archive-*.tar.gz"
2.3 设置维护窗口
- 在 Systems Manager 控制台创建维护窗口:
- 名称:
WeeklyLogMaintenance - 计划:使用 cron 表达式(例如每周日凌晨 2 点:
cron(0 2 ? * SUN *))
- 名称:
- 注册目标 EC2 实例:
- 通过实例 ID 或标签(如
Environment=Production)选择
- 通过实例 ID 或标签(如
- 添加任务:
- 任务类型:
Automation - 文档:选择
DiskCleanupAndLogArchive - 参数:
InstanceId: 目标实例 IDS3Bucket: 日志存储桶(如my-log-bucket)
- 任务类型:
3. 关键脚本说明
- 磁盘清理:
- 删除
/tmp下超过 7 天的文件 - 清理系统日志(保留最近 7 天)
sudo find /tmp -type f -mtime +7 -delete sudo journalctl --vacuum-time=7d - 删除
- 日志归档:
- 压缩日志目录:
tar -czvf /tmp/archive-$(date +%Y%m%d).tar.gz /var/log - 上传至 S3:
aws s3 cp /tmp/archive-*.tar.gz s3://my-bucket/ - 清理本地临时文件:
rm -f /tmp/archive-*.tar.gz
- 压缩日志目录:
4. 验证与监控
- 执行验证:
- 手动在维护窗口中触发任务
- 检查 S3 存储桶是否生成压缩日志
- CloudWatch 监控:
- 配置 Events 规则捕获
AutomationExecution状态变更 - 失败时触发 SNS 告警
- 配置 Events 规则捕获
- 日志查看:
- 在 Systems Manager > Run Command 中查看任务执行日志
5. 最佳实践
- 安全加固:
- 使用 KMS 加密 S3 存储桶中的日志
- 限制 IAM 角色的最小权限范围
- 错误处理:
- 在自动化文档中添加
timeoutSeconds参数防止超时 - 使用
aws:waitForApt步骤确保命令依赖就绪
- 在自动化文档中添加
- 成本优化:
- 设置 S3 生命周期策略,自动转移日志至 Glacier
- 对维护窗口执行频率进行成本评估
注:此方案适用于 Linux 实例。Windows 实例需改用 PowerShell 脚本(如
Remove-Item和Compress-Archive)。
更多推荐

所有评论(0)