如何在Cloud Custodian策略中获取AWS ECS的隐藏settings字段?
解决Cloud Custodian筛选启用Container Insights的ECS集群问题
问题根源
Cloud Custodian默认调用AWS ECS的describe-clusters接口时,不会携带--include SETTINGS参数,因此返回的集群数据中缺少settings字段——这就是你执行无筛选器策略后resources.json里看不到containerInsights相关内容,且筛选器返回count:0的核心原因。
解决方案
需要两步配置:首先让Cloud Custodian拉取集群的settings数据,然后配置正确的筛选器匹配Container Insights的启用状态。
正确的策略配置
policies: - name: ecs-cluster-container-insights-enabled resource: aws.ecs resource-options: include: ["SETTINGS"] # 对应CLI的--include SETTINGS,拉取settings字段 filters: - type: value key: 'settings[] | select(.name == "containerInsights").value' op: eq value: "enabled"
配置说明
- resource-options.include:通过这个参数告诉Cloud Custodian在调用
describe-clusters时携带include=SETTINGS,这样返回的集群数据中就会包含settings数组,每个元素包含配置项的name和value。 - 筛选器key路径:使用jq表达式
settings[] | select(.name == "containerInsights").value,从settings数组中筛选出名称为containerInsights的配置项,然后取它的value值,再判断是否等于enabled。
验证方法
执行策略后,查看生成的resources.json,确认每个集群条目下存在settings字段;同时策略的count应该会正确统计启用了Container Insights的集群数量。
为什么之前的筛选器无效?
- 没有配置
resource-options.include,导致Cloud Custodian根本没拉取settings字段,筛选器找不到对应数据。 - 之前的key路径
settings[].name.containerInsights错误:settings数组的每个元素的name是字符串(比如containerInsights),不是嵌套对象,所以这个路径无法定位到目标值。
内容的提问来源于stack exchange,提问作者Sibtain
相关产品推荐
相关产品推荐

