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

使用Boto3打印SSM托管实例时出现ComputerName的KeyError错误

问题诱因
  • AWS SSM的describe_instance_information接口返回的实例属性并非所有实例完全一致:部分状态异常的托管实例(比如刚注册未完成同步、长期离线、混合部署的本地节点未正确上报元数据)不会返回ComputerName字段,AWS API不会为缺失的字段填充默认值,因此遍历到这类实例时直接取instance['ComputerName']就会触发KeyError。
  • 你之前测试查看键列表时没有发现缺失,是因为boto3的paginator.paginate()返回的是一次性迭代器:第一次遍历打印实例名称时已经把迭代器消费完了,后续遍历查看键的代码实际上没有拿到全量数据,你看到的键列表只是正常实例的属性,没有覆盖到异常实例。
解决方法

两种常用修复方案按需选择:

  1. 容错取值(推荐)
    使用字典的get()方法取值,为缺失字段设置默认占位符,不会中断程序运行,同时可以标记异常实例:
for item in response_iterator:
    for instance in item['InstanceInformationList']:
        # 必有的InstanceId字段用来定位异常实例,ComputerName缺省用占位符
        computer_name = instance.get('ComputerName', '未上报/无此字段')
        instance_id = instance['InstanceId']
        print(f"实例ID:{instance_id},计算机名:{computer_name}")
  1. 过滤缺失字段的实例
    如果不需要处理缺ComputerName的实例,直接加判断跳过即可:
for item in response_iterator:
    for instance in item['InstanceInformationList']:
        if 'ComputerName' in instance:
            print(instance['ComputerName'])
        # 可选:打印跳过的异常实例ID方便排查
        else:
            print(f"跳过无ComputerName的实例:{instance['InstanceId']}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:09:03