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

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