aws-mt5/README.md

56 lines
3.1 KiB
Markdown
Raw Normal View History

2026-01-05 11:07:55 +08:00
# AWS IP 替换工具Flask
2026-01-04 18:57:57 +08:00
2026-01-05 11:07:55 +08:00
Flask + boto3 + MySQL 的小工具,用于:
- 根据输入 IP 查找对应 EC2 实例并终止,使用预设 AMI 创建新实例
- 通过数据库中的 IP-账户映射自动选择 AWS 账户,前端不暴露账户列表
- 如果新公网 IP 落入运维黑名单,自动停机/开机循环更换 IP`IP_RETRY_LIMIT` 控制)
2026-01-05 11:23:41 +08:00
- MySQL 存储黑名单 (`ip_operations`)、IP-账户映射 (`ip_account_mapping`)、服务器规格 (`server_specs`,含实例类型/Name/磁盘/安全组/区域/子网/AZ)、IP 替换历史 (`ip_replacement_history`)
2026-01-04 18:57:57 +08:00
## 快速开始
1) 安装依赖
```bash
python -m venv .venv
.\\.venv\\Scripts\\activate
pip install -r requirements.txt
```
2) 配置环境变量
复制 `.env.example``.env`,按需修改:
- `DATABASE_URL`MySQL 连接串,例如 `mysql+pymysql://user:pass@localhost:3306/ip_ops`
2026-01-05 11:07:55 +08:00
- `AWS_CONFIG_PATH`AWS 账户配置文件,默认 `config/accounts.yaml`
- `IP_RETRY_LIMIT`:新 IP 与黑名单冲突时的停机/开机重试次数
2026-01-04 18:57:57 +08:00
3) 准备数据库
2026-01-05 11:07:55 +08:00
创建数据库并授权,首次运行会自动建表 `ip_operations``ip_account_mapping``server_specs``ip_replacement_history`
2026-01-04 18:57:57 +08:00
```sql
CREATE DATABASE ip_ops DEFAULT CHARACTER SET utf8mb4;
GRANT ALL ON ip_ops.* TO 'user'@'%' IDENTIFIED BY 'pass';
```
2026-01-05 11:07:55 +08:00
`ip_account_mapping` 记录 IP 与账户名映射(运行前请先写入),例如:
```sql
INSERT INTO ip_account_mapping (ip_address, account_name) VALUES ('54.12.34.56', 'account_a');
```
2026-01-04 18:57:57 +08:00
4) 配置 AWS 账户
2026-01-05 11:07:55 +08:00
编辑 `config/accounts.yaml`为每个账户填写访问密钥、区域、AMI ID、可选子网/安全组/密钥名等(实例类型无需配置,后端按源实例类型创建;若能读取到源实例的子网与安全组,将复用它们,否则回落到配置文件;密钥名若不存在会自动忽略重试)。
2026-01-04 18:57:57 +08:00
2026-01-05 11:23:41 +08:00
6) 配置初始服务器
在url/mapping_page配置初始服务器。
6) 启动
2026-01-04 18:57:57 +08:00
```bash
flask --app app run --host 0.0.0.0 --port 5000
# 或 python app.py
```
## 运行流程
2026-01-05 11:07:55 +08:00
1) 页面输入需要替换的 IP后端用 `ip_account_mapping` 定位账户并读取对应 AWS 配置
2) 在该账户中查找公/私网 IP 匹配的实例读取实例类型、Name、根盘大小/类型、安全组ID/名称)、区域/子网/AZ并记录到 `server_specs`;若实例未找到则回退使用数据库中已存的规格
3) 按记录的规格创建新实例(实例类型、磁盘类型/大小、安全组、子网/AZ如新公网 IP 在 `ip_operations` 黑名单中,则停机/开机循环直至获得可用 IP或达到重试上限旧实例的终止异步触发不会阻塞新实例创建
2026-01-05 11:23:41 +08:00
4) 记录 IP 替换历史到 `ip_replacement_history`,前端可查看最近 100 条替换记录;同时更新 `server_specs` 中的 IP 规格为最新 IP
2026-01-04 18:57:57 +08:00
## 注意事项
2026-01-05 11:07:55 +08:00
- 真实环境会产生终止/创建实例等成本操作,先在测试账户验证流程
- 若 AWS 或数据库配置加载失败,页面会直接显示错误提示
- 需定期维护 `ip_operations` 黑名单、`ip_account_mapping` 映射,以及 `server_specs` 中的规格数据