云原生Python全栈开发实战
·
Python + Flask + API Gateway + Lambda + EKS 实战指南
Flask 应用开发
创建一个简单的 Flask 应用作为后端服务。以下是一个示例代码:
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/hello', methods=['GET'])
def hello():
return jsonify({"message": "Hello from Flask!"})
@app.route('/echo', methods=['POST'])
def echo():
data = request.get_json()
return jsonify({"received": data})
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:
zappa init
编辑生成的 zappa_settings.json:
{
"dev": {
"app_function": "app.app",
"aws_region": "us-east-1",
"profile_name": "default",
"project_name": "flask-lambda",
"runtime": "python3.9",
"s3_bucket": "your-bucket-name"
}
}
部署到 Lambda:
zappa deploy dev
API Gateway 集成
在 AWS 控制台创建 API Gateway:
- 选择 REST API
- 创建资源和方法(如 GET /hello)
- 集成类型选择 Lambda 函数
- 选择之前部署的 Lambda 函数
- 部署 API 到某个阶段(如 prod)
EKS 部署
创建 EKS 集群:
eksctl create cluster --name flask-cluster --region us-east-1 --node-type t3.medium --nodes 3
部署 Flask 应用到 EKS:
kubectl create deployment flask-app --image=your-docker-image
kubectl expose deployment flask-app --type=LoadBalancer --port=5000
创建 Ingress 资源:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: flask-ingress
spec:
rules:
- host: your-domain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: flask-app
port:
number: 5000
安全与监控
配置 IAM 角色和权限:
- 为 Lambda 函数创建适当执行角色
- 为 EKS 节点配置必要策略
设置 CloudWatch 日志:
- 确保 Lambda 函数和 EKS 集群日志发送到 CloudWatch
- 创建适当的日志组和流
性能优化
Lambda 配置:
- 设置适当的内存大小和超时
- 启用 Provisioned Concurrency 应对流量高峰
EKS 优化:
- 配置 Horizontal Pod Autoscaler
- 设置适当的资源请求和限制
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1000m"
memory: "1024Mi"
CI/CD 集成
使用 GitHub Actions 或 AWS CodePipeline 设置自动化部署流程。示例 GitHub Actions 工作流:
name: Deploy to EKS
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: azure/setup-kubectl@v1
- run: kubectl set image deployment/flask-app flask-app=your-image:${GITHUB_SHA}
- run: kubectl rollout status deployment/flask-app
更多推荐


所有评论(0)