如何在Amazon Data Lifecycle Manager中为快照和AMI命名
DLM创建EBS AMI关联快照自定义命名实现方法
DLM的EBS-backed AMI生命周期策略原生不支持直接配置关联快照的自定义名称,策略中配置的AMI命名规则、自定义标签默认不会同步到AMI对应的底层EBS快照,这就是控制台中快照名称显示为(-)的原因。该需求可以通过补充轻量自动化配置实现,不需要改动现有DLM策略的核心备份逻辑。
原生能力边界
- DLM AMI策略目前仅支持对生成的AMI资源设置命名模板、自定义标签,关联快照是AMI创建流程中自动生成的附属资源,策略配置页没有提供快照命名、标签传递的对应入口。
- EC2控制台中快照显示的名称本质是快照的
Name标签值,只要给对应快照打上符合规则的Name标签,即可实现自定义显示名,不会再显示为空。
可落地方案
方案1:EventBridge + Lambda 自动打标签(推荐,无侵入)
该方案不需要调整现有DLM备份规则,仅需补充一层触发式自动化:
- 在现有DLM策略的标签配置项中,给生成的AMI添加一个固定标识标签,例如
BackupType=DLM-AMI,用于后续事件筛选。 - 创建EventBridge事件规则,匹配EC2服务的
CreateImage成功事件,筛选携带上述标识标签的AMI资源,设置触发目标为Lambda函数。 - 编写Lambda函数,触发后自动拉取新创建AMI关联的所有快照ID,按照预设命名规则给快照打
Name标签即可,核心逻辑参考如下Python(boto3)代码:
import boto3 ec2_client = boto3.client('ec2') def lambda_handler(event, context): # 从事件回调中获取新创建的AMI ID new_ami_id = event['detail']['responseElements']['imageId'] # 查询AMI基础信息与关联块设备映射 ami_detail = ec2_client.describe_images(ImageIds=[new_ami_id])['Images'][0] target_ami_name = ami_detail['Name'] # 遍历所有关联EBS快照打自定义名称标签 for block_device in ami_detail['BlockDeviceMappings']: if 'Ebs' not in block_device: continue snap_id = block_device['Ebs']['SnapshotId'] device = block_device['DeviceName'] # 可自行调整命名规则,示例格式:AMI名称_挂载设备名_快照ID custom_snap_name = f"{target_ami_name}_{device}_{snap_id}" ec2_client.create_tags( Resources=[snap_id], Tags=[{"Key": "Name", "Value": custom_snap_name}] )
- 权限配置注意:给Lambda执行角色分配最小权限即可,仅需授予
ec2:DescribeImages、ec2:CreateTags权限,无需多余访问权限。
方案2:自定义定时脚本全流程管理备份
如果不想维护Serverless资源,也可以自行编写定时脚本(部署在EC2、本地定时任务或自动化平台),逻辑为:先针对目标实例创建快照、按规则给快照命名打标签,再通过快照注册AMI,自行维护快照和AMI的淘汰、归档生命周期。该方案灵活度高,但需要自行实现全生命周期管理逻辑,维护成本高于方案1。
注意事项
- 不要修改DLM自动给快照打上的
aws:dlm:*前缀系统标签,否则会导致DLM无法识别关联资源,影响自动删除、归档等生命周期策略的正常执行;仅额外新增Name标签不会干扰DLM原有逻辑。 - 如果配置了AMI跨账号、跨区域复制规则,需要给复制后的快照同步补充打标签逻辑。
内容的提问来源于stack exchange,提问作者dktcaine
相关产品推荐
相关产品推荐

