使用Boto3无法打印InstanceId问题求助
解决EC2卷InstanceId KeyError问题
问题根源
AWS EC2的describe_volumes接口返回的Volumes元素中,不存在直接的InstanceId键:
- 当卷挂载到实例时,
InstanceId存储在Attachments列表的子对象中 - 当卷未挂载时,
Attachments是空列表,此时直接访问i['InstanceId']必然触发KeyError
修正代码
import boto3 ec2 = boto3.client('ec2') volumes = ec2.describe_volumes() for vol in volumes['Volumes']: # 处理挂载/未挂载两种情况 instance_id = vol['Attachments'][0]['InstanceId'] if vol['Attachments'] else '无关联实例' print(f"InstanceId: {instance_id}") print(f"VolumeId: {vol['VolumeId']}") print(f"State: {vol['State']}\n")
额外说明
如果你的卷可能同时挂载到多个实例,可以遍历Attachments列表获取所有关联的InstanceId:
for vol in volumes['Volumes']: print(f"VolumeId: {vol['VolumeId']}") print(f"State: {vol['State']}") if vol['Attachments']: print("关联实例ID:") for attachment in vol['Attachments']: print(f"- {attachment['InstanceId']}") else: print("关联实例ID: 无") print("---")
内容的提问来源于stack exchange,提问作者Avik Chowdhury
相关产品推荐
相关产品推荐

