您当前的位置: 首页 >  编程语言

使用带有 Lambda + API 网关的 FastAPI 创建无服务器应用程序

介绍

我是 Meister Guild Co., Ltd. 新事业部的 Hitsuji。在我们的新业务部门,我们的目标是推出新服务每天,我们都在验证想法并创建原型!

技术进步是显着的,所以我正在努力赶上新技术,所以我不落伍!在本文中,我将向您展示如何使用 FastAPI 和 Lambda + API Gateway 创建无服务器应用程序。用于无服务器应用程序

无需管理服务器 只为你使用的东西付费 灵活的可扩展性

我认为它适合创建新服务的原型。

如果您按照本文中的步骤进行操作,您将能够快速创建 REST API!

你想做的事

我想将使用 FastAPI 创建的应用程序文件注册到 Lambda 函数,并让 API Gateway 处理到 Lambda 的路由。我想将其准备为 API 服务器,以便我可以从前端执行 API。

下面,我将详细描述如何做到这一点。

做什么的大图

每一步都有点繁琐,很容易忽略大局,所以我先给大家做个概述。

大致说来,将应用文件压缩成 zip 文件,上传文件到 Lambda,并配置 API Gateway只要。

了解更多信息,

在 FastAPI 应用程序文件中安装 Mangum 处理程序 压缩 FastAPI 应用程序文件 上传 zip 文件到 Lambda 以创建 Lambda 函数并使测试通过 配置 API Gateway 以处理到创建的 Lambda 函数的路由并发布 REST API 端点

将会以下是详细步骤。

FastAPI 应用程序文件

FastAPI 的应用程序文件是使用。

实现了一个 API,当您点击 {domain}/api/hoge 端点时返回 {"is_success": true},如下面的屏幕截图所示。(希望以后有这个申请文件的详细说明。)

要将 FastAPI 与 Lambda 一起使用,您必须使用一个名为

什么是芒格

Mangum 与 A​​WS Lambda 配合使用一个适配器,用于运行应用程序和处理函数 URL、API 网关、应用程序负载均衡器和 Lambda Edge 的事件。

如何使用芒格 矿。 py
from mangum import Mangum

app = FastAPI()
handler = Mangum(app)

对于正常使用,只需要app = FastAPI() 就足够了,但是为了能够将FastAPI 与Lambda 一起使用,您需要将fastapi 实例传递给mangum 处理程序handler = Mangum(app)。

如果您还没有完成 mangum 的 pip install,让我们来做吧。

$ pip install mangum

这就是准备代码库的全部内容。

创建 Lambda 函数

接下来,准备 Lambda 函数。

转到 Lambda 服务页面。 创建一个函数。 选择从头开始并输入基本信息。 输入函数名称 为运行时选择“Python 3.9” 其他默认值(可选) 按页面右下角的“创建函数”按钮。

您的 Lambda 函数现已完成!

将 FastAPI 应用程序文件上传到 Lambda

通过压缩 FastAPI 应用程序文件并生成一个 zip 文件,您将能够将其上传到 Lambda。在这里,我将向您展示如何压缩和上传。

文件zip压缩方法

要上传到 Lambda 的文件必须是 zip 文件,但 zip 文件中必须包含以下两个信息。

申请文件 各种库文件(已安装库 pip)

将这些文件组合成一个 zip 文件的命令是:

$ cd <appフォルダ: clean-architecture-like-fastapi> # root dirに入ります
$ pip install -t ./lib -r ./docker/python/requirements.txt # ライブラリ群をインストールし、libフォルダを作成 & データの格納
$ cd lib # libフォルダ内に入ります
$ zip ../lambda_function.zip -r . # libファイル内のライブラリのファイル群が圧縮され、root dir直下にlambda_function.zipが生成される
$ cd .. # root dirに戻ります

# アプリケーションファイルが多いので以下のようにたくさん追加してます。(アップロードするファイルを一階層上からにすれば、まとめてできるので、実はもっと楽です。)
$ zip lambda_function.zip -u main.py  # main.pyファイルをzipファイルに追加
$ zip lambda_function.zip -u __init__.py  # __init__.pyファイルをzipファイルに追加
$ zip lambda_function.zip -u -r adapters  # adaptersフォルダをzipファイルに追加
$ zip lambda_function.zip -u -r drivers  # driversフォルダをzipファイルに追加
$ zip lambda_function.zip -u -r usecase  # usecaseフォルダをzipファイルに追加
$ zip lambda_function.zip -u -r entities  # entitiesフォルダをzipファイルに追加
$ zip lambda_function.zip -u -r config  # configフォルダをzipファイルに追加

-u 标签是一个更新标签,在添加到 zip 文件时使用。-r 标签用于将文件夹深处的所有文件添加到 zip 文件中。

我认为lambda_function.zip是直接在app文件夹下生成的。

lambda_function.zip 该文件包含各种此类库的安装文件。

* 如果打不到 zip 命令,请参考本文安装。 (适用于 Windows 用户)

文件上传到 Lambda 函数和操作测试

上传上面创建的lambda_function.zip 文件。

创建一个测试来检查操作。

单击代码旁边的测试 选中“创建新事件” 输入事件名称 为模板选择“apigateway-aws-proxy” 在事件 JSON 中将 "path": "/path/to/resource", 和 "httpMethod": "POST", 更改为 "path": "/api/test", 和 "httpMethod": "GET",。注意有两个地方,开头和底部 点击右上角的“保存”按钮保存当前状态 点击右上角的“测试”按钮检查运行情况

当您测试时,您可能会收到这样的错误。这是由不正确的处理程序规范引起的常见错误。
{
  "errorMessage": "Unable to import module 'lambda_function': No module named 'lambda_function'",
  "errorType": "Runtime.ImportModuleError",
  ...
}
处理程序修复 打开代码页 检查运行时设置处理程序显示lambda_function.lambda_handler。 将此编辑为main.handler。→ main.py 的处理程序被指定为处理程序。也就是说,就是上面写的handler = Mangum(app)的部分。

如果我再次运行测试,我希望它像这样通过。 API网关端的设置

我们将配置 API Gateway,以便它可以处理到 Lambda 函数的路由。

访问 API Gateway 服务页面

使用 REST API 创建新 API

单击 REST API 的构建按钮 为协议选择“REST” 选择“新 API” 输入 API 名称 单击创建 API 按钮

操作 -> 创建方法 -> 选择任何

/- ANY - セットアップ

选择 Lambda 函数 选中以使用 Lambda 代理集成 在 Lambda 函数中输入函数名称 点击右下角的“保存”按钮

操作 → 创建资源

资源设置

选中设置为代理资源 保留其他所有内容为默认值单击创建资源按钮

/{proxy+} - ANY - セットアップ

为集成类型选择 Lambda 函数代理 区域应该是Lambda选择的区域(应该默认设置) 输入您的 Lambda 函数的名称 点击右下角的“保存”按钮

行动 → 部署 API

部署的阶段是“[新阶段]” 阶段名称“开发”

https://(ここはお見せできない).execute-api.(リージョン).amazonaws.com/dev/api/hoge

您现在可以点击 API!

在最后

现在,您可以轻松地创建 REST API 无服务器应用程序(只要记住该过程)!FastAPI 可以轻松实现 API,因此在您想轻松创建应用程序时很有用。如果可以在开发新服务时使用,我愿意使用它!

原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308624552.html