我需要了解每个AWS区域中运行的AWS实例数量。因此,例如,我必须找出有多少人在我们这里运行 - 例如东1。我想出了这个衬垫,我认为这样就可以了。
aws ec2 describe-instances --profile=company-nonprod |grep ami-*|uniq |wc -l
147
我不确定对现实的准确性和反思性如何。我能否就最佳方式获得一些意见?此外,我需要知道有多少运行与非运行(即关闭或终止实例并不重要)。
答案 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 {}
命令的第一部分将返回所有可用区域,因此它会将区域传递给命令的第二部分,并且它将正确地针对所有区域运行,您不需要硬编码任何东西
它将列出每个地区的所有实例及其状态(如果是否正在运行)