4.4 KiB
Raw Permalink Blame History

EC2 EIP Rotator - 自动区域EIP更换工具

一个基于FastAPI的AWS EC2 Elastic IP自动更换工具支持自动区域检测和Web界面操作。

功能特性

  • 🔍 自动区域检测只需输入当前EIP公网IP自动定位所属区域和实例
  • 🚀 一键更换自动分配新EIP并绑定到实例
  • 🗑️ 可选释放可选择是否释放旧的EIP
  • 📊 操作记录:完整的操作日志记录和查看
  • 🔄 软重启:支持服务器软重启功能
  • 🎨 现代UI响应式Web界面支持深色主题

系统要求

  • Python 3.8+
  • AWS账户和相应的API权限
  • 网络连接用于访问AWS服务

安装步骤

1. 克隆项目

git clone <your-repo-url>
cd Ec2ElasticIpSwapper

2. 安装依赖

pip install -r requirements.txt

3. 配置环境变量

创建 .env 文件并配置AWS凭证

# AWS配置仅用作起始区域获取区域清单
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=xxxx...

注意AWS_REGION 仅用作获取区域清单的起始区域,真正的操作区域由自动检测结果决定。

启动服务

python -m uvicorn app:app --host 0.0.0.0 --port 9099

服务启动后,访问 http://localhost:9099 即可使用Web界面。

使用方法

Web界面操作

  1. 打开浏览器访问 http://localhost:9099
  2. 输入当前EIP:在"当前 EIP 公网IP"字段输入要更换的EIP地址
  3. 点击"换新EIP":系统会自动:
    • 检测EIP所属区域和实例
    • 分配新的EIP
    • 绑定到实例
    • 可选释放旧EIP
  4. 查看记录:在"更换记录"表格中查看所有操作历史

API接口

更换EIP

curl -X POST http://localhost:9099/api/rotate_by_ip \
  -H "Content-Type: application/json" \
  -d '{"current_ip": "1.2.3.4", "release_old": true}'

查看日志

curl http://localhost:9099/api/logs

清空日志

curl -X POST http://localhost:9099/api/logs/clear

重启服务器

curl -X POST http://localhost:9099/api/restart

健康检查

curl http://localhost:9099/healthz

权限要求

确保您的AWS凭证具有以下权限

  • ec2:DescribeAddresses - 查询EIP信息
  • ec2:DescribeRegions - 获取区域列表
  • ec2:DescribeInstances - 查询实例信息
  • ec2:AllocateAddress - 分配新EIP
  • ec2:AssociateAddress - 绑定EIP到实例
  • ec2:ReleaseAddress - 释放EIP
  • ec2:CreateTags - 为新EIP添加标签

项目结构

Ec2ElasticIpSwapper/
├── app.py              # 主应用文件
├── requirements.txt    # Python依赖
├── README.md          # 项目说明
└── .env              # 环境变量配置(需要创建)

技术架构

  • 后端框架FastAPI
  • AWS SDKboto3
  • 前端原生HTML/CSS/JavaScript
  • 模板引擎Jinja2
  • 服务器Uvicorn

功能说明

自动区域检测

系统会自动遍历所有AWS区域查找指定EIP的归属区域无需手动选择区域。

重试机制

对于偶发的状态错误和限流系统会自动重试最多3次确保操作成功率。

操作日志

所有操作都会记录到内存日志中,包括:

  • 操作时间
  • 区域信息
  • 实例信息
  • 旧IP和新IP
  • 操作状态
  • 错误信息

软重启功能

支持通过Web界面或API进行服务器软重启使用SIGTERM信号优雅关闭。

故障排除

常见问题

  1. EIP未找到

    • 确认EIP属于当前AWS账户
    • 确认EIP是Elastic IP而非普通公网IP
  2. 权限不足

    • 检查AWS凭证配置
    • 确认具有必要的EC2权限
  3. 网络连接问题

    • 确认网络连接正常
    • 检查防火墙设置

日志查看

通过Web界面的"更换记录"表格或API接口 /api/logs 查看详细的操作日志。

开发说明

本地开发

# 安装开发依赖
pip install -r requirements.txt

# 启动开发服务器
python -m uvicorn app:app --host 0.0.0.0 --port 9099 --reload

生产部署

建议使用进程管理器如systemd、supervisor或Docker进行部署。

许可证

本项目采用MIT许可证。

贡献

欢迎提交Issue和Pull Request来改进这个项目。

更新日志

  • v1.0.0初始版本支持自动区域检测和EIP更换
  • v1.1.0添加软重启功能和改进的UI界面