我正在尝试使用boto3获取所有未使用的AMI的列表。
创建变量
import boto3
REGION = 'us-east-1'
OWNER_ID = 'XXXXXXXXXXXX'
ec2_client = boto3.client('ec2', REGION)
ec2_resource = boto3.resource('ec2', REGION)按实例获取AMIs ID
def get_used_amis_by_instances():
reservations = ec2_client.describe_instances(
Filters=[
{
'Name': 'owner-id',
'Values': [
OWNER_ID,
]
},
])['Reservations']
amis_used_list = []
for reservation in reservations:
ec2_instances = reservation['Instances']
for ec2 in ec2_instances:
ImageId = ec2['ImageId']
if ImageId not in amis_used_list:
amis_used_list = amis_used_list + [ImageId]
return amis_used_list获取所有非盟驻苏特派团的身份证
我只需要一份非盟驻苏特派团的身份证
def get_all_amis():
amis = ec2_resource.images.filter(Owners = [OWNER_ID])
all_amis = []
for ami in amis.all():
if ami.id not in all_amis:
all_amis = all_amis + [ami.id]
return all_amis得到未使用的非盟驻苏特派团。
使用前面的方法,我得到了all_amis和all_used_amis。
def get_unused_amis(all_amis, all_used_amis):
unused_amis_list = []
for ami_id in all_amis:
if ami_id not in all_used_amis:
if ami_id not in unused_amis_list:
unused_amis_list = unused_amis_list + [ami_id]
return unused_amis_list输出结果
def deregister_amis(event, context):
all_amis = get_all_amis()
print("All AMIs: %d" % len(all_amis) )
all_used = get_used_amis_by_instances()
print("All used AMIs: %d" % len(all_used) )
all_unused = get_unused_amis(all_amis, all_used)
print("All unused AMIs: %d" % len(all_unused) )我的问题
deregister_amis正在返回
我希望所有未使用的非盟驻苏特派团都能得到99个。我看不出我的错误在哪里。但我看不出是否有使用值为102的错误。总数是正确的201,但是用另外两个值,也许我做错了什么,或者遗漏了什么。让我知道,如果你能看到哪里是我的错误,因为我可以。
发布于 2017-03-14 12:30:31
多个实例可以使用一个AMI。使用list,可以将相同的AMI添加到列表中(其中多个实例使用相同的AMI)。如果您想要运行的实例数量,但是不想运行AMI,那么您的列表是可以的。
首先应该使用set(),而不是list。只需将所有列表转换为set()即可。此外,使用set,您可以执行减法、统一等操作,因此您确实不需要冗余的get_unused_amis()函数。
它是如此简单地使用这个集合
unused_ami = all_amis - all_used_amis快速黑客
def deregister_amis(event, context):
all_amis = set(get_all_amis())
print("All AMIs: %d" % len(all_amis) )
all_used = set(get_used_amis_by_instances())
print("All used AMIs: %d" % len(all_used) )
all_unused = all_amis - all_used
print("All unused AMIs: %d" % len(all_unused) )在另一种观点之后,我认为使用快速黑客更好。保留列表给您带来了一个额外的优势:您可以查看使用了多少次以上的AMI。
https://stackoverflow.com/questions/42784704
复制相似问题