Serverless WSGI 使用教程
项目介绍
Serverless WSGI 是一个用于将 WSGI 应用部署到 AWS Lambda 和 API Gateway 的插件。它允许开发者使用 Flask、Django 等 WSGI 兼容框架构建的应用程序在无服务器环境中运行。该项目通过封装 AWS API Gateway 的请求和响应,使得 WSGI 应用能够无缝集成到 AWS 的无服务器架构中。
项目快速启动
安装
首先,确保你已经安装了 serverless
框架:
npm install -g serverless
然后,安装 serverless-wsgi
插件:
sls plugin install -n serverless-wsgi
配置
在你的 serverless.yml
文件中添加以下配置:
service: my-service
provider:
name: aws
runtime: python3.8
plugins:
- serverless-wsgi
functions:
app:
handler: wsgi_handler.handler
events:
- http: ANY /
- http: ANY /{proxy+}
custom:
wsgi:
app: api.app
示例应用
创建一个简单的 Flask 应用 api.py
:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
部署
运行以下命令进行部署:
sls deploy
应用案例和最佳实践
文件上传
为了接受文件上传,确保在 API Gateway 中启用 multipart/form-data
的二进制支持。可以使用 serverless-apigw-binary
插件来自动化这一过程。
plugins:
- serverless-wsgi
- serverless-apigw-binary
custom:
apigwBinary:
types:
- 'multipart/form-data'
直接上传到 S3
在无服务器应用中,通常推荐直接从浏览器上传文件到 S3,以减少 Lambda 函数的负载。
典型生态项目
serverless-domain-manager
使用 serverless-domain-manager
插件可以轻松管理自定义域名:
plugins:
- serverless-wsgi
- serverless-domain-manager
custom:
wsgi:
app: api.app
customDomain:
domainName: mydomain.com
basePath: ${opt:stage}
stage: ${opt:stage}
createRoute53Record: true
通过这些配置,你可以将你的 WSGI 应用部署到 AWS Lambda,并使用自定义域名进行访问。