本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在本地运行 API Gateway AWS SAM
在本地运行的 Amazon API Gateway 可以带来多种好处。例如,在本地运行 API Gateway 可以让您在部署到 AWS 云API端之前在本地测试终端节点。如果您先在本地测试,则通常可以减少在云中的测试和开发,从而有助于降低成本。此外,在本地运行使调试变得更加容易。
要启动可用于测试HTTP请求/响应功能的 API Gateway 本地实例,请使用 sam local start-api
AWS SAM CLI 命令。此功能具有热重载功能,让您可以快速开发和迭代函数。
注意
热重载是指只刷新已更改的文件,并且应用程序的状态保持不变。相比之下,实时重载是指刷新整个应用程序,并且应用程序的状态会丢失。
有关使用 sam local start-api
命令的说明,请参阅 使用 sam local start-api 进行测试简介。
默认情况下, AWS SAM 使用 AWS Lambda 代理集成,同时支持两种HttpApi
Api
资源类型。有关HttpApi
资源类型的代理集成的更多信息,请参阅《API网关开发者指南》HTTPAPIs中的使用 AWS Lambda 代理集成。有关与Api
资源类型进行代理集成的更多信息,请参阅API网关开发者指南中的API了解 Gateway Lambda 代理集成。
示例:
$
sam local start-api
AWS SAM 自动查找 AWS SAM 模板中已定义HttpApi
或Api
事件源的所有函数。然后,它在定义的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
命令以检测您的更改。
环境变量文件
要在本地声明可覆盖模板中定义的值的环境变量,请执行以下操作:
-
创建一个包含要覆盖的环境变量的JSON文件。
-
使用
--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" } }
为每个资源指定对象时,可以使用以下标识符,这些标识符按优先级从高到低的顺序列出:
logical_id
function_id
function_name
完整路径标识符
您可以在单个文件中结合使用上述两种声明环境变量的方法。如果这样做,您为特定资源提供的环境变量会优先于全局环境变量。
将您的环境变量保存在JSON文件中,例如env.json
。
覆盖环境变量值
要使用JSON文件中定义的环境变量覆盖环境变量,请将--env-vars
参数与invoke或start-api命令一起使用。例如:
$
sam local start-api --env-vars env.json
图层
如果应用程序包含层,有关如何在本地主机上调试层的问题,请参阅将 Lambda 层与 AWS SAM 一起使用提高效率。