Cloud Custodian EBS 快照自动化实战:批量创建、标签继承与滚动清理
云原生运维安全【免费下载链接】cloud-custodianRules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources项目地址https://gitcode.com/gh_mirrors/cl/cloud-custodian点击查看免费下载本文基于 docs/source/aws/examples/ebssnapshots.rst 提供的官方示例深入讲解如何用 Cloud Custodian 的 YAML 策略完成 EBS 快照的全生命周期管理为 EC2 实例的卷批量创建快照并把实例标签复制到快照上再通过年龄过滤自动删除超过 7 天的旧快照实现永远保留最近 7 天滚动快照的备份治理闭环。读完本文你将掌握snapshot动作的完整参数语义、ebs-snapshot资源与age过滤器的组合用法以及源码级的行为细节与常见坑位。策略全景两段式快照生命周期管理官方示例由两条策略组成一条负责创建一条负责清理配合起来就是一套可持续运行的滚动备份方案创建策略遍历所有 EC2 实例对其挂载的 EBS 卷执行快照同时把实例的关键运维标签如负责人、用途、成本中心、环境等复制到快照上并打上自定义标记清理策略扫描当前账号自有的快照筛出年龄 ≥ 7 天且带有 custodian 快照标记的逐一删除。两条策略分别面向ec2与ebs-snapshot两个资源类型前者使用snapshot动作后者使用delete动作恰好对应 Cloud Custodian 中对资源执行操作与对资源做筛选后清理的典型范式。策略一为 EC2 实例卷创建快照并继承标签policies: - name: ec2-create-ebs-snapshots resource: ec2 actions: - type: snapshot copy-tags: - CreatorName - Resource Contact - Resource Purpose - Environment - Billing Cost Center - Name tags: CloudCustodian: true动作注册与权限要求该动作在 c7n/resources/ec2.py 中注册为actions.register(snapshot)类名为Snapshot(BaseAction)。它声明的 IAM 权限为ec2:CreateSnapshotec2:CreateTags即策略执行时对应的运行角色必须同时具备创建快照与打标签的权限否则会在运行时被 AWS 拒绝。参数语义源码确认从动作的 schema 定义c7n/resources/ec2.py#L1926-L1931可以看到该动作支持以下参数参数类型默认值说明copy-tags字符串数组无把列出的实例/卷标签复制到快照上与copy-volume-tags互斥copy-volume-tagsbooleantrue复制卷上的全部标签到快照tagsobject{custodian_snapshot: }创建时额外附加的自定义标签exclude-bootbooleanfalse是否排除启动卷root volume不打快照几个关键行为需要特别留意默认行为是复制卷的全部标签。源码注释明确写着 The default behavior iscopy-volume-tags: truec7n/resources/ec2.py。只有当策略中显式出现copy-tags时才会走按名单复制的逻辑。copy-tags与copy-volume-tags不能同时出现。动作的validate()方法会在策略加载阶段直接抛出PolicyValidationErrorc7n/resources/ec2.py即这是一个在运行前就会被拦截的配置错误。tags的默认值非常关键当未显式指定tags时快照会被自动打上custodian_snapshot标签源码见get_snapshot_tagsc7n/resources/ec2.py。这正是官方示例第二条策略中用tag:custodian_snapshot: present过滤的前提。底层实现批量卷快照与错误兜底Snapshot.process_volume_setc7n/resources/ec2.py展示了真正的执行细节调用的是 EC2 的CreateSnapshots批量卷快照接口而非单卷的CreateSnapshot并通过InstanceSpecification指定InstanceId与ExcludeBootVolume快照描述被固定为Snapshot Created for {InstanceId} ({Name})便于在控制台/API 中快速溯源创建成功后快照 ID 列表被写入资源的c7n:snapshots属性供后续动作或输出使用对InvalidInstanceId.NotFound、ConcurrentSnapshotLimitExceeded、IncorrectState三类已知错误做了降级处理仅记录 warning 不中断整批任务其余错误则向上抛出并记录到resources的错误日志中。官方示例的copy-tags名单里既有裸键CreatorName、Environment、Name也有带空格的键Resource Contact等说明该列表支持任意合法的实例标签键名YAML 中带空格或特殊字符的键记得加引号。策略二删除超过 7 天的旧快照- name: ebs-delete-old-ebs-snapshots resource: ebs-snapshot filters: - type: age days: 7 op: ge - tag:custodian_snapshot: present actions: - deleteebs-snapshot 资源默认只扫自己的快照ebs-snapshot在 c7n/resources/ebs.py 中注册底层使用 EC2 的describe_snapshots枚举。它的resources()方法有两个值得注意的默认行为OwnerIds未指定时强制为[self]即只扫描当前账号自有的快照绝不会碰共享快照或公共快照MaxResults默认 1000配合分页可覆盖大账号下的海量快照。同时SnapshotQueryParserc7n/resources/ebs.py支持在query中直接传递 AWS 原生的快照查询条件例如owner-id、statuspending/completed/error、tag、tag-key、volume-id、start-time、volume-size等可以在枚举阶段就收窄扫描范围降低 API 调用成本。age 过滤器按时间老化筛选age是 Cloud Custodian 内置的通用过滤器语义为资源存在时间。官方示例中days: 7指定 7 天为阈值op: ge表示大于等于资源年龄 ≥ 7 天即命中。因此该过滤器精确命中创建于 7 天前或更早的快照。需要反向匹配时可将op换成lt小于。由于快照的StartTime即创建时间age过滤器在此场景下天然成立。标签存在性过滤只清理自己产生的快照第二条过滤条件tag:custodian_snapshot: present是 Cloud Custodian 的标签值过滤器语法当快照带有custodian_snapshot标签无论值是什么即命中。它的价值在于把我们策略创建的快照与人工或其他工具创建的快照区分开避免误删手工保留的备份。delete 动作默认保护 AMI 关联快照SnapshotDeletec7n/resources/ebs.py实现删除逻辑权限要求为ec2:DeleteSnapshot。源码揭示了两个重要的安全设计默认自动过滤 AMI 关联快照删除前会调用_filter_ami_snapshots剔除与任何 AMI 关联的快照by default to keep things safe并在日志中记录被自动过滤的数量批量与重试快照按 50 个一组分块提交删除并对RequestLimitExceeded、Client.RequestLimitExceeded等限流错误自动重试适合大规模清理场景。若确有需要连同 AMI 相关快照一起处理可在动作中显式声明skip-ami-snapshots: false该参数在 schema 中定义见 c7n/resources/ebs.py但请务必确认业务上不依赖这些 AMI。组合运行如何把两条策略跑起来将两条策略放入同一个 YAML 文件后用标准命令执行即可custodian run -c ebs-snapshots.yml -s output/-c指定策略文件路径-s指定输出目录资源 JSON、日志、metrics 等会落到该目录。两条策略互不依赖、顺序无关创建策略产出的快照天然带有custodian_snapshot标记7 天后清理策略自然命中它们。把该命令接入 cron / EventBridge 定时调度例如每天运行一次即可实现文档标题所描述的始终保留最近 7 天的滚动快照窗口。实战提醒标记一致性决定清理是否生效这是最容易踩的坑且可以从源码直接推导出来get_snapshot_tagsc7n/resources/ec2.py的逻辑是——tags参数一旦被显式指定就用你给的标签替代默认值只有未指定tags时才自动补上custodian_snapshot标签。因此官方示例中tags: CloudCustodian: true意味着快照上不会有custodian_snapshot标签此时第二条策略的tag:custodian_snapshot: present过滤将匹配不到任何快照删除策略实际不会生效想要两条策略无缝衔接应二选一创建策略不写tags让默认的custodian_snapshot标签生效CloudCustodian标记可通过copy-tags里的Name等或后续动作补充或者在tags中显式同时写入custodian_snapshot如tags: {CloudCustodian: true, custodian_snapshot: true}。这一点在官方仓库的测试 tests/test_ebs.py 中有直接佐证test_volume_snapshot_copy_tags用copy-tags时断言快照标签包含custodian_snapshot而test_volume_snapshot_copy_volume_tags显式给出tags时断言快照标签与给定标签完全一致、不再有默认标记。验证与扩展仓库中的单元测试为上述行为提供了可复现的验证入口使用 placebo 回放录制数据tests/test_ebs.pytest_volume_snapshot_copy_tags验证copy-tags按名单复制并附加默认custodian_snapshot标签tests/test_ebs.pytest_volume_snapshot_copy_volume_tags验证显式tags完全覆盖默认标签tests/test_ebs.py 附近的test_snapshot_copy等用例覆盖了快照复制与删除的完整调用链。在此基础上你还可以自然扩展出更多场景用exclude-boot: true只为数据卷打快照以节省成本在ebs-snapshot策略的query中加入status: completed只处理完成态快照或叠加value过滤器按VolumeSize进一步收敛清理范围。把握住snapshot动作的参数语义与ebs-snapshot资源的过滤体系一套适合自己团队的 EBS 快照治理策略就能快速落地。赞分享云原生运维安全【免费下载链接】cloud-custodianRules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources项目地址https://gitcode.com/gh_mirrors/cl/cloud-custodian点击查看免费下载相关推荐Cloud Custodian Azure 标签管理实战用 untag 动作批量清理虚拟机标签Cloud Custodian Azure 标签管理实战用 untag 动作批量清理虚拟机标签 导读 本文围绕 Cloud Custodianc7nAzu云原生运维安全Operator SDK v1.39.0 升级指南Kubernetes 1.31 与 Kubebuilder NetworkPolicy 脚手架迁移实战Operator SDK v1.39.0 升级指南Kubernetes 1.31 与 Kubebuilder NetworkPolicy 脚手架迁移实战 导读云原生运维安全LibrePhotos 缺失照片机制详解标记原理、自动重链与批量清理实战LibrePhotos 缺失照片机制详解标记原理、自动重链与批量清理实战 当照片文件被移动、重命名或存储介质断开时LibrePhotos 不会直接删除数据库后端前端移动开发计算机视觉机器学习上一篇GHelper 快速上手3 步完整接管华硕笔记本风扇、显卡与电池性能控制下一篇突破并发瓶颈redis-py与FastAPI打造高性能异步Web服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

