25-5-28-云计算操作指南
本文最后由方少年更新于2025 年 11 月 10 日,已超过20天没有更新。如果文章内容或图片资源失效,请留言反馈,将会及时处理,谢谢!
非常好!我们现在开始构建你的 **COMP5349 Assignment 2 项目核心功能**:图像上传 + S3 + RDS 一体化系统。
------
## ✅ 第一阶段目标:部署 Web 应用基础功能
我们将从最基本的部分开始搭建:
### 🎯 功能:
- 提供一个 HTML 页面上传图片
- 图片上传至 S3
- 同时将图片的元数据(文件名、时间戳)写入 RDS 数据库
------
## ✅ 你目前已有的基础:
| 已完成 | 内容 |
| ---------------------------------- | ---- |
| ✅ EC2 实例运行中 | |
| ✅ RDS 数据库创建成功并可连接 | |
| ✅ S3 bucket 已创建(或我们会创建) | |
------
## ✅ 步骤一:创建数据库表(MySQL)
请使用你的 EC2 实例连接上 RDS 后,执行以下 SQL 来初始化数据库表:
```sql
CREATE TABLE images (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255) NOT NULL,
upload_time DATETIME DEFAULT CURRENT_TIMESTAMP,
s3_url VARCHAR(500) NOT NULL,
thumbnail_url VARCHAR(500),
annotation TEXT
);
```
------
## ✅ 步骤二:Flask 后端代码(上传图片 → 存入 S3 + RDS)
请在你的 EC2 实例中创建一个 Python 文件,例如 `app.py`,内容如下:
```python
from flask import Flask, request, render_template_string, redirect
import boto3
import pymysql
import os
from datetime import datetime
from werkzeug.utils import secure_filename
app = Flask(__name__)
# AWS setup
S3_BUCKET = 'your-s3-bucket-name'
REGION_NAME = 'us-east-1'
# RDS setup
DB_HOST = 'your-rds-endpoint'
DB_USER = 'admin'
DB_PASSWORD = 'your-password'
DB_NAME = 'your-database-name'
# S3 client
s3 = boto3.client('s3', region_name=REGION_NAME)
# HTML form
form_html = '''
Upload a new Image
'''
@app.route('/', methods=['GET', 'POST'])
def upload():
if request.method == 'POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
s3.upload_fileobj(file, S3_BUCKET, filename)
s3_url = f"https://{S3_BUCKET}.s3.amazonaws.com/{filename}"
# Save metadata to RDS
conn = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, database=DB_NAME)
with conn.cursor() as cursor:
sql = "INSERT INTO images (filename, s3_url) VALUES (%s, %s)"
cursor.execute(sql, (filename, s3_url))
conn.commit()
conn.close()
return redirect('/')
return render_template_string(form_html)
@app.route('/images')
def list_images():
conn = pymysql.connect(host=DB_HOST, user=DB_USER, password=DB_PASSWORD, database=DB_NAME)
with conn.cursor() as cursor:
cursor.execute("SELECT filename, s3_url, thumbnail_url, annotation, upload_time FROM images ORDER BY upload_time DESC")
rows = cursor.fetchall()
conn.close()
html = '
Uploaded Images
'
for row in rows:
html += f"
{row[0]}
{row[4]}
{row[3]}
"
if row[2]:
html += f"
Thumbnail:
"
return html
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
```
------
## ✅ 步骤三:安装依赖项
在你的 EC2 中执行:
```bash
sudo yum update -y
sudo yum install python3 -y
pip3 install flask boto3 pymysql werkzeug
```
------
## ✅ 步骤四:运行 Flask 应用
```bash
python3 app.py
```
然后访问你的 EC2 实例的公网 IP+端口:
```text
http://
```
如果你看到上传页面,说明成功!
------
## ✅ 安全组设置提示:
确保你的 EC2 安全组允许:
- TCP 端口 5000(用于访问 Flask)
- 出站访问 S3 和 RDS(默认应该已允许)
------
## ✅ 下一步计划(继续后续功能):
如果你输入 `继续`,我们将完成以下内容:
| 步骤 | 内容 |
| -------------------------------------------- | ---- |
| ✅ 创建 Lambda 函数 A:图像注释(Gemini API) | |
| ✅ 创建 Lambda 函数 B:生成缩略图 | |
| ✅ 配置 S3 上传触发器 | |
| ✅ CloudWatch 验证 Lambda 执行 | |
| ✅ 修改数据库写入 thumbnail_url 和 annotation | |
| ✅ HTML 页面展示缩略图 +注释 | |
------
你已经成功完成了第一部分的核心功能!👏
是否继续下一步构建 Lambda 函数与自动处理?只需回复:
> **继续 Lambda 部署**
我将帮你部署完整的 Serverless 组件。🚀
文章标题:25-5-28-云计算操作指南
文章链接:https://www.fangshaonian.cn/archives/81/
最后编辑:2025 年 11 月 10 日 18:31 By 方少年
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)