【问题标题】:How can I select all elastic IPs that are not assigned to an EC2 instance?如何选择未分配给 EC2 实例的所有弹性 IP?
【发布时间】:2016-02-23 06:45:54
【问题描述】:

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

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

从这里,很容易过滤掉任何没有"AssociationId" 的结果。但是,我不确定如何使用 --query 来做到这一点。

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

谢谢。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-cli elastic-ip


    【解决方案1】:

    您可以检查 Addresses 集合中的空值,但不是AssociationId,一个更好的通用解决方案可能会更好地使用InstanceId

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

    进一步阅读:

    【讨论】:

    • 请注意,在某些情况下,未关联的 EIP 会产生 InstanceId==null,有时还会产生 InstanceId==""。相信区别在于 VPC EIP(显示 null)与 EC2-Classic EIP(显示“”)。
    • 感谢您的评论。我还看到 EC2-Classic EIP 在结果集中显式显示 null ("InstanceId": null),如果未设置,VPC EIPS 根本不包括InstanceId。至少在这种情况下,只有检查 null 从我的控制台返回两种情况。
    • 欣赏它 - 这似乎是一个不错的选择。不知道我可以在不存在的参数上检查 null。谢谢!
    • Windows下需要使用双引号:"Addresses[?InstanceId==null]"
    • 虽然这适用于所描述的aws CLI,但我无法使用 API 进行类似的请求。我正在发送一个正文 Action=DescribeAddresses&Filter.1.Name=instance-id&Version=2016-11-15,但我没有得到匹配的结果。知道如何格式化吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-09-03
      • 2019-07-11
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 2020-11-17
      • 2019-10-13
      相关资源
      最近更新 更多