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

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

在本地运行API 网关

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

注意

“热重新加载”是指仅刷新已更改的文件而不丢失应用程序的状态。相反,“实时重新加载”是刷新整个应用程序时,这样应用程序的状态就会丢失。

您必须在包含要调用的函数的项目目录中执行 sam local start-api

默认情况下,AWS SAM 使用 Lambda 代理集成,并且支持 HttpApiApi 资源类型。有关 HttpApi 资源类型的代理集成的更多信息,请参阅使用适用于 HTTP Lambda 的 APIs 代理集成。 有关与 Api 资源类型的代理集成的更多信息,请参阅了解 API 网关 Lambda 代理集成

示例:

sam local start-api

AWS SAM 自动在您的 AWS SAM 模板中查找定义了 HttpApiApi 事件源的任何函数。然后,将这些文件装载到定义的 HTTP 路径中。

此动画演示了使用 Microsoft Visual Studio 代码在本地运行 API 网关:

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

Ratings: Type: AWS::Serverless::Function Properties: Handler: ratings.handler Runtime: python3.6 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" }); }

环境变量文件

您可以将 --env-vars 参数与 invokestart-api 命令结合使用来提供一个包含值的 JSON 文件,以覆盖已在函数模板中定义的环境变量。您可以按如下所示构造文件的结构:

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

或者,您的环境文件也可以包含一个 Parameters 条目,其中包含所有函数的环境变量。请注意,您不能将该格式与上述示例混合。

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

将环境变量保存在名为 env.json 的文件中。 以下命令使用此文件覆盖包括的环境变量:

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

Layers

如果您的应用程序包含层,请参阅处理层以了解有关如何在本地主机上调试层问题的更多信息。