在本地运行 API Gateway AWS SAM - AWS Serverless Application Model

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在本地运行 API Gateway AWS SAM

在本地运行的 Amazon API Gateway 可以带来多种好处。例如,在本地运行 API Gateway 可以让您在部署到 AWS 云端之前在本地测试 API 端点。如果您先在本地进行测试,则通常可以减少云端的测试和开发,这有助于降低成本。此外,在本地运行可以更轻松地进行调试。

要启动可用于测试 HTTP 请求/响应功能的 API Gateway 本地实例,请使用命令。sam local start-api AWS SAMCLI此功能具有热重载功能,让您可以快速开发和迭代函数。

注意

热重载是指只刷新已更改的文件,并且应用程序的状态保持不变。相比之下,实时重载是指刷新整个应用程序,并且应用程序的状态会丢失。

有关使用 sam local start-api 命令的说明,请参阅 使用测试简介 sam local start-api

默认情况下, AWS SAM 使用 AWS Lambda 代理集成,同时支持两种HttpApiApi资源类型。有关HttpApi资源类型的代理集成的更多信息,请参阅《API Gate way 开发者指南》中的使用 HTTP API 的 AWS Lambda 代理集成。有关代理与 Api 资源类型集成的更多信息,请参阅《API Gateway 开发人员指南》中的理解 API Gateway Lambda 代理集成

示例

$ sam local start-api

AWS SAM 自动查找 AWS SAM 模板中已定义HttpApiApi事件源的所有函数。然后,它将函数挂载在定义的 HTTP 路径中。

在以下 Api 示例中,对于 GET 请求,Ratings 函数将在 /ratings 中挂载 ratings.py:handler()

Ratings: Type: AWS::Serverless::Function Properties: Handler: ratings.handler Runtime: python3.9 Events: Api: Type: Api Properties: Path: /ratings Method: get

以下是 Api 响应示例:

// Example of a Proxy Integration response exports.handler = (event, context, callback) => { callback(null, { statusCode: 200, headers: { "x-custom-header" : "my custom header value" }, body: "hello world" }); }

如果您修改了函数的代码,请对 sam local start-api 运行 sam build 命令以检测您的更改。

环境变量文件

要在本地声明可覆盖模板中定义的值的环境变量,请执行以下操作:

  1. 创建包含要覆盖的环境变量的 JSON 文件。

  2. 使用 --env-vars 参数覆盖模板中定义的值。

声明环境变量

要声明可全局应用于所有资源的环境变量,请如下所示指定 Parameters 对象:

{ "Parameters": { "TABLE_NAME": "localtable", "BUCKET_NAME": "testBucket", "STAGE": "dev" } }

要为每个资源声明不同的环境变量,请如下所示为每个资源指定对象:

{ "MyFunction1": { "TABLE_NAME": "localtable", "BUCKET_NAME": "testBucket", }, "MyFunction2": { "TABLE_NAME": "localtable", "STAGE": "dev" } }

为每个资源指定对象时,可以使用以下标识符,这些标识符按优先级从高到低的顺序列出:

  1. logical_id

  2. function_id

  3. function_name

  4. 完整路径标识符

您可以在单个文件中结合使用上述两种声明环境变量的方法。如果这样做,您为特定资源提供的环境变量会优先于全局环境变量。

将环境变量保存在 JSON 文件中,例如 env.json

覆盖环境变量值

要用 JSON 文件中定义的变量覆盖环境变量,请将 --env-vars 参数与 invokestart-api 命令一起使用。例如:

$ sam local start-api --env-vars env.json

图层

如果应用程序包含层,有关如何在本地主机上调试层的问题,请参阅使用带有 Lambda 层的 Lambda 层来提高效率 AWS SAM