2026-01-05 15:33:08 +08:00
2026-01-05 11:07:55 +08:00
2026-01-05 11:07:55 +08:00
2026-01-05 15:33:08 +08:00
2026-01-05 11:23:41 +08:00
2026-01-05 11:07:55 +08:00
2026-01-05 15:33:08 +08:00
2026-01-05 15:33:08 +08:00
2026-01-05 15:33:08 +08:00
2026-01-05 15:33:08 +08:00
2026-01-05 11:07:55 +08:00

AWS IP 替换工具Flask

Flask + boto3 + MySQL 的小工具,用于:

  • 根据输入 IP 查找对应 EC2 实例并终止,使用预设 AMI 创建新实例
  • 通过数据库中的 IP-账户映射自动选择 AWS 账户,前端不暴露账户列表
  • 如果新公网 IP 落入运维黑名单,自动停机/开机循环更换 IPIP_RETRY_LIMIT 控制)
  • MySQL 存储黑名单 (ip_operations)、IP-账户映射 (ip_account_mapping)、服务器规格 (server_specs,含实例类型/Name/磁盘/安全组/区域/子网/AZ)、IP 替换历史 (ip_replacement_history)

快速开始

  1. 安装依赖
python -m venv .venv
.\\.venv\\Scripts\\activate
pip install -r requirements.txt
  1. 配置环境变量
    复制 .env.example.env,按需修改:
  • DATABASE_URLMySQL 连接串,例如 mysql+pymysql://user:pass@localhost:3306/ip_ops
  • IP_RETRY_LIMIT:新 IP 与黑名单冲突时的停机/开机重试次数
  1. 准备数据库
    创建数据库并授权,首次运行会自动建表 aws_accountsip_operationsip_account_mappingserver_specsip_replacement_history
CREATE DATABASE ip_ops DEFAULT CHARACTER SET utf8mb4;
GRANT ALL ON ip_ops.* TO 'user'@'%' IDENTIFIED BY 'pass';

aws_accounts 存储 AWS 账户凭据及默认 AMI/网络配置,可随时新增/更新记录后立即生效(无需重启)。 ip_account_mapping 记录 IP 与账户名映射(运行前请先写入),例如:

INSERT INTO ip_account_mapping (ip_address, account_name) VALUES ('54.12.34.56', 'account_a');
  1. 配置 AWS 账户
    通过 SQL 或数据库管理工具向 aws_accounts 写入账户信息:
INSERT INTO aws_accounts (
  name, region, access_key_id, secret_access_key, ami_id, subnet_id, security_group_ids, key_name
) VALUES (
  'account_a', 'us-east-1', 'AKIA...', 'SECRET...', 'ami-xxxx', 'subnet-xxxx', 'sg-1,sg-2', 'my-key'
);

security_group_ids 用逗号分隔,可留空;subnet_id/key_name 可选。新增或更新记录后,接口会实时使用最新配置。

  1. 配置初始服务器映射
    /mapping_page 录入 IP -> 账户名映射,或直接写入 ip_account_mapping

  2. 启动

flask --app app run --host 0.0.0.0 --port 5000
# 或 python app.py

运行流程

  1. 页面输入需要替换的 IP后端用 ip_account_mapping 定位账户并读取对应 AWS 配置
  2. 在该账户中查找公/私网 IP 匹配的实例读取实例类型、Name、根盘大小/类型、安全组ID/名称)、区域/子网/AZ并记录到 server_specs;若实例未找到则回退使用数据库中已存的规格
  3. 按记录的规格创建新实例(实例类型、磁盘类型/大小、安全组、子网/AZ如新公网 IP 在 ip_operations 黑名单中,则停机/开机循环直至获得可用 IP或达到重试上限旧实例的终止异步触发不会阻塞新实例创建
  4. 记录 IP 替换历史到 ip_replacement_history,前端可查看最近 100 条替换记录;同时更新 server_specs 中的 IP 规格为最新 IP

注意事项

  • 真实环境会产生终止/创建实例等成本操作,先在测试账户验证流程
  • 若 AWS 或数据库配置加载失败,页面会直接显示错误提示
  • 需定期维护 ip_operations 黑名单、ip_account_mapping 映射,以及 server_specs 中的规格数据
Description
No description provided
Readme 79 KiB
Languages
Python 51.4%
HTML 48.6%