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

2.0 KiB
Raw Blame History

AWS IP 替换网站Flask

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

  • 根据输入的 IP 查找对应的 EC2 实例并终止
  • 使用配置好的 AMI 创建新实例
  • 如果新实例的公网 IP 存在于运维表(黑名单),通过停止/启动循环获取新 IP
  • 支持多 AWS 账户,通过配置文件切换

快速开始

  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
  • AWS_CONFIG_PATHAWS 账户配置文件(默认 config/accounts.yaml
  • IP_RETRY_LIMIT:新 IP 与运维表冲突时的关机/开机重试次数
  1. 准备数据库
    创建数据库并授权,然后首次运行时会自动创建表 ip_operations
CREATE DATABASE ip_ops DEFAULT CHARACTER SET utf8mb4;
GRANT ALL ON ip_ops.* TO 'user'@'%' IDENTIFIED BY 'pass';

表中记录的 IP 被视为不可使用的 IP 黑名单。

  1. 配置 AWS 账户
    编辑 config/accounts.yaml为每个账户填写访问密钥、区域、AMI ID、实例类型、子网、安全组等。

  2. 启动

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 列表,避免重复分配