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

Python脚本获取AWS实例信息时触发IndexError: list index out of range

解决AWS实例信息脚本的IndexError问题

错误原因

  • 部分EC2实例可能未设置任何标签,此时printout["Tags"]是空列表,直接取[0]会触发索引越界错误
  • 极少数特殊场景下(比如刚创建未挂载卷的实例),BlockDeviceMappings可能为空,取[0]同样会报错
  • 直接取Tags[0]逻辑不严谨:实例的Name标签不一定是标签列表的第一个元素

修复后的脚本

import boto3
import csv

def warn(*args, **kwargs):
    pass
import warnings
warnings.warn = warn

AWS_REGION = "us-east-1"

ec2_client = boto3.client("ec2", region_name=AWS_REGION)
response = ec2_client.describe_instances()

for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        instance_id = instance['InstanceId']
        
        # 安全获取实例名称,兼容无标签/无Name标签的情况
        instance_name = "无名称"
        if 'Tags' in instance and instance['Tags']:
            for tag in instance['Tags']:
                if tag['Key'] == 'Name':
                    instance_name = tag['Value']
                    break
        
        # 安全获取卷ID,兼容无块设备映射的情况
        volume_id = "无关联卷"
        if 'BlockDeviceMappings' in instance and instance['BlockDeviceMappings']:
            # 若实例挂载多个卷,此处取第一个;需全部卷信息可改为遍历输出
            volume_id = instance['BlockDeviceMappings'][0]["Ebs"]["VolumeId"]
        
        print(instance_id, instance_name, volume_id)

关键优化点

  • 增加了对Tags和BlockDeviceMappings的存在性及非空检查,从根源避免索引越界
  • 通过遍历标签精准定位Name键,不再依赖标签顺序
  • 对缺失信息的场景设置默认值,保证脚本能完整遍历所有实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:54:29