【问题标题】:Get Value of Name Tag from EC2 instances using jq使用 jq 从 EC2 实例中获取名称标签的值
【发布时间】:2020-05-11 14:57:05
【问题描述】:

我正在尝试使用 jq 获取 AWS EC2 实例的 Name 标签的值。

aws ec2 describe-instances | jq -r '.Reservations[].Instances[] | .Tags[] | select (.Key == "Name")'

但我收到此错误:

jq: error: Name/0 is not defined at <top-level>, line 1:
.Reservations[].Instances[] | .Tags[] | select (.Key == Name)
jq: 1 compile error

这是我要处理的 json:

{
    "Reservations": [{
        "Instances": [{
            "AmiLaunchIndex": 0,
            "ImageId": "ami-00c3c949f325a4149",
            "InstanceId": "i-0c17052ee1c7113e5",
            "Architecture": "x86_64",
            "Tags": [{
                    "Key": "Name",
                    "Value": "bastion001"
                },
                {
                    "Key": "environment",
                    "Value": "stg-us-east"
                }
            ]
        }]
    }]
}

如何从 EC2 实例中获取 Name 标签的值?

【问题讨论】:

  • 这是一个Try it online!,带有您的过滤器和 json。一开始看起来还可以。您可以通过添加| .Value 来获取名称。 peak 的建议是最好的,如果你看到像你这样的错误。
  • 好棒!谢谢你,我会试试的。

标签: amazon-web-services amazon-ec2 jq


【解决方案1】:

您不需要像jq 这样的额外工具来查询输出。 AWS CLI 有 JMESPath 内置帮助您做到这一点。

aws ec2 describe-instances --query 'Reservations[*].Instances[*].Tags[?Key == `Name`].Value'

【讨论】:

  • 是的,但这不是问题
【解决方案2】:

Q 中显示的 jq 命令行表达式与错误消息不匹配。我建议至少在你把事情整理好之前,把你的 jq 程序放在一个文件中,然后用 -f 命令行选项调用 jq。

【讨论】:

    【解决方案3】:

    你可以这样做,这将在逗号分隔列表中从 ec2 获得你想要的内容

    jq -r '.Reservations[].Instances[] \ | ((.Tags // empty) | from_entries) as $tags | [($tags.Name), ($tags.environment), .ImageId, .InstanceId, .AmiLaunchIndex] | @csv'
    

    如果您想知道,.Tags // empty 将忽略那些带有不存在标签的标签。

    希望这会有所帮助,您不需要 jq 来获取这些详细信息是正确的,但这就是您的方式:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 2011-08-22
      • 2020-12-22
      • 2020-09-19
      相关资源
      最近更新 更多