首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何列出所有未使用的弹性IP并使用boto3释放它们

如何列出所有未使用的弹性IP并使用boto3释放它们
EN

Stack Overflow用户
提问于 2016-08-03 16:51:57
回答 4查看 4.5K关注 0票数 2

我正在使用boto3,我需要列出所有的弹性I,找到那些与任何实例无关的,并释放它们。

我所做的是:

代码语言:javascript
复制
import boto3   
ec2 = boto3.resource('ec2')

然后我可以列出所有的书如下:

代码语言:javascript
复制
for volume in ec2.volumes.all():

或者像这样的所有例子:

代码语言:javascript
复制
for instance in ec2.instances.all():

但我不知道怎么列出所有有弹性的I。

boto3文档列出了ClassicAddress对象,为了释放IP,我需要这个对象。

http://boto3.readthedocs.io/en/latest/reference/services/ec2.html#classicaddress

但是,我不知道如何获得所有ClassicAddresses的集合

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-03 19:33:28

我让它处理这个代码:

代码语言:javascript
复制
def elastic_ips_cleanup():
    """ Cleanup elastic IPs that are not being used """
    client = boto3.client('ec2')
    addresses_dict = client.describe_addresses()
    for eip_dict in addresses_dict['Addresses']:
        if "InstanceId" not in eip_dict:
            print (eip_dict['PublicIp'] +
                   " doesn't have any instances associated, releasing")
            client.release_address(AllocationId=eip_dict['AllocationId'])
票数 0
EN

Stack Overflow用户

发布于 2017-09-16 06:18:04

我们只需检查EIP是否有与其相关联的eni。这样,它将克服EIP与NAT或EC2相关联的问题。

只需使用mkreder的代码并进行小的更改来检查NetworkInterfaceId,而不是InstanceId

代码语言:javascript
复制
import boto3
client = boto3.client('ec2')
addresses_dict = client.describe_addresses()
for eip_dict in addresses_dict['Addresses']:
    if "NetworkInterfaceId" not in eip_dict:
        print(eip_dict['PublicIp'])
        client.release_address(AllocationId=eip_dict['AllocationId'])

无论EIP与NAT或EC2相关联,它都会有一个网络接口,尽管当它连接到NAT时,它没有一个InstanceId。

票数 7
EN

Stack Overflow用户

发布于 2018-04-24 14:08:15

已使用:

代码语言:javascript
复制
if "InstanceId" not in eip_dict:
                if "NetworkInterfaceId" not in eip_dict:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38749484

复制
相关文章

相似问题

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