跳转到主要内容

将WSGI应用程序封装在AWS Lambda处理函数中,以便在API网关或ALB上运行。

项目描述

https://img.shields.io/github/actions/workflow/status/adamchainz/apig-wsgi/main.yml?branch=main&style=for-the-badge https://img.shields.io/badge/Coverage-100%25-success?style=for-the-badge https://img.shields.io/pypi/v/apig-wsgi.svg?style=for-the-badge https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge pre-commit

WSGI应用程序封装在AWS Lambda处理函数中,以便在API网关或ALB上运行。

快速示例

from apig_wsgi import make_lambda_handler
from myapp.wsgi import app

# Configure this as your entry point in AWS Lambda
lambda_handler = make_lambda_handler(app)

安装

使用 pip

python -m pip install apig-wsgi

支持Python 3.8至3.12。


在Django项目中工作? 通过我的书之一提高您的技能。


用法

在您的AWS Lambda函数中使用apig-wsgi,该函数连接到以下之一

支持“格式版本1”和“格式版本2”(文档)。apig-wsgi将自动检测正在使用的版本。截至编写时,“格式版本2”用于Lambda函数URL和API网关HTTP API。

make_lambda_handler(app, binary_support=None, non_binary_content_type_prefixes=None)

app 应该是一个 WSGI 应用,例如来自 Django 的 wsgi.py 或 Flask 的 Flask() 对象。

binary_support 配置是否支持包含二进制内容的响应。默认值 None 表示自动从事件的格式版本检测此功能 - 在格式版本 2 上默认为 True,在格式版本 1 上为 False。根据您如何部署 Lambda 函数,您可能需要在启用二进制响应之前进行额外的配置。

  • ALB 默认支持二进制响应。

  • API Gateway HTTP API 默认支持二进制响应(并默认为事件格式版本 2)。

  • API Gateway REST API(“旧”风格)需要您在“二进制媒体类型”配置中添加 '*/*'。您需要通过 API Gateway、CloudFormation、SAM 或您项目使用的任何工具进行配置。虽然它支持一系列二进制媒体类型,但使用 '*/*' 是配置它的最佳方式,因为它还用于匹配请求的“Accept”标题,而 WSGI 应用通常忽略它。您可能需要删除并重新创建您的阶段,以便将此值复制过来。

请注意,如果您的响应具有以“text/”、“application/json”或“application/vnd.api+json”开头的“Content-Type”,则不会发送二进制响应 - 这是为了支持发送较大的文本响应,因为否则 base64 编码会膨胀内容长度。为了避免对其他内容类型进行 base64 编码,您可以将 non_binary_content_type_prefixes 设置为包含您选择的内容类型前缀的列表或元组(这将替换默认列表)。

如果来自 API Gateway 的事件包含 requestContext 键,例如在格式版本 2 或来自自定义请求授权时,它将在 WSGI 环境中以 apig_wsgi.request_context 键提供。

如果您想检查 API Gateway 的完整事件,它可以在 WSGI 环境中以 apig_wsgi.full_event 键提供。

如果您需要 Lambda Context 对象,它可以在 WSGI 环境中以 apig_wsgi.context 键提供。

如果您正在使用“格式版本 1”,则支持请求和响应头以及查询参数的多个值。它们在 API Gateway 上自动启用,但在 ALB 上需要 显式激活。如果您需要从您的应用程序中确定是否启用了多个头值,您可以在 WSGI 环境中检查 apgi_wsgi.multi_value_headers 键,如果启用了则为 True,否则为 False

示例

在存储库的 example/ 目录中提供了一个具有 Ansible 部署的 Django 项目示例。有关指南,请参阅那里的 README.rst

项目详情


下载文件

下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码发行版

apig_wsgi-2.18.0.tar.gz (17.0 kB 查看哈希值)

上传时间 源代码

编译发行版

apig_wsgi-2.18.0-py3-none-any.whl (8.4 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面