【问题标题】:How to list all unused elastic IPs and release them using boto3如何列出所有未使用的弹性 IP 并使用 boto3 释放它们
【发布时间】:2016-12-09 12:32:56
【问题描述】:

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

我正在做的是:

import boto3   
ec2 = boto3.resource('ec2')

然后我可以这样列出所有卷:

for volume in ec2.volumes.all():

或所有这样的实例:

for instance in ec2.instances.all():

但我不知道如何列出所有弹性 IP。

boto3 文档列出了我需要拥有的对象 ClassicAddress 才能释放 IP。

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

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

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 boto boto3


    【解决方案1】:

    我得到了它与这个代码一起工作:

    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'])
    

    【讨论】:

      【解决方案2】:

      我不会使用 mkreder 的代码,因为它可以释放实际上未附加到实例的 EIP,但那些附加到 VPC 中的 NAT 网关的 EIP。 希望我使用

      运行此代码
      DryRun = True
      

      【讨论】:

      • 能否请您改进您的帖子并描述您的想法?
      • 抱歉,我的场景没有 NAT 网关。如果您可以提供带有此修复程序的更新版本,那就太好了,以便我可以将您的问题标记为正确,以防其他人访问此页面
      【解决方案3】:

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

      只需使用 mkreder 的代码并稍作更改即可检查 NetworkInterfaceId 而不是 InstanceId

      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。

      【讨论】:

        【解决方案4】:

        使用过:

        if "InstanceId" not in eip_dict:
                        if "NetworkInterfaceId" not in eip_dict:
        

        【讨论】:

          猜你喜欢
          • 2019-12-27
          • 2017-11-21
          • 1970-01-01
          • 2016-10-16
          • 2018-08-28
          • 1970-01-01
          • 1970-01-01
          • 2016-06-09
          • 1970-01-01
          相关资源
          最近更新 更多