Python 如何列出所有未使用的弹性IP并使用boto3释放它们
我正在使用boto3,我需要列出所有弹性IP,找到那些与任何实例都没有关联的IP,然后释放它们 我正在做的是:Python 如何列出所有未使用的弹性IP并使用boto3释放它们,python,amazon-web-services,amazon-ec2,boto,boto3,Python,Amazon Web Services,Amazon Ec2,Boto,Boto3,我正在使用boto3,我需要列出所有弹性IP,找到那些与任何实例都没有关联的IP,然后释放它们 我正在做的是: import boto3 ec2 = boto3.resource('ec2') 然后,我可以将所有卷按如下方式列出: for volume in ec2.volumes.all(): 或所有类似的实例: for instance in ec2.instances.all(): 但我不知道如何列出所有弹性IP boto3文档列出了发布IP所需的对象ClassicAddres
import boto3
ec2 = boto3.resource('ec2')
然后,我可以将所有卷按如下方式列出:
for volume in ec2.volumes.all():
或所有类似的实例:
for instance in ec2.instances.all():
但我不知道如何列出所有弹性IP
boto3文档列出了发布IP所需的对象ClassicAddress
但是,我不知道如何获取所有ClassicadAddress的集合我使用以下代码获得它:
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'])
我不会使用mkreder的代码,因为它可以释放那些实际上没有连接到实例的EIP,但是也可以释放那些连接到VPC中NAT网关的EIP。 希望我使用
DryRun = True
我们只需检查EIP是否有关联的eni。这样,它将克服EIP是与NAT关联还是与EC2关联的问题 只需使用mkreder的代码并进行一个小的更改,以检查网络接口ID,而不是实例ID
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。使用了:
if "InstanceId" not in eip_dict:
if "NetworkInterfaceId" not in eip_dict:
你能改进一下你的帖子并描述一下你会做什么吗?很抱歉,我的场景没有NAT网关。如果你能提供一个更新的版本,这样我就可以把你的问题标记为正确的,以防其他人看到这个页面