手动EBS快照如何设置保留策略,避免其被归档?
手动EBS快照的保留策略设置(防止被归档)
默认情况下,手动创建的EBS快照不会自动被归档到冷存储——归档只会在你主动配置了生命周期规则或手动修改快照存储层时触发。要给这些手动快照设置固定保留期并确保不被归档,可通过以下几种方式实现:
方法1:用EC2生命周期管理器(Lifecycle Manager)配置规则
这是AWS官方推荐的自动化管理方式,无需写代码:
- 登录EC2控制台,左侧导航栏找到生命周期管理器,点击创建快照生命周期策略
- 策略类型选择管理现有快照,然后指定要管理的快照:
- 可以通过标签筛选(比如给需要保留的手动快照统一添加
BackupType:Manual标签,这里就设置标签匹配规则)
- 可以通过标签筛选(比如给需要保留的手动快照统一添加
- 设置保留参数:
- 在保留期里输入你需要的天数(比如30天)
- 找到快照过渡到归档存储选项,选择从不——这一步是核心,确保快照始终留在标准存储,不会被归档
- 完成策略创建后,符合标签规则的手动快照会被自动管理:到期自动删除,且全程不会被归档
方法2:自定义Lambda函数+CloudWatch Events管理
如果需要更灵活的逻辑(比如按不同业务线设置不同保留期),可以用Lambda实现:
- 给手动快照添加自定义标签,比如
RetentionDays:90(表示保留90天) - 创建Lambda函数(用Python/Node.js均可),核心逻辑:
- 调用EC2 API获取所有带
RetentionDays标签的快照 - 计算快照创建时间与当前时间的差值,对比标签里的保留天数
- 对超过保留期的快照执行删除操作
- 额外检查快照的存储层属性,确保是
standard,如果是archive可以调用modify-snapshot-attribute改回标准存储
示例Python代码片段:
import boto3 from datetime import datetime, timezone ec2 = boto3.client('ec2') def lambda_handler(event, context): snapshots = ec2.describe_snapshots(Filters=[{'Name': 'tag-key', 'Values': ['RetentionDays']}])['Snapshots'] now = datetime.now(timezone.utc) for snap in snapshots: retention_days = int([tag['Value'] for tag in snap['Tags'] if tag['Key'] == 'RetentionDays'][0]) create_time = snap['StartTime'] days_diff = (now - create_time).days if days_diff > retention_days: # 删除过期快照 ec2.delete_snapshot(SnapshotId=snap['SnapshotId']) # 确保未被归档(可选) if snap['StorageTier'] == 'archive': ec2.modify_snapshot_attribute( SnapshotId=snap['SnapshotId'], Attribute='storage-tier', Value='standard' ) - 调用EC2 API获取所有带
- 用CloudWatch Events(EventBridge)设置定时触发Lambda(比如每天执行一次)
方法3:手动修改快照的存储层属性(应急处理)
如果你的手动快照已经被设置为自动归档,可以手动改回标准存储:
- 控制台方式:找到对应快照,右键选择修改存储层,选择标准并保存
- CLI命令:
aws ec2 modify-snapshot-attribute --snapshot-id snap-xxxxxxxxx --attribute storage-tier --value standard
关键注意点
- 手动快照默认无自动归档/删除规则,所有操作都是主动配置的结果
- 无论用哪种方式,标签都是管理快照的核心——通过标签快速区分需要保留的手动快照和其他系统自动快照
- 如果不需要自动删除,只是想防止被归档,只需确保快照的存储层始终是
standard,没有配置任何归档相关的生命周期规则
内容的提问来源于stack exchange,提问作者arunxls
相关产品推荐
相关产品推荐

