在 AWS Lightsail 管理中,随着实例数量的增多,我们常常会遇到这样一个问题:

“我知道某个公网 IP 地址,但不知道它关联的是哪台实例。”

或者:

“我有一批老旧的实例只知道 IP,需要一键定位并选择删除。”

如果你逐台在 AWS 控制台中点开每台实例、查看其 IP,效率低下且极易出错。本文将介绍如何通过 Python 脚本,批量查找绑定特定 IP 的实例,并可交互式地选择是否删除。该脚本支持自动遍历多个区域、并发执行、异常处理,并可适应日常运维和资源审计场景。

 一、应用场景

  • 批量清理使用特定 IP 的老旧实例

  • 结合日志系统,从攻击源 IP 快速定位实例

  • 故障排查场景下,通过 IP 快速反查服务实例

  • IP 池资源回收后,核查哪些实例仍绑定老 IP


 二、技术准备

1. 安装 boto3(AWS Python SDK)

pip install boto3

2. 配置 AWS 凭证

你需要准备一对具有 Lightsail:DeleteInstanceLightsail:GetInstance 权限的 Access Key:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

建议使用 IAM 用户访问密钥,权限不要过大,避免误删其他资源。


📄 三、准备 IP 地址列表

创建一个 ip_list.txt 文件,每行一个目标 IP:

3.122.44.87

54.212.11.100

13.112.22.14

此列表中的 IP 是你想“反查”的 Lightsail 实例。


 四、脚本核心逻辑解析

脚本主要包含四个阶段:

1. 并发遍历所有支持的 Lightsail 区域

Lightsail 是按区域划分的服务,实例只能出现在某个区域中,因此我们需要逐个区域去遍历。脚本中使用了 ThreadPoolExecutor 提高并发效率,最多同时运行 15 个线程,快速查找。

2. 分页获取每个区域的所有实例

AWS 的 get_instances() 接口默认返回一页,我们通过 nextPageToken 实现全量分页拉取,避免遗漏任何实例。

3. 对每台实例进行 IP 匹配

匹配逻辑基于实例的 publicIpAddress 字段,若 IP 存在且命中目标列表,即可视为命中。

4. 逐个提示用户确认是否删除

脚本找到目标实例后,会在终端提示你确认是否删除该实例(y 执行删除,其它跳过),确保人为决策参与,避免批量误删。


 五、完整脚本源码

import boto3
from concurrent.futures import ThreadPoolExecutor, as_completed# AWS 凭证配置
AWS_ACCESS_KEY_ID = "你的AccessKey"
AWS_SECRET_ACCESS_KEY = "你的SecretKey"# 支持的 Lightsail 区域
lightsail_regions = ["us-east-1", "us-east-2", "us-west-2", "ca-central-1","eu-west-1", "eu-west-2", "eu-central-1","ap-south-1", "ap-northeast-1", "ap-northeast-2","ap-southeast-1", "ap-southeast-2"
]# 读取 IP 列表
with open("ip_list.txt", "r", encoding="utf-8") as f:target_ips = set(line.strip() for line in f if line.strip())found_instances = {}  # ip -> (name, region, state)# 分页获取实例
def get_all_instances_in_region(region):instances = []try:client = boto3.client("lightsail",region_name=region,aws_access_key_id=AWS_ACCESS_KEY_ID,aws_secret_access_key=AWS_SECRET_ACCESS_KEY)response = client.get_instances()instances.extend(response.get("instances", []))next_token = response.get("nextPageToken")while next_token:response = client.get_instances(pageToken=next_token)instances.extend(response.get("instances", []))next_token = response.get("nextPageToken")except Exception as e:print(f"[{region}] ❌ 获取实例失败:{e}")return instances# 匹配实例(并发线程任务)
def find_ip_in_region(region):results = []instances = get_all_instances_in_region(region)for ins in instances:ip = ins.get("publicIpAddress")if ip and ip in target_ips:results.append((ip, ins["name"], region, ins["state"]["name"]))return results# 多线程并发查找 IP 对应实例
with ThreadPoolExecutor(max_workers=15) as executor:futures = [executor.submit(find_ip_in_region, region) for region in lightsail_regions]for future in as_completed(futures):matches = future.result()for ip, name, region, state in matches:print(f"\n🔍 找到实例:")print(f"   ➤ 实例名:{name}")print(f"   ➤ 区域:{region}")print(f"   ➤ 状态:{state}")print(f"   ➤ IP地址:{ip}")found_instances[ip] = (name, region, state)# 遍历匹配结果,逐个确认是否删除
for ip, (name, region, state) in found_instances.items():choice = input(f"\n⚠️ 是否要删除实例【{name}】(IP: {ip}, 区域: {region})?[y/N]: ").strip().lower()if choice == 'y':try:client = boto3.client("lightsail",region_name=region,aws_access_key_id=AWS_ACCESS_KEY_ID,aws_secret_access_key=AWS_SECRET_ACCESS_KEY)client.delete_instance(instanceName=name)print(f"✅ 实例 {name} 删除成功")except Exception as e:print(f"❌ 删除实例 {name} 失败:{e}")else:print(f"⏭️ 跳过实例 {name}")# 输出未找到的 IP
for ip in target_ips:if ip not in found_instances:print(f"❌ 未找到 IP {ip} 对应的实例")

