确定区域中有多少AWS实例

时间:2016-10-20 21:21:49

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

我需要了解每个AWS区域中运行的AWS实例数量。因此,例如,我必须找出有多少人在我们这里运行 - 例如东1。我想出了这个衬垫,我认为这样就可以了。

 aws ec2 describe-instances --profile=company-nonprod |grep ami-*|uniq |wc -l
147

我不确定对现实的准确性和反思性如何。我能否就最佳方式获得一些意见?此外,我需要知道有多少运行与非运行(即关闭或终止实例并不重要)。

3 个答案:

答案 0 :(得分:3)

ami-可以出现在代码名称/值中。不可靠的方式。尝试按其ID计算实例,以获得准确的结果。

aws ec2 describe-instances --profile=company-nonprod --query 'Reservations[*].Instances[*].[InstanceId]' --output text | wc -l

如果安装了Python和Boto3:

#!/usr/bin/env python

import boto3.session
import sys

sess = boto3.session.Session(profile_name=sys.argv[1])
ec2 = sess.resource('ec2')
print len(list(ec2.instances.all()))

将其另存为count.py并将其设为可执行文件。然后致电:

count.py company-nonprod

答案 1 :(得分:0)

显示可用区很简单,其中包含以下区域:

aws ec2 describe-instances --query 'Reservations[*].Instances[0].[InstanceId,Placement.AvailabilityZone]' --output text

i-3da618a2  ap-southeast-2b
i-5d261640  ap-southeast-2a
i-9c57c651  ap-southeast-2a

但是,要实现这一点很重要...在对AWS进行API调用时,必须将该区域指定为调用的一部分。因此,仅返回该区域中的实例。您需要为每个区域重复此过程。

这是一个python脚本,将遍历所有区域,列出实例,标签和状态:

#!/usr/bin/env python

import boto.ec2

for region in [r for r in boto.ec2.regions() if r.name not in ['cn-north-1', 'us-gov-west-1']]:
  conn = boto.ec2.connect_to_region(region.name)
  reservations = conn.get_all_instances()
  for r in reservations:
    for i in r.instances:
      print region.name, i.id, i.tags, i.state

输出如下:

us-east-1 i-581c7164 {u'Name': u'US-East'} stopped

答案 2 :(得分:0)

@John是对的,但你仍然可以直接从bash传输这些信息,而不需要(在这个阶段)另一个sdk

aws ec2 describe-regions --output text |\
cut -f 3 | \
xargs -I {} aws ec2 describe-instances \
    --query 'Reservations[*].Instances[*].[Placement.AvailabilityZone, State.Name, InstanceId]' \
    --output text \
    --region {} 

命令的第一部分将返回所有可用区域,因此它会将区域传递给命令的第二部分,并且它将正确地针对所有区域运行,您不需要硬编码任何东西

它将列出每个地区的所有实例及其状态(如果是否正在运行)