如何在AWS EBS备份或快照任务前执行自定义Bash脚本?
在EBS备份前运行自定义Bash脚本的解决方案
针对你需要在EBS快照或AWS Backup执行前运行冻结应用脚本的需求,以下是两种服务对应的实现方案:
一、AWS EBS快照的实现方式
1. 封装脚本+CloudWatch Events触发
- 先把你的冻结脚本放到EC2实例的固定路径,比如
/opt/scripts/freeze-app.sh,赋予执行权限:chmod +x /opt/scripts/freeze-app.sh - 编写一个整合脚本,依次完成冻结、创建快照、解冻操作(解冻步骤必须存在,否则应用会持续无法写入):
#!/bin/bash # 执行应用冻结 /opt/scripts/freeze-app.sh freeze # 为目标EBS卷创建快照(替换为你的卷ID和描述) aws ec2 create-snapshot --volume-id vol-0123456789abcdef0 --description "Pre-freeze backup for memory-based app" # 可选:等待快照初始化完成,确保磁盘写入已落盘 sleep 10 # 解冻应用,恢复写入 /opt/scripts/freeze-app.sh thaw - 给EC2实例绑定具备
ec2:CreateSnapshot权限的IAM角色,无需在实例内存储AWS凭证。 - 通过CloudWatch Events(EventBridge)创建定时规则,使用SSM Agent执行上述整合脚本,实现定期自动备份。
2. SSM自动化文档
创建一个SSM自动化文档,将冻结、快照创建、解冻的步骤标准化,然后通过EventBridge定时触发文档执行。这种方式自带执行日志,便于后续排查问题。
二、AWS Backup服务的实现方式
AWS Backup没有原生的预备份脚本执行功能,但可以通过SSM Automation间接实现:
- 创建SSM自动化文档,包含以下步骤:
- 通过SSM Run Command在EC2实例内执行冻结脚本
- 调用AWS Backup API触发指定备份计划的任务
- 轮询备份任务状态,确认任务启动或完成
- 再次通过SSM Run Command执行解冻脚本
- 用EventBridge定时触发这个SSM自动化文档,替代AWS Backup的原生定时计划。
关键注意事项
- 必须在脚本中加入解冻逻辑,防止应用长期处于冻结状态导致业务中断。
- 测试冻结脚本的执行时长,确保在备份操作启动前完成磁盘写入落盘。
- 为EC2实例的IAM角色配置足够权限:包括SSM执行权限、EC2快照权限、AWS Backup相关权限。
- 建议在脚本中添加日志记录,比如将输出写入
/var/log/backup-pre-freeze.log,方便问题排查。
内容的提问来源于stack exchange,提问作者rfg
相关产品推荐
相关产品推荐

