【问题标题】:How to fetch the tags for ec2-describe-instances in a shell script如何在 shell 脚本中获取 ec2-describe-instances 的标签
【发布时间】:2014-05-04 05:52:59
【问题描述】:

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

但我也希望获取标签 owner 和 cost.centre 请指导我如何做到这一点

【问题讨论】:

  • 你能举一个预期输出的例子吗?到目前为止,您尝试过什么?
  • ec2-describe-instances 没有提供任何属性,我只想从结果中获取实例 ID 和名称、成本中心和所有者等标签。

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


【解决方案1】:

这将有助于找到实例 ID

$ aws ec2 describe-instances --filters Name=vpc-id,Values=vpc-xxx | awk '{ 打印 $8 }' |排序-n | grep "i-"

i-4115d38c

i-5d534697

i-6e679a45

i-7a659851

i-8d6bae40

i-cd6f9000

i-d264ad1e

i-d5888618

i-e2332e2e

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 查看更新后的问题我希望结果在单个实例中出现在一行中!!!
    • 你能帮我数字创伤吗
    • @user3086014 你可能已经猜到了,我对ec2-describe-instances 并不熟悉。我纯粹是从 bash/shell 的角度来看的。所以ec2-describe-instances 的输出对我来说几乎毫无意义。例如,您希望名称和所有者在同一行。给定实例 ID 的名称和所有者? “i-c4”是实例 ID 吗?成本中心呢?我不知道输出中的哪个字段与之对应。
    • 如果您提高问题的质量,您更有可能获得问题的高质量答案 - 特别是以一致且明确的方式包含所有相关信息。
    • @slayedbylucifer 的approach 可能是更好的一个。确保为工作选择正确的工具。
    【解决方案3】:

    这将在 shell 脚本中变得不必要地复杂。以下是一些建议:

    1. 您正在使用ec2cli。不要用那个。请改用AWS-CLI。因为解析ec2cli 中的输出很痛苦。而AWS-CLIJSON 中提供输出,它更容易解析。此外,AWS 今后将仅支持 AWS-CLI
    2. 关于使用哈希的完美用例所需的信息。您可以通过 perl 脚本安装和运行AWs-CLI 命令,然后在哈希中捕获输出。 Perl 处理这种数据结构非常强大。
    3. 或者,您可以使用来自 AWS 的开发工具包之一(我使用 Ruby SDK),然后在哈希中捕获整个信息,然后按照您想要的方式打印。

    底线是,您需要在哈希中捕获标签以使您的生活更轻松。 Ans 当你有多个标签时,这一点变得越来越突出。

    【讨论】:

    • 阅读文档:aws.amazon.com/cli。花点时间仔细阅读。你以后会感谢我的。自从我开始使用它后,我就离不开它。
    • 但这需要时间。你能帮我用这个唯一的 aws cli 工具吗?
    • 我在解析 ec2cli 输出 1000 次时已经烧伤了手指。我希望其他人可以帮助你。
    • 如果可以请帮帮我
    • 你能修改宝马的答案吗?
    【解决方案4】:

    使用 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
    

    【讨论】:

    • 我希望将与单个实例相关的标签放在一行中。
    • 你能更新你的示例文件吗,当前的让我对如何获得结果感到困惑。例如,我在源文件中没有看到Naveen,但你在输出中要求它。
    • 其实文件太长我只取了一部分
    • 嘿,你很接近我想要的。但现在我得到了我发布的问题。我想在一行中打印单个实例的标签
    • 请帮我解决我卡住了:(
    【解决方案5】:

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

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

    【讨论】:

      【解决方案6】:

      这应该可行:

      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,而不是旧的、不受支持的工具。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 2022-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多