AWS-CLI - 通过名称标签查找 ELB

AWS-CLI - 通过名称标签查找 ELB

我正在尝试寻找带有Name某个值标签的负载均衡器。

aws elb describe-load-balancers --query 'LoadBalancerDescriptions[*].LoadBalancerName'

我正在迭代结果并运行:

aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[?Tags[?Key==`Name`].Value == `my-desired-name-value`]'

即使这样,结果也总是空的:

aws elb describe-tags \
--load-balancer-names some-load-balancer \
--query 'TagDescriptions[].Tags[?Key==`Name`].Value'

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

期望输出:

{
    "TagDescriptions": [
        {
            "LoadBalancerName": "some-load-balancer",
            "Tags": [
                {
                    "Key": "SomeTag",
                    "Value": "SomeValue"
                },
                {
                    "Key": "Name",
                    "Value": "my-desired-name-value"
                }
            ]
        }
    ]
}

我的路径询问?

答案1

您正在尝试使用--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")'

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

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'

输出

{
  "LoadBalancerName": "some-load-balancer",
  "Tags": [
    {
      "Key": "Type",
      "Value": "classic"
    },
    {
      "Key": "Name",
      "Value": "my-desired-name-value"
    }
  ]
}

参考

答案2

aws elbv2 describe-tags --resource-arns | jq -r '.TagDescriptions[] | . 作为 $i | (选择($i.Tags[].Value | 测试(".-。-05-我的团队。-。"))) 和(选择 ($i.Tags[].Key=="Name")) | $i.ResourceArn'

相关内容