如何将 lambda 应用程序作为本地 API 运行

Fra*_*ton 4 python amazon-web-services aws-lambda aws-api-gateway

我到处寻找一些支持的库,但找不到任何东西。我只想将我的 lambda 作为本地 api(即 localhost:80000/api/get/1)运行,这样我就可以在我的机器上运行我的前端和后端,以便快速开发。

我已经在本地运行了一个 fastapi“网关”,并使用它在本地调用 lambda_entry,唯一的问题是它很慢,毫无疑问,每个请求的环境旋转都会影响性能。

我觉得这是人们会经常使用的东西,我在正确的轨道上吗?

Nie*_*ano 5

您可以为此使用AWS SAM

本地测试和调试

使用 SAM CLI 逐步执行和调试您的代码。它在本地提供类似 Lambda 的执行环境,并帮助您预先发现问题。

您可能需要先安装 Docker,因为它将是用于运行 API 的执行环境。sam首先设置项目。

$ python3 -m pip install aws-sam-cli
$ sam init  # Just choose the first options e.g. <1 - AWS Quick Start Templates>
Run Code Online (Sandbox Code Playgroud)

现在,您将拥有这样的文件结构:

$ tree
.
??? sam-app
    ??? events
    ?   ??? event.json
    ??? hello_world
    ?   ??? app.py
    ?   ??? __init__.py
    ?   ??? requirements.txt
    ??? __init__.py
    ??? README.md
    ??? template.yaml
    ??? tests
        ??? __init__.py
        ??? integration
        ?   ??? __init__.py
        ?   ??? test_api_gateway.py
        ??? requirements.txt
        ??? unit
            ??? __init__.py
            ??? test_handler.py

6 directories, 13 files
Run Code Online (Sandbox Code Playgroud)

您可能感兴趣的 2 个文件是:

山姆应用程序/hello_world/app.py

  • 您可以在此处放置 Lambda 函数的代码。
import json


def lambda_handler(event, context):
    """Sample pure Lambda function"""
    return {
        "statusCode": 200,
        "body": json.dumps({
            "message": "hello world",
        }),
    }
Run Code Online (Sandbox Code Playgroud)

sam-app/template.yaml

  • 您可以在此处配置 API,例如 HTTP 方法、URL、要运行的代码的位置等。
...
  HelloWorldFunction:
    Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#awsserverlessfunction
    Properties:
      CodeUri: hello_world/
      Handler: app.lambda_handler
      Runtime: python3.9
      Events:
        HelloWorld:
          Type: Api # More info about API Event Source: https://github.com/awslabs/serverless-application-model/blob/master/versions/2016-10-31.md#api
          Properties:
            Path: /hello
            Method: get
...
Run Code Online (Sandbox Code Playgroud)

构建应用程序,然后您就可以运行您的本地 API

$ cd sam-app/
$ sam build
$ sam local start-api
Run Code Online (Sandbox Code Playgroud)

访问您的本地 API

  • 请注意,第一次运行它可能需要一些时间,因为这是设置 API 环境的时候,例如创建图像和运行容器。任何后续调用都应该很快。
$ curl http://127.0.0.1:3000/hello
{"message": "hello world"}
Run Code Online (Sandbox Code Playgroud)

为您提供指导的完整参考:https : //docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html