Python + Flask + API Gateway + Lambda + EKS 实战指南
Flask 应用开发
创建一个简单的 Flask 应用作为后端服务。以下是一个基础示例:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello from Flask!"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
将应用容器化,创建 Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
AWS Lambda 部署
通过 Zappa 或 AWS SAM 将 Flask 应用部署为 Lambda 函数。安装 Zappa:
pip install zappa
初始化配置:
zappa init
部署到 Lambda:
zappa deploy dev
API Gateway 集成
在 AWS 控制台创建 REST API,将资源和方法映射到 Lambda 函数。配置路由和阶段,确保 CORS 设置正确:
Cors:
AllowMethods: "'*'"
AllowHeaders: "'*'"
AllowOrigin: "'*'"
EKS 集群部署
创建 EKS 集群并部署 Flask 应用:
eksctl create cluster --name flask-cluster --region us-west-2
部署应用到集群:
kubectl apply -f deployment.yaml
示例 deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: flask-app
spec:
replicas: 3
selector:
matchLabels:
app: flask
template:
metadata:
labels:
app: flask
spec:
containers:
- name: flask
image: your-ecr-repo/flask-app:latest
ports:
- containerPort: 5000
监控与日志
配置 CloudWatch 日志和 Prometheus 监控。在 Flask 应用中添加中间件:
from prometheus_flask_exporter import PrometheusMetrics
metrics = PrometheusMetrics(app)
安全最佳实践
使用 IAM 角色限制 Lambda 和 EKS 权限。为 API Gateway 启用 AWS WAF 防护。在 Kubernetes 中配置网络策略:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: flask-policy
spec:
podSelector:
matchLabels:
app: flask
ingress:
- from:
- podSelector:
matchLabels:
app: ingress
自动化 CI/CD
设置 GitHub Actions 或 AWS CodePipeline 自动化部署流程。示例 GitHub Actions 片段:
- name: Deploy to EKS
run: |
aws eks update-kubeconfig --name flask-cluster
kubectl apply -f deployment.yaml
Python全栈云原生实战教程
557

被折叠的 条评论
为什么被折叠?



