调试无服务器应用程序的配置选项 - AWS 适用于 VS Code 的工具包

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

调试无服务器应用程序的配置选项

打开 launch.json 文件编辑调试配置时,可以使用 VS Code IntelliSense 功能来查看并自动完成有效属性。要在编辑器中触发 IntelliSense,请按下 Ctrl空格键

使用 VS Code 的 IntelliSense 功能来查找并完成有效的调试属性。

借助 IntelliSense,您可以直接或通过 AWS SAM 模板查找和定义用于调用 Lambda 函数的属性。您还可以定义属性 "lambda"(函数运行方式)、"sam"(AWS SAM CLI 构建应用程序的方式),以及 "aws"(提供 AWS 连接信息的方式)。

AWS SAM:Lambda 处理程序直接调用/基于模板的 Lambda 调用
属性 描述

type

指定哪个扩展管理启动配置。始终设置为 aws-sam 来使用 AWS SAM CLI 在本地构建和调试。

name

指定一个易于阅读的名称,以显示在 Debug launch configuration(调试启动配置)列表中。

request

指定要由指定扩展程序执行的配置类型 (aws-sam)。始终设置为 direct-invoke 以启动 Lambda 函数。

invokeTarget

指定资源调用的入口点。

为了直接调用 Lambda 函数,请为以下 invokeTarget 字段设值:

  • target – 设置为 code

  • lambdaHandler – 要调用的 Lambda 函数处理程序的名称。

  • projectRoot:指向包含 Lambda 函数处理程序的应用程序文件的路径。

  • architecture:运行本地 SAM Lambda 应用程序的模拟环境的处理器架构。对于某些运行时系统,您可以选择 arm64,而不是默认的 x86_64 架构。有关更多信息,请参阅 创建新的无服务器应用程序(本地)

为了使用 AWS SAM 模板调用 Lambda 资源,请为下面的 invokeTarget 字段设置值:

  • target – 设置为 template

  • templatePath:指向 AWS SAM 模板文件的路径。

  • logicalId – 要调用的 AWS::Lambda::FunctionAWS::Serverless::Function 的资源名称。您可以在 YAML 格式的 AWS SAM 模板中找到资源名称。请注意,AWS Toolkit 隐式地将 AWS SAM 模板 PackageType: Image 中使用 定义的函数识别为基于映像的 Lambda 函数。有关更多信息,请参阅《AWS Lambda 开发人员指南》中的 Lambda 部署包

Lambda ("lambda") 属性
属性 描述

environmentVariables

将操作参数传递到您的 Lambda 函数。例如,您在写入 Amazon S3 存储桶时,不应对要写入的存储桶名称进行硬编码,而应将存储桶名称配置为环境变量。

注意

为无服务器应用程序指定环境变量时,必须同时向 AWS SAM 模板(template.yaml)和 launch.json 文件中添加配置。

AWS SAM 模板中环境变量的格式化示例:

Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: CodeUri: hello-world/ Handler: app.lambdaHandlerN10 Runtime: nodejs10.x Environment: Variables: SAMPLE1: Default Sample 1 Value

launch.json 文件中环境变量的格式化示例:

"environmentVariables": { "SAMPLE1": "My sample 1 value" }

payload

为作为输入提供给 Lambda 函数的事件负载提供两个选项。

  • "json":JSON 格式的键值对,用于定义事件负载。

  • "path":用作事件负载的文件路径。

memoryMB

指定为运行一个已调用 Lambda 函数所提供的内存 [以兆字节(MB)为单位]。

runtime

指定 Lambda 函数使用的运行时系统。有关更多信息,请参阅 AWS Lambda 运行时

timeoutSec

设置调试会话超时之前的允许时间(以秒为单位)。

pathMappings

指定本地代码在容器中的运行位置。

默认情况下,Toolkit for VS Code 将 localRoot 设置为本地工作区中 Lambda 函数的代码根目录,并将 remoteRoot 设置为 /var/task(在 Lambda 中运行的代码的默认工作目录)。如果在 Dockerfile 中或在 AWS CloudFormation 模板文件中使用 WorkingDirectory 参数更改了工作目录,则必须至少指定一个 pathMapping 条目,这样调试器才能成功地将本地设置断点映射到 Lambda 容器中运行的代码。

launch.json 文件中 pathMappings 的格式化示例:

"pathMappings": [ { "localRoot": "${workspaceFolder}/sam-app/HelloWorldFunction", "remoteRoot": "/var/task" } ]

注意事项:

  • 对于基于 .NET 映像的 Lambda 函数,remoteRoot 条目必须是构建目录。

  • 对于基于 Node.js 的 Lambda 函数,您只能指定一个路径映射条目。

Toolkit for VS Code 扩展使用 AWS SAM CLI 在本地构建和调试无服务器应用程序。您可以使用 launch.json 文件中的 "sam" 配置属性来配置 AWS SAM CLI 命令的行为。

AWS SAM CLI ("sam") 属性
属性 描述 默认值

buildArguments

配置 sam build 命令构建 Lambda 源代码的方式。若要查看构建选项,请参阅 AWS Serverless Application Model 开发人员指南中的 sam 构建

空字符串

containerBuild

指示是否在类似于 Lambda 的 Docker 容器内构建函数。

false

dockerNetwork

Lambda Docker 容器应连接到的现有 Docker 网络的名称或 ID,以及默认桥接网络。如果未指定此项,Lambda 容器将仅连接到默认的桥接 Docker 网络。

空字符串

localArguments

指定其他本地调用参数。

空字符串

skipNewImageCheck

指定命令是否应跳过下拉最新 Docker 镜像获取 Lambda 运行时的操作。

false

template

通过使用参数输入客户值来对您的 AWS SAM 模板进行自定义。有关更多信息,请参阅《AWS CloudFormation 用户指南》中的参数

"parameters":{}

AWS 连接 ("aws") 属性
属性 描述 默认值

credentials

从凭证文件中选择一个特定的配置文件(如 profile:default)以获取 AWS 凭证。

现有的 共享 AWS 配置文件或共享 AWS 凭证文件 向 Toolkit for VS Code 提供的 AWS 凭证。

region

设置服务的 AWS 区域(如 us-east-1)。

与活动凭证配置文件关联的默认 AWS 区域。

示例:模板启动配置

以下是 AWS SAM 模板目标的启动配置文件示例:

{ "configurations": [ { "type": "aws-sam", "request": "direct-invoke", "name": "my-example:HelloWorldFunction", "invokeTarget": { "target": "template", "templatePath": "template.yaml", "logicalId": "HelloWorldFunction" }, "lambda": { "payload": {}, "environmentVariables": {} } } ] }

示例:代码启动配置

以下是 Lambda 函数目标的启动配置文件示例:

{ "configurations": [ { "type": "aws-sam", "request": "direct-invoke", "name": "my-example:app.lambda_handler (python3.7)", "invokeTarget": { "target": "code", "projectRoot": "hello_world", "lambdaHandler": "app.lambda_handler" }, "lambda": { "runtime": "python3.7", "payload": {}, "environmentVariables": {} } } ] }