当前位置: 首页 > news >正文

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 pymysqlapp = 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.jsonorder = 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.jsonwith 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.jsondynamo_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-slimWORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txtCOPY . .
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: 2selector:matchLabels:app: flask-demotemplate:metadata:labels:app: flask-demospec:containers:- name: flask-demoimage: <account_id>.dkr.ecr.us-east-1.amazonaws.com/flask-demo:latestports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: flask-service
spec:type: LoadBalancerselector:app: flask-demoports:- port: 80targetPort: 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 操作更快)

五、速查表

模块服务快速命令
EC2aws ec2 run-instances快速启动
S3aws s3 mb / cp / ls上传下载
DynamoDBaws dynamodb put-item / get-itemNoSQL 操作
RDSmysql -h host -u user -p连接 SQL
Docker/ECRdocker build / push镜像推送
EKSeksctl create cluster + kubectl部署微服务
Lambdaaws lambda create-function无服务器
API GWConsole 快速绑定 Lambda提供 HTTP API

总结:

  • Python + Flask 负责 CRUD 逻辑

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

  • Lambda + API Gateway 提供 Serverless API

  • DynamoDB + RDS 覆盖数据库题目

http://www.dtcms.com/a/392109.html

相关文章:

  • 【OpenGL】openGL常见矩阵
  • DeepSeek大模型混合专家模型,DeepSeekMoE 重构 MoE 训练逻辑
  • 450. 删除二叉搜索树中的节点
  • 实用工具:基于Python的图片定位导出小程序
  • 滚珠螺杆在工业机器人关节与线性模组的智能控制
  • 【AI】coze的简单入门构建智能体
  • Python数据分析:函数定义时的装饰器,好甜的语法糖。
  • Java数据结构——包装类和泛型
  • 【C++进阶】C++11的新特性 | 列表初始化 | 可变模板参数 | 新的类功能
  • 广东省省考备考(第一百零三天9.20)——言语(强化训练)
  • 面试编程题(四)
  • OpenHarmony之充电振动定制
  • 前端单元测试入门:使用 Vitest + Vue 测试组件逻辑与交互
  • 泛英国生物样本库全基因组关联分析
  • 【LeetCode 每日一题】2785. 将字符串中的元音字母排序
  • 游戏开发中的友好提示,错误信息,异常描述等数据管理的必要性
  • 总线协议(Bus Protocol)如何支持总线错误条件?
  • simuilink 中的引用模型(reference model)的作用? 它和子系统的区别? 如何生成引用模型?
  • HTML+JS实现table表格和鼠标移入移出效果
  • windows11用Qt6自带的mingw编译OSGEarth(自用记录)
  • 仓颉编程语言青少年基础教程:泛型(Generic)和区间(Range)类型
  • 原码反码补码------相关理解
  • 【Python】字典
  • 玩转deepseek之海报生成器
  • C++强制类型转换和I/O流深度解析
  • Transformer 和 MoE
  • Python基础 7》数据类型_元组(Tuple)
  • AI大模型入门第四篇:借助RAG实现精准用例自动生成!
  • leetcode 198 打家劫舍问题,两个dp数组->一个dp数组
  • 嵌入式ARM架构学习8——串口