简化 Android 的 UI 开发:基于虚拟布局与自动重渲染的纯 Java 数据绑定方案

简化 Android 的 UI 开发:基于虚拟布局与自动重渲染的纯 Java 数据绑定方案

文档教程知识库 【免费下载链接】android-tech-frontier 【停止维护】一个定期翻译国外Android优质的技术、开源库、软件架构设计、测试等文章的开源项目 项目地址: https://gitcode.com/gh_mirrors/an/android-tech-frontier 点击查看 免费下载 本文依据 android-…

2026/10/10 5:25:33 阅读更多 →
BFE mod_trace 规则配置 trace_rule.data 完全指南:基于产品线与条件表达式的分布式跟踪开关配置

BFE mod_trace 规则配置 trace_rule.data 完全指南:基于产品线与条件表达式的分布式跟踪开关配置

后端网络/通信云原生 【免费下载链接】bfe A modern layer 7 load balancer from baidu 项目地址: https://gitcode.com/gh_mirrors/bf/bfe 点击查看 免费下载 导读 trace_rule.data 是 BFE 七层负载均衡器中 mod_trace 模块的规则配置文件,其作用是在…

2026/10/10 5:25:33 阅读更多 →
MATLAB时间序列预测实战:从AR到ARIMA的完整之路

MATLAB时间序列预测实战:从AR到ARIMA的完整之路

