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

How can I select all elastic IPs that are not assigned to an EC2 instance?

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

使用这个很容易获得所有的弹性IP:aws ec2 describe-addresses

从这里,可以很容易地过滤掉任何没有"AssociationId" 的结果。但是,我不确定如何使用 --query.

来做到这一点

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

谢谢。

您可以检查 Addresses 集合中的空值,但使用 InstanceId:

可能比 AssociationId 更好的通用解决方案更好

InstanceId -> (string)

The ID of the instance that the address is associated with (if any).

AssociationId -> (string)

The ID representing the association of the address with an instance in a VPC.

不在 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]'

进一步阅读:

ElasticIP 也附加到 NAT 网关。在这种情况下,InstanceID 值将为空,但 AssociationID 是在任何情况下都会出现的字段。所以最好使用 associationID 来确定 EIP 是否在使用中。