如何通过boto3的SSM Client按ComputerName筛选托管节点?
解决AWS SSM Fleet Manager按ComputerName筛选托管节点的API调用问题
问题原因
AWS控制台Fleet Manager支持按ComputerName筛选,是因为控制台会先拉取全部实例信息,再在前端做本地筛选;而describe_instance_information API的Filters参数确实不支持ComputerName这个键,这就是你调用时报错的直接原因。
解决方案
直接调用API获取所有实例信息,再通过Python代码在本地筛选符合条件的节点,同时处理分页避免实例过多时返回不完整:
示例代码
import boto3 ssm_client = boto3.client('ssm', region_name="us-west-2") def get_nodes_by_computer_name(target_name): filtered_nodes = [] # 用分页器处理大量实例的情况 paginator = ssm_client.get_paginator('describe_instance_information') for page in paginator.paginate(): for instance in page['InstanceInformationList']: if instance.get('ComputerName') == target_name: filtered_nodes.append(instance) return filtered_nodes # 调用示例 target_name = 'xxxxx-yyyyyy' result = get_nodes_by_computer_name(target_name) print(result)
补充方案
如果你的托管节点数量较多,本地筛选有延迟,可以提前给实例添加包含ComputerName内容的自定义标签,之后通过describe_instance_information的tag-key和tag-value过滤器直接筛选,示例如下:
managed_nodes = ssm_client.describe_instance_information( Filters=[ { 'Key': 'tag:ComputerName', 'Values': ['xxxxx-yyyyyy'] } ] )
该方案需要提前完成实例标签的配置工作。
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

