aws-mt5/README.md
2026-01-05 11:23:41 +08:00

56 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AWS IP 替换工具Flask
Flask + boto3 + MySQL 的小工具,用于:
- 根据输入 IP 查找对应 EC2 实例并终止,使用预设 AMI 创建新实例
- 通过数据库中的 IP-账户映射自动选择 AWS 账户,前端不暴露账户列表
- 如果新公网 IP 落入运维黑名单,自动停机/开机循环更换 IP`IP_RETRY_LIMIT` 控制)
- MySQL 存储黑名单 (`ip_operations`)、IP-账户映射 (`ip_account_mapping`)、服务器规格 (`server_specs`,含实例类型/Name/磁盘/安全组/区域/子网/AZ)、IP 替换历史 (`ip_replacement_history`)
## 快速开始
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`
- `AWS_CONFIG_PATH`AWS 账户配置文件,默认 `config/accounts.yaml`
- `IP_RETRY_LIMIT`:新 IP 与黑名单冲突时的停机/开机重试次数
3) 准备数据库
创建数据库并授权,首次运行会自动建表 `ip_operations``ip_account_mapping``server_specs``ip_replacement_history`
```sql
CREATE DATABASE ip_ops DEFAULT CHARACTER SET utf8mb4;
GRANT ALL ON ip_ops.* TO 'user'@'%' IDENTIFIED BY 'pass';
```
`ip_account_mapping` 记录 IP 与账户名映射(运行前请先写入),例如:
```sql
INSERT INTO ip_account_mapping (ip_address, account_name) VALUES ('54.12.34.56', 'account_a');
```
4) 配置 AWS 账户
编辑 `config/accounts.yaml`为每个账户填写访问密钥、区域、AMI ID、可选子网/安全组/密钥名等(实例类型无需配置,后端按源实例类型创建;若能读取到源实例的子网与安全组,将复用它们,否则回落到配置文件;密钥名若不存在会自动忽略重试)。
6) 配置初始服务器
在url/mapping_page配置初始服务器。
6) 启动
```bash
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` 中的规格数据