我正在尝试获取当前未分配给实例的所有弹性IP。
使用aws ec2 describe-addresses
很容易获得所有弹性IP
从这里,可以很容易地过滤掉任何没有"AssociationId"
的结果。但是,我不知道如何使用--query
来实现这一点。
我知道--query
选项使用JMESPath来过滤结果,但我不知道如何告诉它返回所有没有AssociationId
的结果。有什么帮助吗?
谢谢。
您可以检查Addresses集合中的空值,但使用InstanceId
:可能是更好的通用解决方案,而不是AssociationId
InstanceId->(字符串)
与地址关联的实例的ID(如果有)。
AssociationId->(字符串)
表示该地址与VPC中某个实例的关联的ID。
不在VPC中的弹性IP没有AssociationId
属性,但在VPC和EC2-Classic中的弹性ip都会输出InstanceId
。
如果你只关心VPC中的IP,你也可以用同样的方式使用AssociationId
。
示例:
aws ec2 describe-addresses --query 'Addresses[?InstanceId==null]'
aws ec2 describe-addresses --query 'Addresses[?AssociationId==null]'
进一步阅读:
- AWS文档:AWS ec2描述地址
- AWS文档:专有网络中的弹性IP地址
弹性IP也连接到NAT网关。在这种情况下,InstanceID值将为null,但AssociationID是在任何情况下都会出现的字段。因此,最好使用associationID来确保EIP是否在使用中。