aws-mt5/README.md
2026-01-04 18:57:57 +08:00

51 lines
2.0 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 存在于运维表(黑名单),通过停止/启动循环获取新 IP
- 支持多 AWS 账户,通过配置文件切换
## 快速开始
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`
```sql
CREATE DATABASE ip_ops DEFAULT CHARACTER SET utf8mb4;
GRANT ALL ON ip_ops.* TO 'user'@'%' IDENTIFIED BY 'pass';
```
表中记录的 IP 被视为不可使用的 IP 黑名单。
4) 配置 AWS 账户
编辑 `config/accounts.yaml`为每个账户填写访问密钥、区域、AMI ID、实例类型、子网、安全组等。
5) 启动
```bash
flask --app app run --host 0.0.0.0 --port 5000
# 或 python app.py
```
## 运行流程
1) 页面输入需要替换的 IP并选择 AWS 账户
2) 后端在该账户中查找实例(先查公网 IP再查私网 IP
3) 终止旧实例
4) 使用配置的 AMI/实例规格创建新实例并等待 `running`
5) 如果新公网 IP 在 `ip_operations` 表中,自动执行停止+启动直到拿到未被列入黑名单的 IP最多 `IP_RETRY_LIMIT` 次)
## 注意事项
- 真实环境会产生终止/创建实例等成本操作,请先在测试账户验证流程
- 如果 AWS 或数据库配置加载失败,页面会显示错误提示
- 根据需要可在 `ip_operations` 表中维护不可用 IP 列表,避免重复分配