You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用AWS CLI的--query选项筛选含指定别名的CloudFront分发

AWS CloudFront CLI 查询:筛选包含特定别名的分发

问题描述

使用aws cloudfront list-distributions获取CloudFront分发列表时,尝试通过--query选项筛选出别名中同时包含sandbox和domain.com的分发,执行以下命令时出现错误:

aws cloudfront list-distributions --query 'DistributionList.Items[?contains(Aliases.Items[*], `sandbox`) && contains(Aliases.Items[*], `domain.com`)].[{Id:Id}]' --output json

错误信息:

In function contains(), invalid type for value: None, expected one of: ['array', 'string'], received: "null"

错误原因

  1. 空别名导致的null值:部分分发未配置自定义别名,此时Aliases.Items为null,直接传入contains()函数会触发类型错误(contains()要求参数为数组或字符串)。
  2. 数组遍历语法错误:contains(Aliases.Items[*], 'sandbox')的写法不符合JMESPath规范,无法正确遍历数组元素检查子串。

正确命令

根据需求分为两种场景:

场景1:别名列表中同时存在含sandbox和domain.com的别名(可不同别名)

aws cloudfront list-distributions --query 'DistributionList.Items[?Aliases.Items != null && (any(Aliases.Items[], contains(@, `sandbox`)) && any(Aliases.Items[], contains(@, `domain.com`)))].[{Id:Id}]' --output json

场景2:存在单个别名同时包含sandbox和domain.com

aws cloudfront list-distributions --query 'DistributionList.Items[?Aliases.Items != null && any(Aliases.Items[], contains(@, `sandbox`) && contains(@, `domain.com`))].[{Id:Id}]' --output json

语法说明

  • Aliases.Items != null:先过滤掉无自定义别名的分发,避免null值引发错误。
  • any(Aliases.Items[], contains(@, 'xxx')):使用JMESPath的any()函数遍历别名数组,@代表当前遍历的数组元素,检查是否有任意元素包含指定子串。

内容的提问来源于stack exchange,提问作者Chris F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:04:53