六、安全注意事项

  • 删除操作不可恢复,使用前务必确认 IP 与实例绑定关系准确

  • 推荐先执行“只查找”版本脚本,确认命中目标后再启用删除逻辑

  • 可将删除部分封装为函数,或加入 --dry-run 模式增强安全性

  • 若大批量删除建议加入备份(如自动创建快照)操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89004.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89004.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89004.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CompletableFuture 深度解析

本文将探讨 Java 8 引入的 CompletableFuture,一个在异步编程中实现非阻塞、可组合操作的强大工具。我们将从 CompletableFuture 的基本概念、与传统 Future 的区别、核心 API 用法,到复杂的链式调用、组合操作以及异常处理进行全面解析,并通…

给自己网站增加一个免费的AI助手,纯HTML

助手效果图 看完这篇文章,你将免费拥有你自己的Ai助手,全程干货,先到先得 获取免费的AI大模型接口 访问这个地址 生成key https://openrouter.ai/mistralai/mistral-small-3.2-24b-instruct:free/api 或者调用其他的免费大模型,这…

ASProxy64.dll导致jetbrains家的IDE都无法打开。

在Windows11中,无法打开jetbrains的IDE的软件,经过排查,发现与ASProxy64.dll有关。 E:\idea\IntelliJ IDEA 2024.1.7\bin>idea.bat CompileCommand: exclude com/intellij/openapi/vfs/impl/FilePartNodeRoot.trieDescend bool exclude = true # # A fatal error has bee…

springboot+Vue逍遥大药房管理系统

概述 基于springbootVue开发的逍遥大药房管理系统。该系统功能完善,既包含强大的后台管理模块,又具备用户友好的前台展示界面。 主要内容 一、后台管理系统功能 ​​核心管理模块​​: 用户管理:管理员与普通用户权限分级药品分…

探索阿里云智能媒体管理IMM:解锁媒体处理新境界

一、引言:开启智能媒体管理新时代 在数字化浪潮的席卷下,媒体行业正经历着前所未有的变革。从传统媒体到新媒体的转型,从内容生产到传播分发,每一个环节都在寻求更高效、更智能的解决方案。而云计算,作为推动这一变革…