今天咱们聊聊用MATLAB玩时间序列预测的野路子。别被AR、ARIMA那些缩写吓到——说白了这就是一个拿历史数据找规律、猜未来的游戏。这篇文章没有高深理论的堆砌,只有能直接跑起来的代码和我在实际项目里踩过的坑。不管你是刚接触MATLAB的新手,还是已经在用…

2026/10/10 5:25:33 阅读更多 →

最新新闻

AI正在悄悄“架空”高阶人士:决策降维与判断力退化深度剖析

AI正在悄悄“架空”高阶人士:决策降维与判断力退化深度剖析

1. 从三个瞬间说起:AI带来的不只是便利,还有隐性的侵蚀上个月在咖啡馆,隔壁桌坐着一个做跨境电商的老板,手机里开着某AI对话应用,眉头紧锁地在问:“帮我分析一下这个季度的广告数据,为什么转化率…

2026/10/11 8:53:41 阅读更多 →
Protobuf 3.7.1 Debug版本源码编译实战指南

Protobuf 3.7.1 Debug版本源码编译实战指南

手上没有一个开源项目能避开序列化这个话题。实战里不管是写RPC框架、做消息中间件,还是给分布式系统定义数据协议,Protobuf几乎成了默认选项。但绝大多数人用Protobuf的方式就是直接拉某个官方编译好的二进制,或者用包管理器装一下完事——这…

2026/10/11 8:53:41 阅读更多 →
BTP ABAP环境单元测试实战:从依赖注入到CI/CD质量门禁

BTP ABAP环境单元测试实战:从依赖注入到CI/CD质量门禁

最近好几个从 ECC、S/4HANA 传统开发环境转过来的朋友,都在问我同一个问题:在 SAP BTP ABAP 环境里到底怎么做单元测试?刚开始在 ADT 里打开一个空白的测试类时,我自己也懵了一会儿——没有 SE38、没有 SE80,连怎么单独…

2026/10/11 8:53:41 阅读更多 →
YOLOv8电梯电瓶车检测实战:轻量化部署与场景适配

YOLOv8电梯电瓶车检测实战:轻量化部署与场景适配

1. 为什么电梯里要专门“盯”电瓶车?——从安全逻辑到技术落点的底层思考你有没有在老式居民楼里见过这样的场景:傍晚六点,三四个住户陆续推着电瓶车进电梯,车轮卡在轿厢门槛上吱呀作响,电池包紧贴轿壁,充电…

2026/10/11 8:53:41 阅读更多 →
零售SaaS结算的最后一块拼图

零售SaaS结算的最后一块拼图

——业务系统管得了“干了什么活”,管不了“钱怎么发、票怎么开”  薪连薪是企业公转私全链路合规结算互联网平台,通俗说,是帮企业合规给个人付钱的平台。一、几乎所有零售SaaS,都卡在同一个地方  零售连锁这门生意&#xff0…

2026/10/11 8:53:41 阅读更多 →
从环境到上线:Vue项目实战与踩坑全指南

从环境到上线:Vue项目实战与踩坑全指南

干 Vue 这些年,见得最多的就是新手把环境配到一半就卡住,然后跑来问“为什么我 npm run dev 直接报错”“为什么 devtools 不显示”。其实 Vue 本身不难,难的是把生态里的一堆配套工具摸清楚,再踩过几个经典的坑。这篇文章我就按实…

2026/10/11 8:52:41 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →