gpt4 book ai didi

amazon-web-services - AWS CLI 和 JMESPath 过滤并选择嵌套属性

转载 作者:行者123 更新时间:2023-12-04 08:03:46 24 4
gpt4 key购买 nike

我想使用 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}"

我不是 JMESPath 的专家,我不明白为什么我的查询没有返回结果。存在以指定域作为别名的分发。

最佳答案

你非常接近!不过有几点:

  • 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
    }
    }
    ]
    }
    }

    让我们从表达式的第一部分开始。您需要的唯一解决方法是将引号取消为空:
    DistributionList.Items[?Aliases.Items!=null]

    这将成功过滤掉没有 Items 的元素下 Alias .如果你在这里停下来,你会得到什么,以及在管道之后你必须处理的事情:
    [
    {
    "Id": "foo",
    "Aliases": {
    "Quantity": 1,
    "Items": [
    "cname.cdn.mycompany.com"
    ]
    }
    },
    {
    "Id": "bar",
    "Aliases": {
    "Quantity": 1,
    "Items": [
    "cname.cdn.othercompany.com"
    ]
    }
    }
    ]

    请注意,没有 DistributionList.Items了。

    所以现在我们要过滤特定的 CNAME。让我们忽略重言式 == true .
    [?contains(Aliases.Items, 'cname.cdn.mycompany.com')]

    所以现在的完整表达是:
    DistributionList.Items[?Aliases.Items!=null] | [?contains(Aliases.Items, 'cname.cdn.mycompany.com')]

    您的结果是成功过滤的列表:
    [
    {
    "Id": "foo",
    "Aliases": {
    "Quantity": 1,
    "Items": [
    "cname.cdn.mycompany.com"
    ]
    }
    }
    ]

    现在,如果您想要匹配元素的 Id,只需添加 .Id到最后一个表情。如果你知道只有一个,你可以用另一个管道和 [0] 选择那个元素。 .
    DistributionList.Items[?Aliases.Items!=null] | [?contains(Aliases.Items, 'cname.cdn.mycompany.com')].Id | [0]

    然后你就得到了你想要的 ID!
    "foo"

    关于amazon-web-services - AWS CLI 和 JMESPath 过滤并选择嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35573727/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com