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

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

在本地运行 API Gateway Amazon SAM

在本地运行 Amazon API Gateway 可以带来多种好处。例如,在本地运行 API Gateway 可以让您在部署到 Amazon 云端之前在本地测试 API 端点。如果您先在本地测试,则通常可以减少在云中的测试和开发,从而有助于降低成本。此外,在本地运行使调试变得更加容易。

要启动可用于测试 HTTP 请求/响应功能的 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 开发者指南》 APIs中的使用 HTTP 的 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": "amzn-s3-demo-bucket", "STAGE": "dev" } }

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

{ "MyFunction1": { "TABLE_NAME": "localtable", "BUCKET_NAME": "amzn-s3-demo-bucket", }, "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 图层提高效率 Amazon SAM