【问题标题】:aws cli: How can I query list values?aws cli:如何查询列表值?
【发布时间】:2014-01-09 12:12:06
【问题描述】:

aws cli 有一个 --query 选项,允许您仅选择一些信息。

例如,我有兴趣从 ec2 describe-instances 中获取安全组名称。

如果我跑:

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,SecurityGroups]

我的输出如下:

i-xxxxxxx m1.type [{u'GroupName': 'groupName', u'GroupId': 'sg-xxxxx'}]

我还可以使用索引访问列表的元素:

aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Tags[0].Value,Tags[0].Name]

是否可以查询标签,而不是 Tag[0] 我搜索指定名称的标签?

【问题讨论】:

  • 你不能从输出中提取出来吗?
  • @Andrey:我希望有一种方法可以在查询中包含类似 SecurityGroups{Name=Foo} 的内容。另一种方法是使用 json 格式并将其通过管道传输到 jq,但我想先确保我没有遗漏任何东西。
  • 但是为什么不直接用 jq 来做呢?
  • 如果可以使用两种工具,为什么要使用?
  • 我了解,但我正在尝试了解本机命令行工具的功能 - 有没有办法引用列表项的属性?您可以参考结构的属性,并从列表中选择项目,但是可以将两者结合起来吗?

标签: amazon-web-services aws-cli


【解决方案1】:
select security_groups from aws.aws_ec2_instance;
> select security_groups from aws.aws_ec2_instance limit 1;
+---------------------------------------------------------------------------------------------------------------------------------+
|                                                         security_groups                                                         |
+---------------------------------------------------------------------------------------------------------------------------------+
| [{"GroupId":"sg-xxxx","GroupName":"xxxx"},{"GroupId":"sg-xxxxxx","GroupName":"xxxx"}] |
+---------------------------------------------------------------------------------------------------------------------------------+

这只会列出您的实例的安全组。

你也可以使用

select security_groups from aws.aws_ec2_instance where instance_id = 'i-xxxxxx';

【讨论】:

    【解决方案2】:

    这种方式对我有用:(这只适用于 1.3.0 及更高版本)

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

    【讨论】:

      【解决方案3】:

      您可能想要使用的是 --filters 选项:

      aws ec2 describe-instances --output text --filters "Name=tag-key, Values=SecurityGroups, Name=tag-value, Values=Foo" --region us-east-1
      

      您可以将过滤器更改为“查询”您要查找的确切字段。

      查看亚特兰大 AWS 聚会小组关于新 AWS CLI 的演讲中的 slideshare 以获取更多示例

      【讨论】:

        【解决方案4】:

        从 1.3.0 开始,您现在可以像这样查询该信息:

         --query 'Reservations[*].Instances[*].Tags[?Key==`<keyname>`].Value[]'
        

        所以你有这个:

              "Tags" : [
                {
                  "Value" : "webserver01",
                  "Key" : "InstanceName"
                },
        

        你想这样做:

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

        【讨论】:

        • 嗯.. 不成功,我得到了一些空白结果而不是值 [[]、[]、[] ...]。我在版本 aws-cli/1.7.3 Python/2.7.9 Windows/7
        • 弄清楚了,如果我使用双引号,它与 powershell 如何对其进行编码有关:aws ec2 describe-instances --query "Reservations[].Instances[].Tags[?Key==InstanceName].Value[]"。注意用重音符转义。
        • 如果查询在双引号内,可以在里面用单引号代替反引号:aws ec2 describe-subnets --query "Subnets[*].[AvailabilityZone,SubnetId,CidrBlock,Tags[?Key=='Name'].Value[]]"
        猜你喜欢
        • 2018-08-16
        • 1970-01-01
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-19
        • 1970-01-01
        相关资源
        最近更新 更多