利用 Python 腳本批量查找并刪除指定 IP 的 AWS Lightsail 實例

在 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 光貓具有以下特點: 性能方面 高速接…