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。

  1. 安装必要的依赖:
pip install Flask serverless-wsgi

  1. 创建 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

  1. 部署到 AWS:
serverless deploy

通过 API Gateway 暴露 Lambda 函数

API Gateway 可以作为前端服务,将 HTTP 请求路由到 Lambda 函数。在 serverless.yml 中已定义 HTTP 事件,部署时会自动创建 API Gateway。

在 EKS 上部署 Flask 应用

Amazon EKS 是托管的 Kubernetes 服务,适合运行容器化应用。

  1. 创建 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"]

  1. 构建并推送镜像到 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

  1. 创建 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

  1. 创建服务文件 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

  1. 应用配置到 EKS:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

集成 API Gateway 与 EKS

可以通过 API Gateway 的 HTTP 集成功能将请求转发到 EKS 服务的负载均衡器。

  1. 获取 EKS 服务的负载均衡器 DNS:
kubectl get svc flask-app-service

  1. 在 API Gateway 控制台创建新的 HTTP 集成,输入 EKS 服务的负载均衡器 DNS。

  2. 部署 API Gateway 并测试端点。

最佳实践

  • 使用 AWS Lambda 和 API Gateway 处理无服务器场景,适合轻量级和事件驱动的应用。
  • 使用 EKS 处理需要高可用性和可扩展性的复杂应用。
  • 监控和日志记录:启用 CloudWatch 日志和 X-Ray 跟踪以监控性能。
  • 安全性:使用 IAM 角色和策略控制访问权限,确保 API Gateway 和 EKS 的网络安全。
Logo

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

更多推荐