【问题标题】:How to list only the instance id and related tags如何仅列出实例 ID 和相关标签
【发布时间】:2017-08-23 21:34:35
【问题描述】:

我使用 CLI 工具,我只想列出实例的实例 ID 和相关标签。我使用的命令是 ec2-describe 实例。我尝试了某些过滤器,但没有任何效果。

有人可以帮忙吗??

错误:

./Instance_Audit.sh: line 24: $: command not found
./Instance_Audit.sh: line 25: syntax error near unexpected token `do'
./Instance_Audit.sh: line 25: ` do echo $ID ; echo $(aws ec2 describe-instances  --query "Reservations[].Instances[?InstanceId==\`$ID\`].Tags[]") done'

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-cli


    【解决方案1】:

    使用 aws cli,我可以生成几个不同的标签输出替代方案:

    aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,Tags[]]'
    Result: i-xxxxx [{u'Value': 'key1value', u'Key': 'key1name'}, {u'Value': 'key2value', u'Key': 'key2name'}]
    
    aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,Tags[].*]'
    Result: i-xxxxx [['key1value', 'key1name'], ['key2value', 'key2name']]
    
    aws ec2 describe-instances --output text --query 'Reservations[*].Instances[*].[InstanceId,Tags[].Key,Tags[].Value]'
    Result: i-xxxx ['key1name', 'key2name'] ['key1value' 'key2value']
    

    您正在寻找这些格式中的任何一种吗?

    【讨论】:

    • 命令不起作用,例如第一个返回:Bad value for --query Reservations[*].Instances[*].InstanceId,Tags[]]: Unexpected token: ,: Parse error at column 39, token "," (COMMA), for expression: "Reservations[*].Instances[*].InstanceId,Tags[]]".
    【解决方案2】:

    AWS CLI 命令

    aws ec2 describe-instances --region us-west-2 --query 'Reservations[].Instances[].[InstanceId,Tags[]]' --output text
    

    产生这些结果:

    i-789c55c3
    Name    Instance1
    aws:cloudformation:logical-id   Instance1
    aws:cloudformation:stack-id     arn:aws:cloudformation:us-west-2:012345678901:stack/test10-test10-foobarfoobar/a6e545a0-af52-11e4-a0be-50d5020578e0
    aws:cloudformation:stack-name   test10-test10-foobarfoobar
    i-77c108cc
    Name    Instance2
    aws:cloudformation:logical-id   Instance2
    aws:cloudformation:stack-id     arn:aws:cloudformation:us-west-2:012345678901:stack/test10-test10-foobarfoobar/a6e545a0-af52-11e4-a0be-50d5020578e0
    aws:cloudformation:stack-name   test10-test10-foobarfoobar
    

    如果这不是您正在寻找的格式,您能否提供一个您期望的格式示例?

    【讨论】:

      【解决方案3】:

      如果您只想显示实例 ID 和与该实例关联的标签,您可以使用类似:

      $ for ID in $(aws ec2 describe-instances --region eu-west-1 --query "Reservations[].Instances[].InstanceId" --output text); do echo $ID ; echo $(aws ec2 describe-instances --region eu-west-1 --query "Reservations[].Instances[?InstanceId==\`$ID\`].Tags[]") done

      i-60****2a [ [ { "Value": "SB", "Key": "Name" } ] ] i-1a****56 [ [ { "Value": "Course and Schedule on Apache 2.4", "Key": "Name" } ] ] i-88eff3cb [ [ { "Value": "secret.com", "Key": "Name" } ] ] i-e7****a5 [ [ { "Value": "2014.03 + Docker", "Key": "Name" } ] ]

      我无法找到仅通过一次 AWS CLI 调用来执行此操作的方法。如果有人提出更短的解决方案,我很乐意听取您的意见。

      如果您只想过滤到某些标签键/值,您可以编辑aws ec2 describe-instances 以添加--filter 选项。

      例如:

      aws ec2 describe-instances --region eu-west-1 --filter "Name=tag:Name,Values=SB"

      --Seb

      【讨论】:

      • ec2-describe-instances|awk '/(Name|Owner)/&&/TAG/{if (!($3 in c)) {c[$3];b[++i]=$3;} a[$3,$4]=$5 OFS $6} END {for(k=1; k<=i; k++) print "TAG instance", b[i], "Name", a[b[i],"Name"], "Owner", a[b[i],"Owner"]}' 这是一个命令,但它不能正常工作
      • 请使用新命令行而不是旧命令行。您可以从aws.amazon.com/cli 下载 AWS CLI 此工具默认安装在 Amazon Linux 发行版上
      • 我已经配置好了,现在如何继续
      • AWS CLI 文档解释了如何安装和配置它:docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html
      • 我已经完成了。输出为 json 格式。现在可以从 100 个实例的文件中的 json 输出中获取实例 ID 和标签,例如名称、成本中心、所有者
      【解决方案4】:

      简单回答:

      aws ec2 describe-instances \
      --query 'Reservations[*].Instances[*].[InstanceId,Tags[*]]'
      

      不是那么简单的答案.. 相同的原则可以应用于实例和 vpc 的

      # how-to get all the tags per instance-id with aws ec2 for prd env
      while read -r i ; do \
      aws ec2 describe-tags --filters "Name=resource-id,Values=$i" \
      --profile prd; done < <(aws ec2 describe-instances \
      --query 'Reservations[*].Instances[*].InstanceId' --profile prd)
      
      # how-to get all the tags per virtual-private-cloud-id 
      while read -r v; do aws ec2 describe-tags \
      --filters "Name=resource-id,Values=$v" ; \
      done < <(aws ec2 describe-vpcs \
      --query 'Vpcs[*].VpcId'|perl -ne 's/\t/\n/g;print')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-22
        • 2020-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多