如何选择未分配给EC2实例的所有弹性IP?

jos*_*t91 8 amazon-ec2 amazon-web-services elastic-ip aws-cli

我正在尝试获取当前未分配给实例的所有弹性IP.

使用此方法很容易获得所有弹性IP: aws ec2 describe-addresses

从这里开始,很容易过滤掉任何没有的结果"AssociationId".但是,我不知道如何使用它--query.

我知道该--query选项使用JMESPath来过滤结果,但我不知道如何告诉它返回所有没有结果的结果AssociationId.有帮助吗?

谢谢.

Ant*_*ace 15

您可以检查Addresses集合中的空值,但AssociationId可能更好地使用InstanceId以下代码而不是更好的通用解决方案:

InstanceId - >(字符串)

与地址关联的实例的ID(如果有).

AssociationId - >(字符串)

表示地址与VPC中的实例的关联的ID.

不在VPC中的弹性IP不具有该AssociationId属性,但是将输出VPC和EC2 Classic中的弹性IP InstanceId.

AssociationId如果您只关心VPC中的IP,也可以以相同的方式使用.

例子:

aws ec2 describe-addresses --query 'Addresses[?InstanceId==null]'

aws ec2 describe-addresses --query 'Addresses[?AssociationId==null]'
Run Code Online (Sandbox Code Playgroud)

进一步阅读:


小智 6

ElasticIP 还连接到 NAT 网关。在这种情况下,InstanceID 值将为空,但 AssociationID 是在任何情况下都会出现的字段。因此最好使用associationID来确定EIP是否正在使用。