首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用boto3 witn Lambda获取未使用的非军事人员

使用boto3 witn Lambda获取未使用的非军事人员
EN

Stack Overflow用户
提问于 2017-03-14 11:26:00
回答 1查看 1.7K关注 0票数 0

我正在尝试使用boto3获取所有未使用的AMI的列表。

创建变量

代码语言:javascript
复制
import boto3

REGION = 'us-east-1'
OWNER_ID = 'XXXXXXXXXXXX'

ec2_client = boto3.client('ec2', REGION)
ec2_resource = boto3.resource('ec2', REGION)

按实例获取AMIs ID

代码语言:javascript
复制
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

获取所有非盟驻苏特派团的身份证

我只需要一份非盟驻苏特派团的身份证

代码语言:javascript
复制
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。

代码语言:javascript
复制
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

输出结果

代码语言:javascript
复制
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正在返回

  • All AMIs:201
  • 全部使用非盟驻苏特派团:102
  • 所有未使用的非盟驻苏特派团:140

我希望所有未使用的非盟驻苏特派团都能得到99个。我看不出我的错误在哪里。但我看不出是否有使用值为102的错误。总数是正确的201,但是用另外两个值,也许我做错了什么,或者遗漏了什么。让我知道,如果你能看到哪里是我的错误,因为我可以。

EN

回答 1

Stack Overflow用户

发布于 2017-03-14 12:30:31

多个实例可以使用一个AMI。使用list,可以将相同的AMI添加到列表中(其中多个实例使用相同的AMI)。如果您想要运行的实例数量,但是不想运行AMI,那么您的列表是可以的。

首先应该使用set(),而不是list。只需将所有列表转换为set()即可。此外,使用set,您可以执行减法、统一等操作,因此您确实不需要冗余的get_unused_amis()函数。

它是如此简单地使用这个集合

代码语言:javascript
复制
unused_ami = all_amis - all_used_amis

快速黑客

代码语言:javascript
复制
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。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42784704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档