奇怪的 AWS CLI 查询过滤

AWS CLI query filtering oddly

总的来说,我试图找出我们的哪些 SNS 主题没有被使用。所以我想得到一个活跃的 SNS 主题列表,然后从完整列表中减去它。好像没那么容易。 Cloudwatch 仅在过去 6 小时内有 activity 的情况下报告指标。但这就是我能找到的所有内容,所以我会安排一项工作来每隔几个小时抓取活跃的主题并保留一个唯一的列表。 (如果有人有更好的主意,我洗耳恭听)

为此,我正在构建一个查询,以便在给定时间为我提供活动主题名称。 第一遍看起来像这样

aws cloudwatch list-metrics --query 'Metrics[*].Dimensions[*].[Name,Value]' --namespace 'AWS/SNS' --metric-name 'NumberOfMessagesPublished'

这让我有点像这样

[
  [
    [
        "TopicName",
        "bogus"
    ]
  ]
]

但我真的只想要主题名称。 因此,根据此 AWS doc 中的“过滤特定值”部分,我将查询修改为

--query 'Metrics[*].Dimensions[?Name=='TopicName'].[Value]'

但我得到的只是

[
    []
]

我看不出这个例子和我的用例有什么区别。但我一定是漏掉了什么。

你可以考虑改变

--query 'Metrics[*].Dimensions[?Name=='TopicName'].[Value]'

--query 'Metrics[*].Dimensions[?Name==`TopicName`].[Value]'

区别在于比较值周围的反引号。尽管示例显示了反引号,但 AWS 文档或 jmespath 文档都没有使这一点显而易见。本来以为是MS换人