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

Amazon web services 如何选择未分配给EC2实例的所有弹性IP?,amazon-web-services,amazon-ec2,aws-cli,elastic-ip,Amazon Web Services,Amazon Ec2,Aws Cli,Elastic Ip,我正在尝试获取当前未分配给实例的所有弹性IP 使用以下内容很容易获得所有弹性IP:aws ec2描述地址 从这里,可以很容易地过滤掉任何没有“AssociationId”的结果。但是,我不知道如何使用--query来实现这一点 我知道--query选项使用JMESPath过滤结果,但我不知道如何告诉它返回所有没有关联ID的结果。有什么帮助吗 谢谢。您可以检查Addresses集合中的空值,但是使用InstanceId可能比使用InstanceId更好: InstanceId->(字符串) 与地址

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

使用以下内容很容易获得所有弹性IP:
aws ec2描述地址

从这里,可以很容易地过滤掉任何没有
“AssociationId”
的结果。但是,我不知道如何使用
--query
来实现这一点

我知道
--query
选项使用JMESPath过滤结果,但我不知道如何告诉它返回所有没有
关联ID的结果。有什么帮助吗


谢谢。

您可以检查Addresses集合中的空值,但是使用
InstanceId
可能比使用
InstanceId更好:

InstanceId->(字符串)

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

AssociationId->(字符串)

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

不在VPC中的弹性IP没有
AssociationId
属性,但VPC和EC2 Classic中的弹性IP都将输出
InstanceId

如果您只关心专有网络中的IP,也可以用同样的方式使用
AssociationId

示例:

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

aws ec2 describe-addresses --query 'Addresses[?AssociationId==null]'
进一步阅读:

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

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

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

请注意,在某些情况下,未关联的EIP将生成InstanceId==null,有时会生成InstanceId==“”。相信区别在于VPC EIP(show null)与EC2经典EIP(show“”)。感谢您的评论。此外,我还看到EC2经典EIP在结果集中显式显示null(
“InstanceId”:null
),如果未设置,VPC EIP根本不包括
InstanceId
。至少在这种情况下,只检查null会从我的控制台返回这两种情况。请欣赏,这似乎是一个很好的方法。我不知道我可以在不存在的参数上检查null。谢谢需要在Windows上使用双引号:
“Addresses[?InstanceId==null]”
虽然这适用于所述的
aws
CLI,但我无法使类似的请求适用于API。我正在发送一个body
Action=descripbeaddress&Filter.1.Name=instance id&Version=2016-11-15
,但我没有得到匹配的结果。你知道怎么格式化吗?