Jer*_*obs 7 amazon-web-services amazon-cloudfront aws-cli jmespath
我想使用CLI工具来检索具有特定cname /别名的CloudFront分配的分发ID.
这就是我想出的:
aws cloudfront list-distributions --query "DistributionList.Items[?Aliases.Items!='null']|DistributionList.Items[?contains(Aliases.Items,'cname.cdn.mycompany.com') == 'true'].{Id:Id}"
Run Code Online (Sandbox Code Playgroud)
我不是JMESPath的专家,我不明白为什么我的查询不会返回结果.存在具有指定域作为别名的分发.
Jor*_*ips 13
你非常接近!但有几点:
null 不是 'null'null,true不是一个字符串(== true也是多余的)jmespath.org有一个可用于测试表达式的实时编辑器.这是我们可以用来测试这种情况的简化json:
{
"DistributionList": {
"Items": [
{
"Id": "foo",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.mycompany.com"
]
}
},
{
"Id": "bar",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.othercompany.com"
]
}
},
{
"Id": "baz",
"Aliases": {
"Quantity": 0
}
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
让我们从表达式的第一部分开始.您需要的唯一修复是将引号关闭为null:
DistributionList.Items[?Aliases.Items!=null]
Run Code Online (Sandbox Code Playgroud)
这将成功地过滤掉不元素Items下Alias.如果你停在这里,你会得到什么,以及在管道之后你需要做些什么:
[
{
"Id": "foo",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.mycompany.com"
]
}
},
{
"Id": "bar",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.othercompany.com"
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
请注意,现在已经没有DistributionList.Items了.
所以现在我们想要过滤特定的CNAME.让我们忽略同义反复== true.
[?contains(Aliases.Items, 'cname.cdn.mycompany.com')]
Run Code Online (Sandbox Code Playgroud)
所以现在的完整表达是:
DistributionList.Items[?Aliases.Items!=null] | [?contains(Aliases.Items, 'cname.cdn.mycompany.com')]
Run Code Online (Sandbox Code Playgroud)
您的结果是成功过滤的列表:
[
{
"Id": "foo",
"Aliases": {
"Quantity": 1,
"Items": [
"cname.cdn.mycompany.com"
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
现在,如果你想要匹配元素的Id,只需添加.Id到最后一个表达式.如果你知道只有一个,你可以用另一个管道选择那个元素[0].
DistributionList.Items[?Aliases.Items!=null] | [?contains(Aliases.Items, 'cname.cdn.mycompany.com')].Id | [0]
Run Code Online (Sandbox Code Playgroud)
你得到你想要的Id!
"foo"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1039 次 |
| 最近记录: |