Python + Flask + API Gateway + Lambda + EKS 实战

Python 应用开发、数据库操作、Docker 容器、ECR 镜像仓库、EKS 部署、API Gateway + Lambda 架构


一、Python + Flask 实战:CRUD & 数据库操作

支持数据的存储、查询、更新、删除(CRUD)。

示例代码:Flask + DynamoDB + RDS (Aurora)

复制代码
from flask import Flask, request, jsonify
import boto3
import pymysql

app = Flask(__name__)

# DynamoDB
dynamodb = boto3.resource('dynamodb')
dynamo_table = dynamodb.Table('test')

# RDS 连接
def get_rds_connection():
    return pymysql.connect(
        host="xxx.cjqiw5vukltd.us-west-2.rds.amazonaws.com",
        user="admin",
        password="password",
        db="demo",
        cursorclass=pymysql.cursors.DictCursor
    )

@app.route("/")
def home():
    return "Hello World!"

# 1. 插入数据到 DynamoDB
@app.route("/order", methods=['POST'])
def create_order():
    data = request.json
    order = data['order']   # 分区键
    value = data['value']
    dynamo_table.put_item(Item={"order": order, "value": value})
    return jsonify({"msg": "插入 DynamoDB 成功"})

# 2. 插入数据到 RDS
@app.route("/user", methods=['POST'])
def create_user():
    data = request.json
    with get_rds_connection() as conn:
        with conn.cursor() as cursor:
            sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
            cursor.execute(sql, (data['name'], data['age']))
            conn.commit()
    return jsonify({"msg": "插入 RDS 成功"})

# 3. 查询数据
@app.route("/order/<string:order_id>", methods=['GET'])
def get_order(order_id):
    response = dynamo_table.get_item(Key={"order": order_id})
    return jsonify(response.get("Item", {}))

# 4. 更新数据
@app.route("/order/<string:order_id>", methods=['PUT'])
def update_order(order_id):
    data = request.json
    dynamo_table.update_item(
        Key={"order": order_id},
        UpdateExpression="set value=:v",
        ExpressionAttributeValues={":v": data['value']}
    )
    return jsonify({"msg": "更新成功"})

# 5. 删除数据
@app.route("/order/<string:order_id>", methods=['DELETE'])
def delete_order(order_id):
    dynamo_table.delete_item(Key={"order": order_id})
    return jsonify({"msg": "删除成功"})

if __name__ == '__main__':
    app.run(host="0.0.0.0", port=80, debug=True)

小结:

  • DynamoDB → 存储 NoSQL 数据(order 作为分区键)。

  • RDS → 存储结构化数据(users 表)。


二、Docker 构建 & 推送到 ECR

常见考点:将 Flask 应用容器化,推送到 AWS ECR

Dockerfile 示例

复制代码
FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .
CMD ["python", "app.py"]

快速命令

复制代码
# 登录 ECR
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS --password-stdin <account_id>.dkr.ecr.us-east-1.amazonaws.com

# 构建 & 推送
docker build -t flask-demo .
docker tag flask-demo:latest <account_id>.dkr.ecr.us-east-1.amazonaws.com/flask-demo:latest
docker push <account_id>.dkr.ecr.us-east-1.amazonaws.com/flask-demo:latest

三、EKS 部署微服务

将 ECR 的镜像部署到 EKS 集群。

Deployment YAML

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: flask-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: flask-demo
  template:
    metadata:
      labels:
        app: flask-demo
    spec:
      containers:
      - name: flask-demo
        image: <account_id>.dkr.ecr.us-east-1.amazonaws.com/flask-demo:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: flask-service
spec:
  type: LoadBalancer
  selector:
    app: flask-demo
  ports:
  - port: 80
    targetPort: 80

快速命令

复制代码
# 创建集群
eksctl create cluster --name demo-cluster --region us-east-1 --nodes 2

# 更新 kubeconfig
aws eks update-kubeconfig --region us-east-1 --name demo-cluster

# 部署
kubectl apply -f deployment.yml

# 查看访问地址
kubectl get svc

四、API Gateway + Lambda 实现无服务器架构

写 Lambda 函数 → 绑定 API Gateway → 提供外部访问

Lambda 示例 (lambda_function.py)

复制代码
def lambda_handler(event, context):
    name = event.get("queryStringParameters", {}).get("name", "World")
    return {
        "statusCode": 200,
        "body": f"Hello, {name} from Lambda!"
    }

快速命令

复制代码
# 打包 & 上传
zip function.zip lambda_function.py
aws lambda create-function \
  --function-name hello-lambda \
  --runtime python3.9 \
  --role arn:aws:iam::<account_id>:role/lambda-role \
  --handler lambda_function.lambda_handler \
  --zip-file fileb://function.zip

# API Gateway 创建 & 绑定 Lambda
aws apigateway create-rest-api --name HelloAPI
# ... 省略 (提供 Console 操作更快)

五、速查表

模块 服务 快速命令
EC2 aws ec2 run-instances 快速启动
S3 aws s3 mb / cp / ls 上传下载
DynamoDB aws dynamodb put-item / get-item NoSQL 操作
RDS mysql -h host -u user -p 连接 SQL
Docker/ECR docker build / push 镜像推送
EKS eksctl create cluster + kubectl 部署微服务
Lambda aws lambda create-function 无服务器
API GW Console 快速绑定 Lambda 提供 HTTP API

总结:

  • Python + Flask 负责 CRUD 逻辑

  • Docker + ECR + EKS 负责应用容器化和部署

  • Lambda + API Gateway 提供 Serverless API

  • DynamoDB + RDS 覆盖数据库题目

相关推荐
yanxing.D1 小时前
OpenCV轻松入门_面向python(第五章几何变换)
图像处理·人工智能·python·opencv
Q_Q19632884752 小时前
python+django/flask+springboot个性化旅游推荐系统(数据可视化) 景点推荐 路线匹配 用户画像建模 智能搜索筛选 图文展示系统
spring boot·python·django·flask·node.js
爱隐身的官人2 小时前
Tomcat 相关漏洞扫描器(一)
python·web安全·tomcat
sunnyday04262 小时前
Spring Boot中Bean Validation的groups属性深度解析
spring boot·后端·python
_bong2 小时前
python基本程序要素
开发语言·python
百里图书3 小时前
Python自动化办公2.0全能实战:从Excel到BI大屏,从OCR到机器学习,一站式提升办公效率100倍
python·自动化·excel·python自动化办公·python办公自动化·张同乐·python自动化办公2.0
心动啊1213 小时前
tensorflow卷积层1——卷积和池化
人工智能·python·tensorflow
Q_Q5110082853 小时前
python+django/flask+springboot实践性教学系统 实训任务发布 学生作业提交 教师评阅管理系统
spring boot·python·django·flask·node.js·php
浆果02073 小时前
.h264或.264视频文件转化成mp4视频
python·ffmpeg·h.264