# AWS EC2 价格计算器

这是一个基于Vue.js和Python FastAPI开发的AWS EC2价格计算器网站，可以帮助用户计算和比较不同EC2实例的价格。

## 功能特点

1. **价格计算器**
   - 选择实例类型、区域、操作系统和购买选项
   - 实时计算价格
   - 显示详细的价格信息

2. **实例搜索**
   - 根据CPU、内存和其他规格查找最合适的实例
   - 支持从AWS官方API和数据库两种数据源查询
   - 显示完整规格和价格信息

3. **价格比较**
   - 支持多个实例配置的并排比较
   - 生成标准化的报价单
   - 支持导出Excel格式报价单

## 技术栈

- **前端**：Vue.js 3 + Element Plus
- **后端**：Python FastAPI
- **数据源**：AWS Pricing API + MySQL数据库

## 系统要求

- Python 3.9+
- Node.js 14+
- npm 6+
- MySQL 5.7+

## 项目结构

```
.
├── backend/            # 后端项目
│   ├── app/            # 应用代码
│   │   ├── api/        # API路由
│   │   ├── core/       # 核心配置
│   │   ├── models/     # 数据模型
│   │   └── services/   # 服务层
│   ├── main.py         # 入口文件
│   └── requirements.txt # 依赖包
└── frontend/           # 前端项目
    ├── public/         # 静态资源
    ├── src/            # 源代码
    │   ├── api/        # API调用
    │   ├── assets/     # 资源文件
    │   ├── components/ # 组件
    │   └── views/      # 页面
    └── package.json    # 依赖配置
```

## 安装与部署

### 后端部署

1. **创建并激活虚拟环境**

```bash
# 创建虚拟环境
conda create -n calc python=3.10
conda activate calc
```

2. **安装依赖**

```bash
cd backend
pip install -r requirements.txt
```

3. **配置环境变量**

创建`.env`文件在backend目录下，添加以下内容：

```
# AWS凭证
AWS_ACCESS_KEY_ID=your_access_key
AWS_SECRET_ACCESS_KEY=your_secret_key
AWS_DEFAULT_REGION=us-east-1

# MySQL数据库配置
MYSQL_HOST=localhost
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=aws_price
```

4. **启动开发服务器**

```bash
# 开发环境
uvicorn main:app --reload --host 0.0.0.0 --port 8000

# 生产环境
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
```

### 前端部署

1. **安装依赖**

```bash
cd frontend
npm install
```

2. **启动开发服务器**

```bash
npm run serve
```

3. **构建生产版本**

```bash
npm run build
```

4. **前端生产环境部署**

将`frontend/dist`目录下的文件部署到Web服务器的根目录。

### Nginx配置示例

```nginx
server {
    listen 80;
    server_name your_domain.com;

    # 前端静态文件
    location / {
        root /path/to/frontend/dist;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    # 后端API代理
    location /api {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
```

## API接口说明

### 主要API端点

- `GET /api/regions` - 获取所有可用区域
- `GET /api/instance-types` - 获取所有实例类型
- `POST /api/search-instances` - 搜索符合条件的实例（AWS API方式）
- `POST /api/search-instances-v2` - 搜索符合条件的实例（数据库方式）
- `POST /api/compare-prices` - 对比多个配置的价格

### 示例请求

```json
// 搜索实例示例请求
POST /api/search-instances-v2
{
  "cpu_cores": 4,
  "memory_gb": 16,
  "disk_gb": 100,
  "region": "us-east-1",
  "operating_system": "Linux"
}
```

## 数据库说明

该应用使用MySQL数据库存储AWS实例价格数据，主要表结构如下：

**aws_price表**
- `id` - 唯一标识符
- `locations` - 区域类型
- `area_en` - 区域英文名称
- `area_cn` - 区域中文名称
- `instance_type` - 实例类型
- `price` - 小时价格
- `operating_system` - 操作系统
- `vcpu` - CPU核心数
- `memory` - 内存大小(GB)
- `updatetime` - 更新时间

## 常见问题解答

1. **价格计算不准确？**
   - 确保已配置正确的AWS凭证
   - 价格可能因区域和时间而变化

2. **无法连接数据库？**
   - 检查数据库连接配置
   - 确保MySQL服务已启动
   - 验证用户权限

3. **API返回错误？**
   - 检查日志获取详细错误信息
   - 验证请求格式是否正确

## 贡献指南

1. Fork 项目
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add some amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建Pull Request

## 许可证

MIT License 