You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询AWS Reserved Instance剩余容量及关联情况(Python)

AWS预留实例(RI)相关问题解答

一、查询预留实例剩余容量及已关联实例

1. 控制台操作方式

  • 进入EC2控制台,左侧导航栏选择预留实例,找到目标RI后,可直接查看总实例数和已使用数,剩余容量=总实例数-已使用数。
  • 若要查看具体关联的按需实例,在EC2控制台的实例列表中,点击右上角齿轮图标进入列设置,勾选「预留实例」列,就能看到每个实例对应的RI ID。

2. AWS CLI操作方式

  • 查询所有活跃RI的基础信息(含总容量):
aws ec2 describe-reserved-instances --query 'ReservedInstances[*].{RI_ID:ReservedInstancesId, 实例类型:InstanceType, 总容量:InstanceCount, 状态:State}'
  • 查询所有实例关联的RI信息,统计已使用容量:
aws ec2 describe-instances --query 'Reservations[*].Instances[*].{实例ID:InstanceId, 关联RI_ID:ReservedInstanceId}'

将上述结果按RI ID分组计数,再用对应RI的总容量减去该计数,即可得到剩余容量。

二、同属性RI的关联规则

当存在多个同实例类型、同平台、同区域的预留实例时,AWS遵循以下关联逻辑:

  • 优先匹配与按需实例属性完全一致的RI(包括实例类型、平台、区域、可用区(仅针对可用区专属RI)、租期、付款方式)。
  • 若有多个符合条件的RI,会先关联创建时间更早的RI,直到该RI容量耗尽,再使用下一个RI的容量。
  • 区域型RI可跨可用区匹配实例,可用区专属RI仅匹配同可用区的实例。

三、Python代码实现查询

使用boto3库可直接调用AWS API获取数据,以下是实用示例:

1. 查询所有RI的剩余容量

import boto3

# 初始化EC2客户端
ec2 = boto3.client('ec2')

# 获取所有活跃状态的预留实例
ri_response = ec2.describe_reserved_instances(Filters=[{'Name': 'state', 'Values': ['active']}])
reserved_instances = ri_response['ReservedInstances']

# 统计每个RI关联的实例数量
ri_usage_map = {}
instance_response = ec2.describe_instances()
for reservation in instance_response['Reservations']:
    for instance in reservation['Instances']:
        ri_id = instance.get('ReservedInstanceId')
        if ri_id:
            ri_usage_map[ri_id] = ri_usage_map.get(ri_id, 0) + 1

# 计算并输出每个RI的剩余容量
for ri in reserved_instances:
    ri_id = ri['ReservedInstancesId']
    total = ri['InstanceCount']
    used = ri_usage_map.get(ri_id, 0)
    remaining = total - used
    print(f"RI ID: {ri_id}")
    print(f"实例类型: {ri['InstanceType']}")
    print(f"总容量: {total} | 已使用: {used} | 剩余: {remaining}\n")

2. 查询实例关联的RI信息

import boto3

ec2 = boto3.client('ec2')

response = ec2.describe_instances()
for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        instance_id = instance['InstanceId']
        linked_ri = instance.get('ReservedInstanceId', '未关联任何预留实例')
        print(f"实例ID: {instance_id}")
        print(f"关联RI ID: {linked_ri}\n")

注意:运行代码前需确保已配置AWS凭证(可通过环境变量、~/.aws/credentials文件或IAM角色配置)。


内容的提问来源于stack exchange,提问作者subbareddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:25:18