2025-10-22 11:38:04 +08:00

4.5 KiB
Raw Permalink Blame History

Lightsail 静态IP 更换工具

一个用于自动更换 AWS Lightsail 实例静态IP的Web工具支持自动区域检测和实例定位。

功能特性

  • 🔍 自动区域检测 - 输入静态IP地址后自动定位所属AWS区域
  • 🎯 自动实例定位 - 自动找到绑定的Lightsail实例
  • 🆕 新IP分配 - 自动分配新的静态IP地址
  • 🔗 自动绑定 - 将新静态IP绑定到实例
  • 🗑️ 可选释放 - 可选择是否释放旧静态IP
  • 📊 操作日志 - 记录所有操作历史和状态
  • 🔄 重试机制 - 处理临时错误和API限流
  • 🌐 Web界面 - 简洁易用的Web操作界面

系统要求

  • Python 3.7+
  • AWS账户和相应的API权限
  • 网络访问AWS Lightsail服务

安装步骤

1. 克隆项目

git clone <your-repo-url>
cd Ec2ElasticIpSwapper

2. 安装依赖

pip install -r requirements.txt

3. 配置AWS凭证

方法一:环境变量(推荐)

创建 .env 文件:

# .env
AWS_REGION=ap-northeast-1
AWS_ACCESS_KEY_ID=AKIA...
AWS_SECRET_ACCESS_KEY=xxxx...

方法二AWS CLI配置

aws configure

方法三IAM角色EC2实例

如果运行在EC2实例上可以配置IAM角色。

4. 启动服务

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

5. 访问Web界面

打开浏览器访问:http://localhost:9099

使用方法

  1. 输入当前静态IP - 在输入框中输入当前绑定在Lightsail实例上的静态IP地址
  2. 点击更换按钮 - 系统会自动:
    • 检测IP所属区域
    • 找到绑定的实例
    • 分配新的静态IP
    • 绑定到实例
    • 释放旧静态IP可选
  3. 查看操作日志 - 在下方表格中查看所有操作记录

所需AWS权限

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

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lightsail:GetStaticIps",
                "lightsail:AllocateStaticIp",
                "lightsail:AttachStaticIp",
                "lightsail:DetachStaticIp",
                "lightsail:ReleaseStaticIp",
                "lightsail:GetInstance",
                "lightsail:GetRegions",
                "sts:GetCallerIdentity"
            ],
            "Resource": "*"
        }
    ]
}

API接口

更换静态IP

POST /api/rotate_by_ip
Content-Type: application/json

{
    "current_ip": "1.2.3.4",
    "release_old": true
}

响应示例:

{
    "ok": true,
    "region": "ap-northeast-1",
    "instance_id": "my-instance",
    "old_ip": "1.2.3.4",
    "new_ip": "5.6.7.8",
    "old_released": true
}

获取操作日志

GET /api/logs

清空操作日志

POST /api/logs/clear

健康检查

GET /healthz

配置说明

环境变量

变量名 说明 默认值
AWS_REGION 起始区域(用于获取区域列表) us-east-1
AWS_ACCESS_KEY_ID AWS访问密钥ID -
AWS_SECRET_ACCESS_KEY AWS秘密访问密钥 -

重试配置

代码中内置了重试机制,用于处理临时错误:

  • 最大重试次数: 3次
  • 重试间隔: 0.8秒(指数退避)
  • 重试条件: 实例状态错误、请求限制、限流异常等

故障排除

常见错误

  1. "静态IP not found in any region"

    • 检查IP地址是否正确
    • 确认IP属于当前AWS账户
    • 验证AWS凭证权限
  2. "静态IP is not attached to any instance"

    • 确认静态IP已绑定到Lightsail实例
    • 检查实例状态是否正常
  3. 权限错误

    • 检查AWS凭证是否正确配置
    • 确认具有所需的Lightsail权限

日志查看

  • 在Web界面下方查看操作日志
  • 每个操作都会记录时间、区域、实例、IP地址、状态等信息

注意事项

  • ⚠️ 备份重要数据 - 更换IP可能影响服务连接
  • ⚠️ DNS更新 - 更换IP后需要更新相关DNS记录
  • ⚠️ 防火墙规则 - 检查安全组和防火墙规则
  • ⚠️ 费用考虑 - 未使用的静态IP会产生费用建议及时释放

技术栈

  • 后端: FastAPI + Python
  • AWS SDK: Boto3
  • 前端: 原生HTML/CSS/JavaScript
  • 服务器: Uvicorn ASGI

许可证

MIT License

贡献

欢迎提交Issue和Pull Request

更新日志

v1.0.0

  • 初始版本
  • 支持Lightsail静态IP自动更换
  • Web界面和API接口
  • 自动区域检测和实例定位