AWS-CLI - 按名称标签查找 ELB

Mos*_*she 6 aws-cli

我正在尝试找到一个带有具有Name某些价值的标签的负载均衡器。

aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].LoadBalancerName'
Run Code Online (Sandbox Code Playgroud)

我正在迭代结果并运行:

aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[?Tags[?Key==`Name`].Value == `my-desired-name-value`]'
Run Code Online (Sandbox Code Playgroud)

即使这样,结果始终为空:

aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[].Tags[?Key==`Name`].Value'
Run Code Online (Sandbox Code Playgroud)

确实返回my-desired-name-value。我想仅使用 JMESPath 获取标签的整个对象,我不能jq在这里使用。

期望的输出:

{
    "TagDescriptions": [
        {
            "LoadBalancerName": "some-load-balancer",
            "Tags": [
                {
                    "Key": "SomeTag",
                    "Value": "SomeValue"
                },
                {
                    "Key": "Name",
                    "Value": "my-desired-name-value"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我的JMESPath查询出了什么问题?

ken*_*kas 6

您正在尝试使用--query来执行的角色--filter,但不幸的describe-tags是不支持该--filter选项。

--query选项允许您选择响应中返回的字段。如果可用,--filter您可以选择要返回的资源。这里有更详细的描述

您可以使用它jq来执行过滤器的功能。我强烈推荐它,因为 AWS 并未--filter为所有 CLI 命令实现该选项。

对于您的示例,请尝试以下操作:

aws elb describe-tags --load-balancer-names some-load-balancer \
| jq -r '.TagDescriptions[] |select (.Tags[].Value=="my-desired-name-value")'
Run Code Online (Sandbox Code Playgroud)

稍微复杂一点的是过滤标签键和值:

aws elb describe-tags --load-balancer-names some-load-balancer \
| jq -r '.TagDescriptions[] | . as $i \
| (select ($i.Tags[].Value=="my-desired-name-value")) and (select ($i.Tags[].Key=="Name")) \
| $i'
Run Code Online (Sandbox Code Playgroud)

输出

{
  "LoadBalancerName": "some-load-balancer",
  "Tags": [
    {
      "Key": "Type",
      "Value": "classic"
    },
    {
      "Key": "Name",
      "Value": "my-desired-name-value"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

参考