在本地运行 API Gateway API - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在本地运行 API Gateway API

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

注意

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

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

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

示例

$ sam local start-api

Amazon SAM 在 Amazon 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

图层

如果应用程序包含层,有关如何在本地主机上调试层的问题,请参阅使用层