Cloud Custodian如何筛选指定Azure资源组内的所有资源
Cloud Custodian 沙箱资源清理策略问题排查与实现方案
原配置报错原因
- 基础适配问题:你的推测成立,
azure.armresource资源类型本身不支持parent过滤器,查阅该资源类型的官方可用过滤器列表,确实未收录parent过滤器,这是策略校验失败的核心原因。 - 格式写法错误:即使parent过滤器支持该资源类型,你的配置写法也不符合规范:parent过滤器的
filter参数接收单个过滤器对象,不接收过滤器列表。你将过滤规则写在了YAML列表(-开头的数组结构)中,校验逻辑会误将传入的数组识别为数值类型参数,最终抛出「is not of type 'number'」的类型校验错误。 - 附带逻辑错误:你写的正则规则
^myprefix*$存在匹配逻辑问题,正则中*是作用于紧邻前一个字符的量词,该表达式实际匹配的是myprefi后接0到多个x字符的字符串,无法实现“匹配指定前缀资源组”的预期,前缀匹配的正确正则写法应为^myprefix.*$。
筛选指定资源组内全量资源的实现方案
不需要使用parent过滤器,直接用azure.armresource原生支持的resource-group过滤器即可实现需求,这是最简洁、适配性最高的方案,参考配置如下:
policies: - name: weekly-playground-resource-cleanup resource: azure.armresource # 按周执行可搭配定时调度配置,或通过cron定期执行custodian run命令 filters: - type: resource-group key: name op: regex value: '^myprefix.*' # 替换为你实际的开发者资源组命名规则 actions: - type: delete
如果需要额外匹配资源组的标签、区域、创建时间等扩展属性,也可以使用traverse过滤器从资源反向关联所属资源组做多层属性校验,但该方案配置更冗余,无特殊需求优先用上述resource-group过滤器方案即可。
注意:执行清理前建议先跑一次不带delete动作的策略,用custodian report命令导出匹配到的资源列表做校验,避免误删非沙箱资源;同时要给Custodian使用的服务主体分配目标订阅的对应操作权限,避免执行删除时报权限不足。
内容的提问来源于stack exchange,提问作者chops
相关产品推荐
相关产品推荐

