Python全栈云原生实战指南
·
Python + Flask + API Gateway + Lambda + EKS 实战指南
使用 Flask 构建 RESTful API
Flask 是一个轻量级的 Python Web 框架,适合快速构建 RESTful API。以下是一个简单的 Flask 应用示例:
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello, World!"})
if __name__ == '__main__':
app.run(debug=True)
部署 Flask 应用到 AWS Lambda
AWS Lambda 允许运行代码无需管理服务器。可以使用 serverless-wsgi 插件将 Flask 应用部署到 Lambda。
- 安装必要的依赖:
pip install Flask serverless-wsgi
- 创建
serverless.yml配置文件:
service: flask-lambda
provider:
name: aws
runtime: python3.8
functions:
api:
handler: wsgi_handler.handler
events:
- http: ANY /
- http: ANY {proxy+}
plugins:
- serverless-wsgi
custom:
wsgi:
app: app.app
packRequirements: false
- 部署到 AWS:
serverless deploy
通过 API Gateway 暴露 Lambda 函数
API Gateway 可以作为前端服务,将 HTTP 请求路由到 Lambda 函数。在 serverless.yml 中已定义 HTTP 事件,部署时会自动创建 API Gateway。
在 EKS 上部署 Flask 应用
Amazon EKS 是托管的 Kubernetes 服务,适合运行容器化应用。
- 创建 Dockerfile:
FROM python:3.8-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
- 构建并推送镜像到 ECR:
aws ecr create-repository --repository-name flask-app
docker build -t flask-app .
docker tag flask-app:latest <account-id>.dkr.ecr.<region>.amazonaws.com/flask-app:latest
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/flask-app:latest
- 创建 Kubernetes 部署文件
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: flask-app
spec:
replicas: 3
selector:
matchLabels:
app: flask-app
template:
metadata:
labels:
app: flask-app
spec:
containers:
- name: flask-app
image: <account-id>.dkr.ecr.<region>.amazonaws.com/flask-app:latest
ports:
- containerPort: 5000
- 创建服务文件
service.yaml:
apiVersion: v1
kind: Service
metadata:
name: flask-app-service
spec:
selector:
app: flask-app
ports:
- protocol: TCP
port: 80
targetPort: 5000
type: LoadBalancer
- 应用配置到 EKS:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
集成 API Gateway 与 EKS
可以通过 API Gateway 的 HTTP 集成功能将请求转发到 EKS 服务的负载均衡器。
- 获取 EKS 服务的负载均衡器 DNS:
kubectl get svc flask-app-service
-
在 API Gateway 控制台创建新的 HTTP 集成,输入 EKS 服务的负载均衡器 DNS。
-
部署 API Gateway 并测试端点。
最佳实践
- 使用 AWS Lambda 和 API Gateway 处理无服务器场景,适合轻量级和事件驱动的应用。
- 使用 EKS 处理需要高可用性和可扩展性的复杂应用。
- 监控和日志记录:启用 CloudWatch 日志和 X-Ray 跟踪以监控性能。
- 安全性:使用 IAM 角色和策略控制访问权限,确保 API Gateway 和 EKS 的网络安全。
更多推荐


所有评论(0)