[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的新生报道管理系统,推荐!

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了新生报道管理系统的开发全过程。通过分析高校新生入学报到信息管理的不足,创建了一个计算机管理高校新生入学报到信息的方案。文章介绍了新生报道管…

给定一个整型矩阵map,求最大的矩形区域为1的数量

题目: 给定一个整型矩阵map,其中的值只有0和1两种,求其中全是1的 所有矩形区域中,最大的矩形区域为1的数量。 例如: 1 1 1 0 其中,最大的矩形区域有3个1,所以返回3。 再如: 1 0 1 1 1 1 1 1 1 1 1 0 其中,最大的矩形区域有6个1,所以返回6。 解题思…

第8章-财务数据

get_fund # 查看股票代码000001.XSHE在2022年9月1日的总市值 q query( valuation ).filter( valuation.code 000001.XSHE ) df get_fundamentals(q, 2022-09-01) print(df[market_cap][0]) # 获取第一行的market_cap值 这段代码看起来是用于查询股票在特定日期的总…

SQL关键字三分钟入门:ROW_NUMBER() —— 窗口函数为每一行编号

在进行数据分析时,我们常常需要为查询结果集中的每条记录生成一个唯一的序号或行号。例如: 为每位员工按照入职时间排序并编号;按照订单金额对订单进行排序,并给每个订单分配一个顺序编号;在分组数据内为每条记录编号…

微信小程序如何实现通过邮箱验证修改密码功能

基于腾讯云开发(Tencent Cloud Base)实现小程序邮箱验证找回密码功能的完整逻辑说明及关键代码实现。结合安全性和开发效率,方案采用 ​​云函数 小程序前端​​ 的架构,使用 ​​Nodemailer​​ 发送邮件。Nodemailer 是一个专为…

C# VB.NET中Tuple轻量级数据结构和固定长度数组

C# VB.NET取字符串中全角字符数量和半角字符数量-CSDN博客 https://blog.csdn.net/xiaoyao961/article/details/148871910 在VB.NET中,使用Tuple和固定长度数组在性能上有细微差异,以下是详细分析: 性能对比测试 通过测试 100 万次调用&am…

建筑物年代预测与空间异质性分析解决方案

建筑物年代预测与空间异质性分析解决方案 1. 问题分析与创新点设计 核心任务:预测建筑物建造年代,并分析空间异质性对预测的影响 创新点设计: 空间权重矩阵集成:构建空间邻接矩阵量化地理邻近效应多尺度特征提取:融合建筑物微观特征与街区宏观特征异质性分区建模:基于…

FOUPK3system5XOS

Foupk3systemX5OS系统19.60内测版(X9)2023年4月16日正式发布 1.0Foupk3systemX5OS系统19.60(X9)2024年10月6日发布 Foupk3systemX5OS系统19.60增强版(X9X5)2024年10月6日发布Foupk3systemX5OS系统19.60正…

随机生成的乱码域名”常由**域名生成算法(DGA)** 产生

“随机生成的乱码域名”常由**域名生成算法(DGA)** 产生,是网络攻击(尤其是僵尸网络、恶意软件控制场景 )中躲避检测的手段,以下是关键解析: ### 一、本质与产生逻辑 乱码域名是攻击者利用 **DG…

Solidity学习 - 继承

文章目录 前言继承的基本概念继承的基本用法单继承实现函数重写(overriding) 构造函数的继承处理多重继承抽象合约 前言 继承是面向对象编程中的核心概念之一,Solidity作为一种面向对象的智能合约语言,同样支持继承机制。通过继承…

依赖注入(Dependency Injection, DI)的核心概念和解决的核心问题

核心概念: 依赖注入是一种设计模式,也是实现控制反转(Inversion of Control, IoC) 原则的一种具体技术。其核心思想是: 解耦: 将一个类(客户端)所依赖的其他类或服务(依…

Reactor Schedulers

Reactor 是一个基于响应式编程的库,它提供了丰富的调度器(Schedulers)机制,用于管理异步操作的执行环境。Schedulers 是 Reactor 中的核心组件之一,它们允许开发者灵活地控制操作符和订阅操作在哪个线程上执行&#xf…

设备树引入

一、设备树的基本知识 1、什么是设备树?为什么会有设备树? 2011年,Linux之父Linus Torvalds发现这个问题后,就通过邮件向ARM-Linux开发社区发了一封邮件,不禁的发出了一句“This whole ARM thing is a f*cking pain i…

【数据标注师】3D标注

目录 一、 **3D标注知识体系框架**二、 **五阶能力培养体系**▶ **阶段1:空间认知筑基(2-3周)**▶ **阶段2:核心标注技能深化**▶ **阶段3:复杂场景解决方案**▶ **阶段4:领域深度专精▶ **阶段5&#xff1…

华为HN8145V光猫改华为蓝色公版界面,三网通用,xgpon公版光猫

咸鱼只卖20多元一个,还是xgpon的万兆猫,性价比不错哦 除了没有2.5G网口,其他还行。 改成公版光猫后,运营商是无法纳管光猫,无法后台修改光猫数据及超密。 华为 HN8145V 光猫具有以下特点: 性能方面 高速接…