如何从EC2实例标签字典提取指定键值对并重启Nessus扫描器
筛选并重启带指定标签的AWS EC2 Nessus扫描器实例
需求说明
需要从AWS EC2实例的标签中筛选出带有Key: NessusScanner, Value: TRUE的实例,并执行重启操作。现有代码仅能打印实例标签,添加筛选和重启逻辑时持续报错,需要修正实现。
解决方案
修改后的代码会将实例标签转换为易查询的字典结构,精准匹配目标标签,然后调用AWS SDK的重启接口执行操作:
def restart_lab_server(aws_client): response = aws_client.describe_instances() for reservation in response["Reservations"]: for instance in reservation["Instances"]: # 初始化标签字典,处理无标签的情况 instance_tags = {} try: # 将标签列表转换为键值对字典,方便快速查询 instance_tags = {tag['Key']: tag['Value'] for tag in instance["Tags"]} except KeyError: # 实例无标签时跳过 continue # 检查是否符合NessusScanner标签条件 if instance_tags.get('NessusScanner') == 'TRUE': instance_id = instance['InstanceId'] print(f"重启Nessus扫描器实例: {instance_id}") # 调用AWS接口重启实例 aws_client.reboot_instances(InstanceIds=[instance_id]) return 0
关键逻辑说明
- 标签转换:把AWS返回的标签列表
[{"Key": "...", "Value": "..."}]转换成字典{"Key": "Value"},通过get()方法可以安全查询标签,避免KeyError。 - 精准筛选:直接判断
NessusScanner标签的值是否为TRUE,符合条件才执行后续操作。 - 重启操作:使用
reboot_instances接口,传入实例ID列表完成重启,这是AWS EC2官方支持的重启方式。 - 异常优化:仅捕获
KeyError(实例无标签的情况),其他错误会正常抛出,便于排查问题。
内容的提问来源于stack exchange,提问作者exabyte777
相关产品推荐
相关产品推荐

