一 背景

AWS Lambda 是亚马逊云计算服务提供的无服务器计算服务,用于运行代码而无需管理服务器。Python FastAPI 是一个快速(高性能)的 Web 框架,用于构建 API。将两者结合使用可以实现快速部署和扩展的 API 服务。

要在 AWS Lambda 上部署 Python FastAPI,首先需要创建一个 Lambda 函数,并选择适当的运行时环境,例如 Python 3.8。然后,在函数代码中安装 FastAPI 和其他依赖项,并编写 FastAPI 应用程序代码。

接下来,需要配置 API 网关作为 Lambda 函数的触发器,以便能够通过 HTTP 请求访问 API。这可以通过 AWS 控制台或 AWS CLI 完成。一旦配置完成,就可以通过 API 网关的终端节点访问部署在 Lambda 上的 FastAPI 应用程序。

在部署过程中,还需要为 Lambda 函数分配合适的资源和设置适当的安全性措施。可以调整内存和执行时间限制,以确保函数能够处理预期的负载。此外,还可以配置 VPC 和安全组等设置,以实现网络隔离和访问控制。

通过 AWS Lambda 部署 Python FastAPI,可以轻松构建可扩展的 API 服务,并利用 AWS 的弹性和可靠性来处理高流量和动态负载。这种无服务器架构减少了服务器管理的复杂性,使开发人员能够专注于业务逻辑的实现和快速迭代。

二 概述

AWS Lambda和Python FastAPI是两个强大的工具,结合使用可以实现快速部署和扩展的API服务。AWS Lambda是无服务器计算服务,通过它可以运行代码而无需管理服务器。Python FastAPI是一个高性能的Web框架,用于构建API。在部署Python FastAPI到AWS Lambda的过程中,首先需要创建Lambda函数并选择适当的运行时环境。然后,在函数代码中安装FastAPI和其他依赖项,并编写FastAPI应用程序代码。接下来,配置API网关作为Lambda函数的触发器,以便通过HTTP请求访问API。在部署过程中,需要为Lambda函数分配适当的资源,设置适当的安全性措施,并调整内存和执行时间限制以处理预期的负载。通过AWS Lambda部署Python FastAPI,可以快速构建���扩展的API服务,并利用AWS的弹性和可靠性来处理高流量和动态负载。这种无服务器架构减少了服务器管理的复杂性,使开发人员能够专注于业务逻辑的实现和快速迭代。

三 实战

3.1 Python 环境准备

利用anaconda 创建虚拟环境

$ conda create -n fastapi python=3.10
$ conda activate fastapi
# 安装软件包
$ pip3 install fastapi uvicorn mangum
$ pip3 freeze > requirements.txt

# 仅保留一下内容
fastapi==0.109.2
mangum==0.17.0
uvicorn==0.27.1
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

3.2 代码开发

创建main.py 内容如下

from fastapi import FastAPI
from mangum import Mangum

app = FastAPI()
handler = Mangum(app)

@app.get("/")
async def hello():
    return {"message": "aws lambda fastapi"}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

启动服务测试

uvicorn main:app --reload
  • 1.

实战AWS lambda 部署Python FastAPI_Serverless


3.3 代码打包

将依赖下载至项目文件中

# 为了跨平台下载包
$ pip3 install --platform manylinux2014_x86_64 -t dependencies -r requirements.txt --only-binary=:all:
$ (cd dependencies; zip ../aws lambda artifact.zip -r .)
  • 1.
  • 2.
  • 3.

实战AWS lambda 部署Python FastAPI_Serverless_02

将main.py 打包至文件内

$ zip aws lambda artifact.zip u main.py
        zip warning: name not matched: lambda
        zip warning: name not matched: artifact.zip
        zip warning: name not matched: u
  adding: main.py (deflated 23%)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

3.4 Lambda函数创建

在AWS web控制台创建函数

实战AWS lambda 部署Python FastAPI_Serverless_03

上次打包好的文件

实战AWS lambda 部署Python FastAPI_API_04

实战AWS lambda 部署Python FastAPI_API_05

3.5 浏览器测试

利用浏览器直接测试

实战AWS lambda 部署Python FastAPI_Python_06

3.6 创建Amazon API Gateway 暴露API

实战AWS lambda 部署Python FastAPI_API_07

实战AWS lambda 部署Python FastAPI_API_08

实战AWS lambda 部署Python FastAPI_Serverless_09

实战AWS lambda 部署Python FastAPI_Serverless_10

实战AWS lambda 部署Python FastAPI_API_11

实战AWS lambda 部署Python FastAPI_Python_12

注意事项

  1. 内存和执行时间限制:根据应用程序的需求,合理设置Lambda函数的内存和执行时间限制。确保函数具有足够的资源来处理预期的负载和运行时间。
  2. 依赖项管理:确保在Lambda函数中正确安装和管理FastAPI及其相关依赖项。可以使用虚拟环境或打包依赖项以确保函数的一致性和可靠性。
  3. 安全性配置:根据需要配置适当的安全性措施,例如配置访问权限、使用密钥管理服务(KMS)对敏感数据进行加密等。确保函数和应用程序的安全性。
  4. 日志和错误处理:配置适当的日志记录,以便能够跟踪和调试Lambda函数的运行。实现适当的错误处理和异常处理机制,以提高应用程序的可靠性和可维护性。
  5. 监控和扩展性:设置监控和警报,以便能够实时监视Lambda函数的性能和运行状况。根据需要进行扩展,使用AWS自动扩展功能以应对高流量和动态负载。
  6. 成本优化:根据函数的使用情况和负载模式,优化Lambda函数的配置,以减少不必要的资源使用和成本开销。
  7. 测试和部署策略:在部署之前进行充分的测试,并采用适当的部署策略,例如使用无损部署或灰度发布,以确保平滑的过渡和最小化影响。

总结

AWS Lambda和Python FastAPI的结合为快速部署和扩展API服务提供了一种强大的解决方案。通过AWS Lambda的无服务器计算服务,可以轻松运行FastAPI应用程序而无需管理服务器。FastAPI作为高性能的Web框架,提供了快速构建API的能力。部署过程涉及创建Lambda函数、安装依赖项、配置API网关等步骤。通过调整资源分配和安全性措施,可以实现高流量和动态负载的处理。无服务器架构减少了服务器管理的复杂性,让开发人员能够专注于业务逻辑的实现和快速迭代。AWS Lambda和Python FastAPI的结合为构建可扩展的API服务提供了灵活、可靠和高性能的解决方案。

参考链接