使用 Amazon SAM CLI 和 Terraform 进行本地调试和测试
本主题介绍如何在 Terraform 项目和 Terraform Cloud 中使用支持的 Amazon Serverless Application Model 命令行界面 (Amazon SAM CLI) 命令。
要提供反馈和提交功能请求,请创建 GitHub 问题
主题
使用 sam local invoke 进行本地测试
注意
要使用 Amazon SAM CLI 进行本地测试,您必须安装并配置 Docker。有关说明,请参阅安装 Docker 以与 Amazon SAM CLI 一起使用。
以下是通过传入事件进行 Lambda 函数本地测试的示例:
$sam local invoke --hook-name terraformhello_world_function-eevents/event.json-
要了解有关使用此命令的更多信息,请参阅 使用 sam local invoke 进行测试简介。
使用 sam local start-api 进行本地测试
要将 sam local start-api 与 Terraform 结合使用,请运行以下命令:
$sam local start-api --hook-name terraform
以下是示例:
$sam local start-api --hook-name terraformRunning Prepare Hook to prepare the current application Executing prepare hook of hook "terraform" Initializing Terraform application ... Creating terraform plan and getting JSON output .... Generating metadata file Unresolvable attributes discovered in project, run terraform apply to resolve them. Finished generating metadata file. Storing in... Prepare hook completed and metadata file generated at: ... Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET] Mounting None at http://127.0.0.1:3000/hello [POST] You can now browse to the above endpoints to invoke your functions. You do not need to restart/reload SAM CLI while working on your functions, changes will be reflected instantly/automatically. If you used sam build before running local commands, you will need to re-run sam build for the changes to be picked up. You only need to restart SAM CLI if you update your AWS SAM template 2023-06-26 13:21:20 * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
要了解有关此命令的更多信息,请参阅 使用 sam local start-api 进行测试简介。
使用 Lambda 授权方的 Lambda 函数
对于配置为使用 Lambda 授权方的 Lambda 函数,Amazon SAM CLI 将在调用您的 Lambda 函数端点之前自动调用您的 Lambda 授权方。
-
要了解有关 Amazon SAM CLI 中此特征的更多信息,请参阅 使用 Lambda 授权方的 Lambda 函数。
-
有关在 Terraform 中使用 Lambda 授权方的更多信息,请参阅 Terraform 注册表中的 Resource: aws_api_gateway_authorizer
。
使用 sam local start-lambda 进行本地测试
以下是使用 Amazon Command Line Interface (Amazon CLI) 进行 Lambda 函数本地测试的示例:
-
使用 Amazon SAM CLI 创建本地测试环境:
$sam local start-lambda --hook-name terraformhello_world_function -
使用 Amazon CLI 在本地调用函数:
$aws lambda invoke --function-namehello_world_function--endpoint-urlhttp://127.0.0.1:3001/ response.json --cli-binary-format raw-in-base64-out --payload file://events/event.json
要了解有关此命令的更多信息,请参阅 使用 sam local start-lambda 进行测试简介。
Terraform 限制
以下是将 Amazon SAM CLI 与 Terraform 一起使用时的限制:
-
链接到多个层的 Lambda 函数。
-
定义资源之间链接的 Terraform 局部变量。
-
引用尚未创建的 Lambda 函数。这包括在 REST API 资源的主体属性中定义的函数。
为避免这些限制,您可以在添加新资源时运行 terraform apply。