如何在shell脚本中获取ec2-describe-instances的标记

时间:2014-03-26 02:58:17

标签: linux bash shell amazon-web-services amazon-ec2

我想从命令ec2-describe-instances的结果中提取实例ID和标签,并希望将结果存储在文本文件中。结果集给出:

但是我想要标记所有者和cost.centre 请指导我如何做到这一点

6 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,我认为你只需要在你的第二个grep中添加表达式:

ec2-describe-instances | grep -i "tag" | grep -i -e "name" -e "owner" -e "cost.centre"

答案 1 :(得分:1)

在shell脚本中执行此操作会不必要地复杂化。以下是一些建议:

  1. 您正在使用ec2cli。不要使用它。请改用AWS-CLI。因为解析ec2cli中的输出很痛苦。 AWS-CLI提供JSON中的输出,而解析更容易。此外,AWS此后才支持AWS-CLI
  2. 您需要使用哈希的完美用例的信息。您可以通过perl脚本安装和运行AWs-CLI命令,然后以散列形式捕获输出。 Perl对于处理此类数据结构非常有用。
  3. 或者,您可以使用AWS中的一个SDK(我使用Ruby SDK),然后以散列形式捕获整个信息,然后按照您希望的方式打印。
  4. 最重要的是,您需要在哈希中捕获标记,以使您的生活更轻松。当你有多个标签时,Ans变得越来越突出。

答案 2 :(得分:1)

使用awk

ec2-describe-instances |awk 'BEGIN{IGNORECASE=1}/(name|owner|cost.center)/&&/tag/'

TAG instance    i-c4    Name    Rii_Win_SAML
TAG instance    i-c42   Owner   Rii Pandey

答案 3 :(得分:1)

这将有助于找到instance-id

$ aws ec2 describe-instances --filters Name = vpc-id,Values = vpc-xxx | awk'{print $ 8}'| sort -n | grep“i-”

的i-4115d38c

的i-5d534697

的i-6e679a45

的i-7a659851

的i-8d6bae40

的i-cd6f9000

的i-d264ad1e

的i-d5888618

的i-e2332e2e

ps考虑到你已经配置/运行“aws configure”

答案 4 :(得分:1)

这是另一种不使用jq和其他解析工具的方法。

ec2 describe-instances --query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value | [0],Tags[?Key==`cost.centre`].Value | [0]]' --output text

答案 5 :(得分:0)

这应该有效:

aws ec2 describe-instances | jq '.Reservations[].Instances[] | select(contains({Tags: [{Key: "owner"},{Key: "costcenter"}]}))|"Instance ID: \(.InstanceId) Owner: \(.Tags[]|select(.Key=="owner")|.Value), Cost Center: \(.Tags[]|select(.Key=="costcenter")|.Value)"'

TL; DR:AWS标记的方式是一个活生生的噩梦,即使jq

此外,请使用AWS CLI,而不是旧的不受支持的工具。