【问题标题】:How to list only the EC2 instances in a given CloudFormation stack?如何仅列出给定 CloudFormation 堆栈中的 EC2 实例?
【发布时间】:2014-12-29 16:28:00
【问题描述】:

我可以在满足以下条件的以下命令中为$QUERY 使用什么:

aws ec2 describe-instances --query $QUERY
  1. 仅打印 aws:cloudformation:stack-name 标签等于 test-stack 的实例。
  2. 仅打印每个实例的 InstanceId 属性。
  3. 不使用管道、for 循环或其他外壳花哨。

【问题讨论】:

  • @jeff-terrell-ph-d 您是如何将其集成到 CloudFormation 平台中的?

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


【解决方案1】:

这里有几个参数可以使用:

查询

--query (docs) 用于仅检索 InstanceId

按堆栈名称标签过滤

--filter (docs) 用于排除未使用堆栈名称标记的实例

  • tag-key - 分配给资源的标签的键。这个过滤器是 独立于标签值过滤器。例如,如果您同时使用 过滤“tag-key=Purpose”和过滤“tag-value=X”,你会得到任何 资源同时分配了标签键 用途(无论是什么 标签的值是),标签值 X(不管标签的键是什么) 是)。如果您只想列出目的为 X 的资源,请参阅 标签 :key =value 过滤器。

  • tag-value - 分配给 资源。此过滤器独立于标签键过滤器。

格式化

--output (docs) 仅返回您查询的值(因此没有引号或 json/table 绒毛)

文本格式将 AWS CLI 的输出组织成制表符分隔的 线。它适用于传统的 Unix 文本工具,例如 grep, sed、awk 以及 Windows PowerShell。

像这样使用这些参数:

aws ec2 describe-instances \                                                     
    --query "Reservations[*].Instances[*].InstanceId[]" \                        
    --filters "Name=tag-key,Values=aws:cloudformation:stack-name" "Name=tag-value,Values=test-stack" \
    --output=text

返回:

i-sd64f52a  i-das5d64a  i-sad56d4

【讨论】:

  • 谢谢,这看起来是最好的解决方案。尝试使用 JMESpath 查询进行相关过滤被证明是困难的,但--filter 是更好的方法。
  • 太棒了,这正是我所需要的。过滤器帮助条目不是很清楚。
  • 其实这个答案是错误的,它会列出所有带有 aws:cloudformation:stack-name 标签和标签值(不一定是 aws:cloudformation:stack-name)test-stack 的实例。
  • 要使用的正确过滤器是:Name=tag:aws:cloudformation:stack-name,Values=test-stack
猜你喜欢
  • 2018-10-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2021-12-07
  • 2017-08-29
  • 2016-07-13
相关资源
最近更新 更多