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

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

使用本地调用 Lambda 函数 Amazon SAM

在云中进行测试或部署之前本地调用 Lambda 函数可以带来多种好处。它允许您更快地测试函数的逻辑。首先本地测试可减少在云中测试或部署期间发现问题的可能性,从而帮助您避免不必要的成本。此外,本地测试使调试变得更加容易。

您可以通过使用 sam local invoke 命令并提供函数的逻辑 ID 和事件文件,在本地调用 Lambda 函数。sam local invoke 还接受 stdin 作为事件。有关事件的更多信息,请参阅《Amazon Lambda 开发人员指南》中的事件。有关来自不同 Amazon 服务的事件消息格式的信息,请参阅《Amazon Lambda 开发者指南》中的Amazon Lambda 与其他服务一起使用

注意

sam local invoke命令与 Amazon Command Line Interface (Amazon CLI) 命令相对应aws lambda invoke。您可以使用任一命令调用 Lambda 函数。

必须在包含要调用的函数的项目目录中运行 sam local invoke 命令。

示例:

# Invoking function with event file $ sam local invoke "Ratings" -e event.json # Invoking function with event via stdin $ echo '{"message": "Hey, are you there?" }' | sam local invoke --event - "Ratings" # For more options $ sam local invoke --help

环境变量文件

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

  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 invoke --env-vars env.json

图层

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

了解更多

有关在本地调用函数的动手示例,请参阅完整 Amazon SAM 研讨会中的模块 2-本地运行