

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

# AWS Lambda 函数
<a name="building-lambda"></a>

AWS Toolkit for Visual Studio Code 为 AWS Lambda 函数提供全面支持，使您能够直接从 VS Code 构建、测试和部署。

Lambda 是一项完全托管的、事件驱动型计算服务，可自动运行代码以响应来自 200 多个 AWS 服务和软件即服务（SaaS）应用程序的事件。有关 AWS Lambda 服务的详细信息，请参阅《[AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) 开发人员指南》。

以下主题介绍了如何在 AWS Lambda 中使用 AWS Toolkit for Visual Studio Code。

**Topics**
+ [使用 AWS Lambda 函数](remote-lambda.md)
+ [AWS Lambda console 到 IDE](lambda-console-ide.md)
+ [AWS Lambda 有 LocalStack 支撑](lambda-localstack.md)
+ [AWS Lambda 远程调试](lambda-remote-debug.md)

# 使用 AWS Lambda 函数
<a name="remote-lambda"></a>

 AWS Toolkit for Visual Studio Code 允许您在本地 VS Code 环境中使用您的 AWS Lambda 函数。使用该 AWS 工具包，您无需离开 IDE 即可创建、编辑、测试、调试和部署您的 Lambda 函数。有关该 AWS Lambda 服务的详细信息，请参阅[AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)开发人员指南。

以下各节介绍了如何开始在 AWS Toolkit for Visual Studio Code中使用 Lambda 函数。

**注意**  
如果您已经使用创建了 Lambda 函数 AWS 管理控制台，则可以从工具包中调用它们。此外，您可以从在 VS Code 中打开 Lambda 函数 AWS Lambda console，有关更多信息，请参阅本用户[AWS Lambda console 到 IDE](lambda-console-ide.md)指南中的主题。要在 VS Code 中创建新的 Lambda 函数，请按照本用户指南中[创建新的无服务器应用程序（本地）](https://docs.aws.amazon.com//toolkit-for-vscode/latest/userguide/sam-get-started.html#serverless-apps-create)主题中概述的步骤进行操作。

## 先决条件
<a name="remote-lambda-prereq"></a>

必须满足以下条件才能使用 AWS 工具包中的 AWS Lambda 服务。
+ 已安装最新版本 AWS Toolkit for Visual Studio Code 的，并使用您的 AWS 凭据进行设置。
+ 您的 AWS Identity and Access Management (IAM) 托管权限和策略已配置为与该 AWS Lambda 服务配合使用。[有关如何配置权限和创建兼容的 AWS 托管策略的详细信息，请参阅《AWS Identity and Access Management*AWS Lambda 开发人员指南*》中的 AWS Lambda主题。](https://docs.aws.amazon.com/lambda/latest/dg/security-iam.html)
+ 您已有 AWS Lambda 函数或熟悉如何创建函数。*有关如何创建 Lambda 函数的说明，请参阅《AWS Lambda 开发人员指南》*中的[创建第一个 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)主题。

## 调用 Lambda 函数
<a name="invoke-lam-func"></a>

要从您的 AWS 账户在 VS Code 中调用 Lambda 函数，请完成以下步骤。

1. 从中 AWS Toolkit for Visual Studio Code，展开 AWS 浏览器。

1. 在 AWS 资源管理器中，展开 **Lambda** 以查看您的 Lambda 资源。

1. 打开要调用的 Lambda 函数的上下文菜单（右键单击），然后选择**在云中调用**或选择**在云中调用**图标以在 VS Code 中打开**远程调用配置**菜单。

1. 在**远程调用配置**菜单中，指定**有效载荷**设置并添加事件所需的任何其他信息。
**注意**  
在 AWS 资源管理器**中选择 “云端调用” 后，第一个调用**进程可能会立即开始运行。输出将显示在 VS Code 终端的**输出**选项卡中。

1. 选择**远程调用**按钮来调用函数。输出将显示在 VS Code 终端的**输出**选项卡中。

## 删除 Lambda 函数
<a name="delete-lambda"></a>

要删除 Lambda 函数，请完成以下过程。

**警告**  
请勿使用此过程删除与 [CloudFormation](https://docs.aws.amazon.com/cloudformation/) 关联的 Lambda 函数。这些函数必须通过 CloudFormation 堆栈删除。

1. 从中 AWS Toolkit for Visual Studio Code，展开 AWS 浏览器。

1. 在 AWS 资源管理器中，展开 **Lambda** 以查看您的 Lambda 资源。

1. 右键单击要删除的 Lambda 函数，然后选择**删除**。

1. 出现提示时，确认您要删除函数。

删除该函数后，它将不再在 AWS 资源管理器中列出。

## 下载 Lambda 函数
<a name="import-lambda"></a>

您可以将远程 Lambda 函数的代码下载到 VS Code 工作区中进行编辑和调试。

**注意**  
要下载你的 Lambda 函数，你必须在带有可访问文件夹的 VS Code 工作区中工作，而且该 AWS 工具包仅支持使用 Node.js 和 Python 运行时的 Lambda 函数的此功能。

1. 从中 AWS Toolkit for Visual Studio Code，展开 AWS 浏览器。

1. 在 AWS 资源管理器中，展开 **Lambda** 以查看您的 Lambda 资源。

1. 右键单击要下载的 Lambda 函数，然后选择**下载**。

1. 您的 Lambda 函数将在 VS Code 编辑器中打开，并在下载完成后显示在 AWS 资源管理器中。该 AWS 工具包还在 VS Code 运行面板中创建*启动配置*，允许您使用在本地运行和调试 Lambda 函数。 AWS Serverless Application Model有关使用的更多信息 AWS SAM，请参阅[从模板（本地）运行和调试无服务器应用程序](sam-get-started.md#serverless-apps-debug)。

## 为新的 Lambda 函数部署更新
<a name="deploy-lambda"></a>

您可以从本地计算机上未指定的临时位置部署新 Lambda 函数的更新。

**注意**  
当您的 Lambda 文件有未部署的更改时，VS Code 编辑器和 AWS 各区服务浏览器中修改后的文件旁边的 **M** 图标会通知您。

**通过 VS Code 编辑器部署**

1. 在 VS Code 编辑器中打开 Lambda 函数中的一个文件，然后对该文件进行更改。

1. 从 VS Code 主菜单中手动保存或按 **option\$1s**（Mac）**ctrl\$1s**（Windows）。

1. VS Code 会自动提示您将更改部署到云中，选择**部署**按钮以确认部署。

1. VS Code 会实时更新部署状态，并在该过程完成时通知您。

**从 AWS 资源管理器部署**

1. 在 VS Code 编辑器中打开 Lambda 函数中的一个文件，然后对该文件进行更改。

1. 在 AWS 工具包中，展开 AWS 资源管理器。

1. 在 AWS 资源管理器中，使用要为其部署更改的 Lambda 函数扩展 AWS 区域。

1. 从该 AWS 区域展开 Lambda，然后浏览要为其部署更改的函数。

1. 在函数旁边的快捷菜单中，选择**保存并部署代码**图标。

1. VS Code 会实时更新部署状态，并在该过程完成时通知您。

## 上传现有 Lambda 函数的更新
<a name="upload-lambda"></a>

以下过程说明了如何上传对现有 Lambda 函数所做的本地更改。此功能支持使用任何 Lambda 支持的运行时进行上传。

**警告**  
在上传 Lambda 函数之前，请注意以下几点：  
以这种方式更新代码不会使用 AWS SAM CLI 进行部署或创建 CloudFormation 堆栈
该 AWS 工具包不验证代码。在将任何更改上传到云中之前，请验证代码并测试函数。

**上传 Zip 格式归档**

1. 从中 AWS Toolkit for Visual Studio Code，展开 AWS 浏览器。

1. 在 AWS 资源管理器中，展开 **Lambda** 以查看您的 Lambda 资源。

1. 右键单击要将更改上传到的 Lambda 函数，然后选择**上传 Lambda...** 以打开**选择上传类型**菜单。

1. 选择 **ZIP 归档**，在本地目录中找到 `ZIP Archive`。

1. 出现提示时，确认上传以开始上传所选 `ZIP Archive`。

1. 上传状态显示在 VS Code 中，当上传过程完成时，系统会通知您。

**上传不含构建的目录**

1. 从中 AWS Toolkit for Visual Studio Code，展开 AWS 浏览器。

1. 在 AWS 资源管理器中，展开 **Lambda** 以查看您的 Lambda 资源。

1. 右键单击要将更改上传到的 Lambda 函数，然后选择**上传 Lambda...** 以打开**选择上传类型**菜单。

1. 选择**目录**以进入**构建目录**屏幕。

1. 在**构建目录**屏幕上，选择**否**以选择要上传的本地目录。

1. 出现提示时，确认上传以上传所选目录。

1. 上传状态显示在 VS Code 中，当上传过程完成时，系统会通知您。

**上传包含构建的目录**
**注意**  
请注意以下事项：  
此过程需要 AWS Serverless Application Model CLI。
 AWS Toolkit 会在上传之前通知您无法检测到匹配的处理程序。
要更改附加到 Lambda 函数的处理程序，请使用 AWS Lambda console 或。 AWS Command Line Interface

1. 从中 AWS Toolkit for Visual Studio Code，展开 AWS 浏览器。

1. 在 AWS 资源管理器中，展开 **Lambda** 以查看您的 Lambda 资源。

1. 右键单击要将更改上传到的 Lambda 函数，然后选择**上传 Lambda...** 以打开**选择上传类型**菜单。

1. 选择**目录**以进入**构建目录**屏幕。

1. 在**构建目录**屏幕上，选择**是**，然后选择要上传的本地目录。

1. 出现提示时，确认上传以开始构建和上传所选目录。

1. 上传状态显示在 VS Code 中，当上传过程完成时，系统会通知您。

## 将您的 Lambda 函数转换为项目 AWS SAM
<a name="lambda-sam"></a>

要将您的 Lambda 函数转换为 AWS SAM 堆栈，请完成以下步骤。

**警告**  
目前，将 Lambda 函数转换为 AWS SAM 项目时，仅支持部分资源。要在转换后找到任何缺失的资源，请查看 Lambda 控制台并将其手动添加到您的 AWS SAM 模板中。有关支持和不支持的资源的更多详细信息，请参阅《AWS CloudFormation 开发人员指南》**中的[资源类型支持](https://docs.aws.amazon.com//AWSCloudFormation/latest/UserGuide/resource-import-supported-resources.html)主题。

1. 在 AWS 工具包中，展开 AWS 资源管理器。

1. 在 AWS 资源管理器中，使用要转换为项目的 Lambda 函数扩展 AWS 区域。 AWS SAM 

1.  AWS 在该区域中，展开 Lambda，然后浏览要转换为堆栈的函数。 AWS SAM 

1. 在 Lambda 函数旁边的快捷菜单中，选择**转换为 SAM 应用程序**图标以浏览您的本地文件系统并为新 AWS SAM 项目指定位置。

1. 指定位置后， AWS 工具包开始将您的 Lambda 函数转换为 AWS SAM 项目，VS Code 会提供有关流程状态的更新。
**注意**  
此过程可能需要几分钟时间。

1. 当 VS Code 显示提示时，输入堆栈名称，然后按 **Enter** 键继续。

1. VS Code 会继续更新您的项目状态，然后在流程完成时通知您，并将您的新 AWS SAM 项目作为 VS Code 工作区打开。

# AWS Lambda console 到 IDE
<a name="lambda-console-ide"></a>

t AWS Lambda console o IDE 功能允许您将 AWS Lambda 函数从下载到 VS Code AWS Lambda console 中。在 VS Code 中使用您的 Lambda 函数可以访问其他本地开发选项，例如 AWS Serverless Application Model ()AWS SAM和。 AWS Cloud Development Kit (AWS CDK)

有关的更多信息 AWS Lambda，请参阅《[AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)开发人员指南》。要开始使用 AWS 工具包中的 Lambda 函数，请参阅本用户指南中的[使用 AWS Lambda 函数](https://docs.aws.amazon.com//toolkit-for-vscode/latest/userguide/remote-lambda.html)主题。以下各节介绍了如何将工作流从 Lambda 控制台移至 VS Code。*有关将 Lambda 函数从 Lambda 控制台移至 VS Code 的详细信息（包括如何开始使用 Lambda 控制台），请参阅《AWS Lambda 开发人员指南》*中的[使用 VS Code 在本地开发 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac-local-development.html)主题。

## 从控制台转向本地开发
<a name="w2aac17c43c13b7"></a>

要在 VS Code 中从 Lambda 控制台打开 Lambda 函数，请完成以下步骤：

1. 在 Web 浏览器中打开 [Lambda 控制台](https://console.aws.amazon.com/lambda)。

1. 在 Lambda 控制台中，选择要在 VS Code 中打开的函数。

1. 在函数视图中，导航到**代码源**选项卡。

1. 在**代码源**选项卡中，选择**在 VS Code 中打开**。

## 在 VS Code 中使用 Lambda 函数
<a name="w2aac17c43c13b9"></a>

当 Lambda 函数通过 Lambda 控制台在 VS Code 中打开时：
+ VS Code 会在本地计算机上自动启动。
+ Lambda 函数作为 VS Code 工作区打开。
+ Lambda `handler file` 在 VS Code 编辑器中打开。
**注意**  
如果工作区中没有正确配置的 `handler file`，则不会在 VS Code 编辑器中打开任何文件。

通过 Lambda 控制台在 VS Code 中打开 Lambda 函数后，您就可以访问所有现有 Too AWS lkit Lambda 功能，包括使用完全语言支持编辑函数代码、本地测试、远程调试、部署支持和依赖项管理。有关该 AWS 工具包支持的 Lambda 功能的更多信息，请参阅本用户指南中的[AWS Lambda](https://docs.aws.amazon.com//toolkit-for-vscode/latest/userguide/building-lambda.html)服务目录。

# AWS Lambda 有 LocalStack 支撑
<a name="lambda-localstack"></a>

在中的 LocalStack 支持下构建、测试和调试您的无服务器应用程序。 AWS Toolkit for Visual Studio Code LocalStack 是一款 AWS 云端仿真器，允许对无服务器应用程序进行本地测试。

有关的其他信息 AWS Lambda，请参阅《[AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)*开发人员指南》*。要了解更多信息 LocalStack，请访问他们的网站[LocalStack](https://www.localstack.cloud/)。

## 先决条件
<a name="prereq"></a>

 以下是在 VS Code LocalStack 中使用的先决条件。

**注意**  
 LocalStack CLI 是在安装过程中安装的，但如果您更喜欢其他版本的 LocalStack CLI，则最低要求版本为 *4.8.0*。
+ 需要一个 LocalStack Web 应用程序帐户才能访问免费和付费 LocalStack 套餐的所有可用功能。 LocalStack 社区版无需账号即可使用。
+ 需要 LocalStack 在 VS Code 中使用 Docker。有关 Docker LocalStack 要求的更多信息，请参阅文档中的 LocalStack [Docker 镜像](https://docs.localstack.cloud/aws/capabilities/config/docker-images/)主题。 LocalStack 
+ **推荐：** AWS Command Line Interface (AWS CLI) 可帮助您在模拟云环境中使用服务。

## 正在安装 LocalStack
<a name="install"></a>

 要安装 LocalStack 免费和付费分层版本，请完成以下步骤。

**注意**  
有关如何设置 LocalStack 社区版的说明，请参阅本主题*设置 LocalStack*部分中的*LocalStack社区*内容。

1. 在 AWS 工具包中，展开 “**应用程序生成器**” 资源管理器。

1. 选择**打开演练**按钮，在 VS Code 编辑器中打开**开始构建应用程序**演练选项卡。

1. 在演练中，选择 “**安装**” LocalStack 以启动 VS Code 中的 LocalStack 安装过程。

## 设置 LocalStack
<a name="setup"></a>

安装 VS Code LocalStack 扩展程序后，在需要安装时，您可能会看到以下指示器之一：
+ 默认情况下，在 IDE 左下角的 VS Code 状态栏中， LocalStack 状态为红色。
+ VS Code 会提示你进行设置 LocalStack。

有两种类型的设置和配置 LocalStack，具体取决于 LocalStack 你使用的是哪个版本。以下选项卡部分描述了每个 LocalStack 设置过程。

**注意**  
LocalStack 的免费和付费套餐版本需要身份验证令牌。 LocalStack有关 LocalStack 定价的具体信息，请参阅他们的 [“选择您的套餐](https://www.localstack.cloud/pricing)” 定价指南。

### LocalStack 免费和付费等级
<a name="free-paid"></a>

有两种设置方式 LocalStack。
+ 从 VS Code **安装 LocalStack 到入门**提示中，选择**设置**按钮。
+ 从 VS Code 状态栏中，选择 LocalStack 状态图标** LocalStack 以打开安装程序开始**提示符，然后选择**设置**按钮。

在设置过程中，系统将执行以下步骤：

1. 安装 C LocalStack LI。

1. 检查您是否有 LocalStack 账户。

1. 如果您有 LocalStack 帐户，系统会引导您在默认的 Web 浏览器中完成身份验证过程。同样，如果您没有 LocalStack 帐户，系统会在身份验证过程之前指导您完成帐户设置。

设置完成后 LocalStack ，VS Code LocalStack 状态栏中的状态会更新。

**注意**  
如果您尚未为创建 AWS 配置文件 LocalStack，则在 LocalStack 设置过程中会自动为您创建一个新的配置文件。

### LocalStack 社区
<a name="community"></a>

的 LocalStack 社区版可以免费使用，不需要您注册帐户，它使用不需要许可证的 Docker 镜像运行。有关 LocalStack 社区版的更多详细信息，请参阅[LocalStack 社区图片](https://docs.localstack.cloud/references/docker-images/)文档。以下各节介绍在 VS Code 中使用 LocalStack 社区版所需的先决条件和基本设置。

**启动新实例**

 要启动新的 LocalStack 社区实例，请完成以下步骤。

**注意**  
以下示例在端口 4566 LocalStack 上启动一个容器实例。如果指定不同的端口值，则必须更新在*配置 AWS CLI 和 AWS 工具包*部分的过程中指定的端口值。

1. 从 VS Code 中打开 VS Code 终端（按 **ctrl \$1 `(backtick)**）。

1. 在终端窗口中输入以下内容。

   **Mac：**

   ```
   docker run -d --name localstack_main \
   >> -p 4566:4566 \
   >> -v /var/run/docker.sock:/var/run/docker.sock \
   >> localstack/localstack
   ```

   **Windows：**

   ```
   docker run -d --name localstack_main `
   >> -p 4566:4566 `
   >> -v /var/run/docker.sock:/var/run/docker.sock `
   >> localstack/localstack
   ```

1. 当流程完成后，终端会更新您的 Docker 实例的状态。

的这个容器化实例 LocalStack 允许您访问您在下载过程中指定的 AWS 服务。

**为 LocalStack 和 Docker 配置 CLI。**

 要在 Docker LocalStack 中配置要使用的 AWS CLI 和 AWS Toolkit，请完成以下步骤来设置新的配置文件：

1. 从 VS Code 中打开 VS Code 终端（按 **ctrl \$1 `(backtick)**）。

1. 在终端窗口中输入以下内容。

   ```
   ~/.aws/credentials
   [localstack]
   aws_access_key_id = test
   aws_secret_access_key = test
   ~/.aws/config
   [profile localstack]
   region = us-east-1
   output = json
   endpoint_url = http://localhost:4566 [default localstack endpoint]
   ```

1.  AWS Toolkit 会检测您的 LocalStack 个人资料并更新连接状态菜单。

设置完成后，从状态栏的 LocalStack 配置 AWS 文件部分选择您的个人资料后，您的 LocalStack 资源便会在资源 AWS 管理器中可见。此外，您可以在 VS Code 终端的 “**输出**” 选项卡中查看 LocalStack 日志。

## 从 LocalStack VS 代码开始
<a name="w2aac17c43c17c13"></a>

你可以开始 LocalStack 使用以下任何一种方法：

**LocalStack 从 VS 代码状态栏开始**

1. 在 VS Code 中，导航到状态栏，然后选择 LocalStack “**开始**” 按钮启动 LocalStack。

1. 成功启动后，VS Code 状态栏会 LocalStack 更新。

**LocalStack 从 VS Code **命令面板**开始**

1. 在 VS Code 中，按下 **Cmd \$1 Shift \$1 P**（Mac）或 **Control \$1 Shift \$1 P**（Windows）打开**命令面板**。

1. 在**命令面板**的搜索栏中输入 **Start LocalStack**，并在结果中列表中选择它。

1. 成功启动后，VS Code 状态栏会 LocalStack 更新。

**LocalStack 从 VS Code 终端开始**

1. 从 VS Code 中打开 VS Code 终端（按 **ctrl \$1 `(backtick)**）。

1. 在 VS Code 终端中输入 **localstack start** CLI 命令。

1. 成功启动后，VS Code 状态栏会 LocalStack 更新。

## 构建示例无服务器应用程序
<a name="serverless"></a>

 要开始 LocalStack 在 VS Code 中使用，您需要一个示例无服务器应用程序。如果您的 AWS 账户中已有应用程序，则可以使用将其部署到本地， LocalStack 也可以使用 AWS Serverless Land 创建新应用程序。

如需了解在 AWS Toolkit 中使用 Serverless Land 创建应用程序的更多信息，请参阅本用户指南中的[使用 AWS Serverless Land](https://docs.aws.amazon.com//toolkit-for-vscode/latest/userguide/serverlessland-overview.html) 主题。有关 Serverless Land 的详细信息，请参阅 [Serverless Land](https://serverlessland.com/) Web 应用程序主登录页面。

## 使用测试和调试 Lambda 函数 LocalStack
<a name="test-debug"></a>

在 LocalStack VS Code 扩展中测试和调试 Lambda 函数与使用部署到云端的 AWS 函数类似。主要区别在于，您的 AWS Toolkit 实例必须使用您的 LocalStack 账户进行身份验证才能部署和调试函数 LocalStack。

**注意**  
本节中描述的测试和调试功能不适用于 LocalStack 社区版。  
要 LocalStack 在 VS Code 中使用，请在 AWS 工具包中连接到您的 LocalStack 个人资料。当您的 LocalStack 个人资料处于活动状态时，VS Code 状态栏会显示 **AWS：带复选标记的 profile: localstack（自定义端点）**。

有关在 AWS 工具包中使用 Lambda 函数的详细信息，请参阅本用户指南中的[使用 AWS Lambda 函数](https://docs.aws.amazon.com//toolkit-for-vscode/latest/userguide/remote-lambda.html)主题。

# AWS Lambda 远程调试
<a name="lambda-remote-debug"></a>

 AWS Toolkit for Visual Studio Code 使您可以直接在 VS Code 中调试在云中运行的 AWS Lambda 函数。通过 AWS Lambda 远程调试，您可以检查正在运行的函数、设置断点、检查变量和逐步调试，而无需修改其现有开发工作流程。

以下各部分介绍如何在 AWS Toolkit for Visual Studio Code中使用 Lambda 远程调试。

## Lambda 远程调试的工作原理
<a name="w2aac17c43c19b7"></a>

该 AWS 工具包支持远程调试，方法是使用额外的 Lambda 调试层临时修改您的 Lambda 函数，并将 Lambda 调用超时限制延长至 900 秒。通过 AWS IoT 安全隧道，您的本地调试器会与 Lambda 运行时环境之间建立一条安全连接。通过这条连接，您可以使用本地代码中的断点，对远程运行的函数进行逐步调试。调试会话结束后，所有临时修改都会被自动恢复到原始设置。

## 开始使用
<a name="w2aac17c43c19b9"></a>

### 支持的运行时
<a name="w2aac17c43c19b9b3"></a>

Lambda 远程调试支持以下运行时：
+ Python（Amazon Linux 2023）
+ Java
+ Typescript/JavaScript/Node.js（亚马逊 Linux 2023）

**注意**  
Lambda 远程调试不支持 Lambda 托管实例和 OCI 图像函数类型。

### 先决条件
<a name="w2aac17c43c19b9b5"></a>

在您开始之前，必须满足以下先决条件。
+ 您必须在 AWS Toolkit 中配置有效的 AWS 凭据。有关安装 AWS Toolkit 和配置凭据的更多详细信息，请参阅本用户指南中的[入门](https://docs.aws.amazon.com//toolkit-for-vscode/latest/userguide/setting-up.html)主题。
+ Lambda 函数已部署到您的 AWS 账户。有关部署 Lambda 函数的详细信息，请参阅《AWS Lambda开发人员指南》**中的[创建第一个 Lambda 函数](https://docs.aws.amazon.com//lambda/latest/dg/getting-started.html)主题。
+ 您必须拥有相应的 AWS Identity and Access Management (IAM) 策略和权限才能调试您的函数。有关 Lambda 权限的更多信息，请参阅《AWS Lambda开发人员指南》**中[适用于 AWS Lambda的AWS 托管式策略](https://docs.aws.amazon.com//lambda/latest/dg/security-iam-awsmanpol.html)主题。以下是一个示例策略，包含在 AWS Toolkit 中使用 Lambda 远程调试所需的最低权限。
**注意**  
远程调试是通过 AWS AWS IoT 安全隧道启用的。这可让您的本地调试器与 Lambda 运行时环境建立安全连接。

  ```
  {
    "Version": "2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lambda:ListFunctions",
          "lambda:GetFunction",
          "lambda:GetFunctionConfiguration",
          "lambda:GetLayerVersion",
          "lambda:UpdateFunctionConfiguration",
          "lambda:InvokeFunction",
          "lambda:PublishVersion",
          "lambda:DeleteFunction",
          "iot:OpenTunnel",
          "iot:RotateTunnelAccessToken",
          "iot:ListTunnels"
        ],
        "Resource": "*"
      }
    ]
  }
  ```

## 访问 Lambda 远程调试
<a name="w2aac17c43c19c11"></a>

在 AWS 工具包中访问 Lambda 远程调试有两种主要路径： AWS 资源管理器或应用程序生成器资源管理器。在 AWS 资源管理器中，您可以通过节点访问 Lambda 远程调试。 AWS Lambda 在 Application Builder 浏览器中，您可以通过本地 AWS SAM 项目访问 Lambda 远程调试。

**从资源管理器访问 Lambda 远程调试 AWS**

1. 在 VS Code 中，打开 AWS 工具包扩展。

1. 在 AWS 工具包中，展开 AWS 资源管理器。

1. 在浏览器中，展开 **Lambda** 节点。

1. 找到您想调试的函数，然后在右键菜单中选择**远程调用**图标，以打开**远程调用配置**界面。

**从 Application Builder 浏览器访问 Lambda 远程调试。**

1. 在 VS Code 中，打开 AWS 工具包扩展。

1. 在 AWS 工具包中，展开应用程序生成器资源管理器。

1. 在浏览器中，展开包含您想调试的 Lambda 项目的 `AWS SAM` 项目。

1. 展开您想调试的已部署 `Lambda` 函数。

1. 找到该函数的 remote 选项，然后在右键菜单中选择**远程调用**图标，以打开**远程调用配置**界面。

## 使用 Lambda 远程调试
<a name="w2aac17c43c19c13"></a>

以下各部分介绍如何在 AWS Toolkit for Visual Studio Code中使用 Lambda 远程调试。

**注意**  
Lambda 函数最多支持 5 个层，并且函数代码和所有附加层的总大小不得超过 250MB。Lambda 远程调试需要至少保留 1 个空闲层才能运行。

### 设置调试会话
<a name="w2aac17c43c19c13b7"></a>

在开始之前，请按照以下步骤配置您的调试会话。

1. 通过完成前一节中的 “从资源管理器*访问 Lambda 远程调试” 或 “从应用程序生成 AWS 器资源管理器**访问 Lambda 远程调试”* 过程，打开远程调**用配置**菜单。

1. 在**远程调用配置**菜单中，选中**远程调试**复选框以显示远程调试属性。

1. 指定您的本地处理程序文件的**本地根路径**。
**注意**  
本地根路径指的是与您已部署的 Lambda 函数相对应的本地源代码位置。如果您是从 Application Builder 浏览器中的已部署函数开始操作，本地根路径会自动检测。  
如果您在本地没有保存源代码，选择**下载远程代码**按钮来获取 Lambda 函数的源代码。这将在 VS Code 编辑器中打开您的 `handler file`。

1. 在**有效载荷**部分，指定您的测试事件数据的来源。

### 设置断点并调试
<a name="w2aac17c43c19c13b9"></a>

按以下步骤设置断点并开始调试。

1. 在 VS Code 编辑器中的 `handler file` 文件，单击行号旁的边距区域，即可在需要暂停调试的位置设置断点。

1. 设置好断点后，返回**远程调用配置**菜单，确认您的设置是正确的，然后选择**远程调用**按钮开始调试。

1.  AWS Toolkit 使用调试功能更新您的 Lambda 函数，为调试会话建立安全隧道，使用指定的有效负载调用您的函数，然后在遇到断点时暂停该进程。

1. 在断点暂停时，使用 **RUN AND DEBUG** 面板查看 **VARIABLES**、**CALL STACK** 和 **BREAKPOINTS**。

### 更新并测试您的函数
<a name="w2aac17c43c19c13c11"></a>

如需修改代码并通过快速部署测试变更，请按以下步骤执行操作。

1. 在调试会话仍处于活动状态时，在 VS Code 编辑器中修改您的 `handler file`。

1. 保存您的更改（**Command\$1S on macOS**，**Ctrl\$1S on Windows**）

1. 出现提示时，确认您希望继续部署这些更改。该 AWS 工具包将使用修改后的代码更新您的 Lambda 函数。

1. 设置新的断点，然后再次选择**远程调用**按钮，即可继续调试并测试您的变更。
**注意**  
 或者，您可以在 VS Code 调试控制中取消选中**附加调试器**选项，然后选择**远程调用**按钮，让函数在不调试的情况下运行。

### 结束调试会话
<a name="w2aac17c43c19c13c13"></a>

以下任一操作都会结束您的远程调试会话，并从项目中移除调试层。
+ 在**远程调用配置界面**选择**移除调试设置**选项。
+ 在 VS Code 调试控制栏中选择**断开连接**图标。
+ 在 VS Code 编辑器中关闭 `handler file`。

**注意**  
记录以下内容：  
Lambda 调试层会在 60 秒处于活动状态后自动移除。这个计时会在上一次调用完成时开始。
如果您在调试过程中对 infrastructure-as-code (IaC) 托管 (AWS SAM,, AWS CDK, Terraform) 函数进行了代码更改，请将其保存到本地项目中，并考虑更新源代码控制存储库。未保存的更改会在 IaC 函数重新部署时被覆盖。
如果您仅出于调试目的进行了临时更改，则可能需要从源代码控制中重新部署函数，以确保其与生产环境中的代码保持一致。

### 使用源映 TypeScript 射调试 Lambda 函数
<a name="typescript-source-maps"></a>

以下各节介绍如何使用源映射调试 TypeScript Lambda 函数。

#### 先决条件
<a name="w2aac17c43c19c13c15b5"></a>

要调试您的 TypeScript Lambda 函数，必须满足以下先决条件。
+  TypeScript 必须在启用源映射选项的情况下进行编译。有关更多信息，请参阅 VS Code 文档中的[JavaScript 源映射支持](https://code.visualstudio.com/docs/typescript/typescript-debugging#_javascript-source-map-support)主题。
+ 不支持内联源地图。必须使用单独`.js.map`的文件来存储源地图。

#### 配置
<a name="w2aac17c43c19c13c15b7"></a>

要为 AWS 工具包中的 Lambda 函数配置 L TypeScript ambda 远程调试，请完成以下步骤。

1. 在 AWS 工具包中，展开 AWS 资源管理器。

1. 在浏览器中，展开 **Lambda** 节点。

1. 导航到要为其配置的功能 TypeScript，然后从上下文菜单中选择 “**远程调用**” 图标以打开 “**远程调用” 配置**屏幕。

1. 选中**远程调试**复选框以启用远程调试。

1. 通过指向包含 `TypeScript handler file` 的目录来配置您的**本地根路径**。
**注意**  
`TypeScript handler file` 是您设置调试断点的位置。

1. 展开**远程调试附加配置**设置。

1. 选中**源映射**复选框来启用源映射。

1. 将**输出文件**字段设置为您的 Lambda 函数副本所在的本地目录。  
**Example**  

   如果 `app.js` 和 `app.map` 位于 `.aws-sam/build/HelloWorldFunction` 中，则将**输出文件**位置为 `/Users/user/project/aws-sam/build/HelloWorldFunction/*`。
**注意**  
**输出文件**路径应为绝对路径。  
对于 AWS SAM 和 AWS CDK 项目，该 AWS 工具包支持自动源映射检测。如果将这些项目的 Ou **t files** 字段留空，则该工具包将自动尝试检测源地图的位置。

1. 如果您对设置感到满意，请选择 “**远程调用**” 按钮开始调试您的 TypeScript 函数。

## 故障排除与高级使用案例
<a name="troubleshooting"></a>

如果您的调试会话失败，请按以下步骤开始故障排除：

1. 将 AWS 工具包更新到最新版本。

1. 关闭**远程调用配置** Web 视图并重新打开，以刷新 Web 视图。

1. 完全关闭 VS Code 后再重新打开它。

1. 打开 VS Code 命令面板，输入命令 **AWS: Reset Lambda Remote Debugging Snapshot**，在结果中选择它，以重置 Lambda 远程调试快照。

1. 如果您无法解决问题，请向 Issues 提交[AWS Toolkit for Visual Studio Code GitHub问题](https://github.com/aws/aws-toolkit-vscode/issues)。

### 高级使用案例：代码签名配置
<a name="troubleshooting-code-signing-configuration"></a>

远程调试需要向您的 Lambda 函数附加调试层。如果您的函数启用并强制执行了代码签名配置，则 AWS Toolkit 无法自动将调试层附加到您的函数。

您可以通过以下两种方式解决代码签名配置问题。
+ 暂时移除代码签名。
+ 使用已签名的调试层。

#### 暂时移除代码签名。
<a name="troubleshooting-code-signing-configuration-temp-remove"></a>

提供设置 `UntrustedArtifactOnDeployment : Warn` 更新代码签名配置，在调试过程结束后再将其重置回 `Enforced`。

有关更多信息，请参阅 *AWS Lambda API [UpdateCodeSigningConfig](https://docs.aws.amazon.com//lambda/latest/api/API_UpdateCodeSigningConfig.html)参考中的参考资料*。

#### 使用已签名的调试层。
<a name="troubleshooting-code-signing-configuration-signed-debug-layer"></a>

1. 在 AWS 工具包的 Lambda 远程调试中，展开**远程调试其他配置部分**。

1. 在**远程调试附加配置**部分中，从**层覆盖**字段复制您所在区域的层 ARN。

1. 从中 AWS CLI，使用以下命令下载图层版本`aws lambda get-layer-version-by-arn --arn layer-arn`，用您的图层 *ARN 替换 layer-arn*。有关如何下载已签名的调试层的详细说明，请参阅《*AWS CLI 命令*参考》中的 [get-layer-version-by-arn](https://docs.aws.amazon.com/cli/latest/reference/lambda/get-layer-version-by-arn.html) 参考。

1. 使用您的代码签名配置对该层进行签名，并将其发布到您的账户。有关签名和发布指南，请参阅《*AWS Serverless Application Model 开发人员指南*》中的[为您的 AWS SAM 应用程序设置代码签名](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/authoring-codesigning.html)主题。

1. 在已签名的层成功发布到您的账户后，返回 Lambda 远程调试的**远程调试附加配置**部分，然后**层覆盖**字段中输入新的层 ARN。完成后，Lambda 远程调试将使用您签名的调试层，而不再使用默认层。

### 高级用例：使用 SnapStart 或预配置并发调试函数
<a name="troubleshooting-snapstart-provisioned-concurrency"></a>

对于配置 SnapStart 或预配置并发的 Lambda 函数，发布新版本所需的时间要长得多。为了加快调试工作流程，您可以将 Lambda 远程调试配置为仅更新函数的`$LATEST`版本，而不是发布新版本。

1. 在**远程调用配置**屏幕上，展开**远程调试其他配置**设置。

1. 取消选择 “**发布版本**” 选项。

1. 现在，该 AWS 工具包将仅更新您的函数`$LATEST`版本并使用它进行调试。

**注意**  
使用`$LATEST`版本进行调试的副作用是，您应避免其他可能调用您的`$LATEST`版本的流量，以确保调试环境不受干扰。

### 支持的区域
<a name="troubleshooting-regions"></a>

当某个区域不支持远程调试时，会出现以下错误。

```
Region ${region} doesn't support remote debugging yet
```

以下是受支持的区域列表。
+ ap-east-1
+ ap-northeast-1
+ ap-northeast-2
+ ap-south-1
+ ap-southeast-1
+ ap-southeast-2
+ ca-central-1
+ eu-central-1
+ eu-north-1
+ eu-west-1
+ eu-west-2
+ eu-west-3
+ me-central-1
+ me-south-1
+ sa-east-1
+ us-east-1
+ us-east-2
+ us-west-1
+ us-west-2

### Lambda RequestEntityTooLargeException
<a name="troubleshooting-storage-limit"></a>

Lambda 函数最多支持 5 个层，并且函数代码和所有附加层的总大小不得超过 250MB。远程调试层的大小约为 40MB。如果您的函数包较大或已附加多个层，这可能会导致总大小超出限制。有关更多详细信息，请参阅《*AWS Lambda 开发者*指南》中的 [Lambda: InvalidParameterValueException 或 RequestEntityTooLargeException](https://docs.aws.amazon.com//lambda/latest/dg/troubleshooting-deployment.html#troubleshooting-deployment-InvalidParameterValueException1)主题部分。

以下列表介绍了排查并解决此错误的一些方法。
+ **减小函数大小**：优化函数的代码，移除不必要的依赖关系。
+ **移除未使用的层**：在调试期间临时移除非必要层。
+ **使用外部依赖项**：将较大的依赖项移至外部存储，例如 Amazon S3，并在运行时加载它们。

### Java 调试故障排
<a name="troubleshooting-java-debugging"></a>

要调试 Java Lambda 函数，您必须在本地安装与您的 Lambda 函数的运行时版本相匹配的 Java 版本。

例如，在调试 Java 25 函数时，必须在运行 AWS 工具包的本地环境中安装 Java 25。如果您尝试在本地安装了 Java 21 或更早版本的情况下调试 Java 25 函数，则远程调试将无法在您设置的断点处停止。

在开始调试会话之前，请确保您的本地 Java 版本与 Lambda 函数的运行时版本相匹配。

### 已超出 IoT 安全隧道配额
<a name="troubleshooting-tunnel-quota"></a>

以下是在 Lambda 远程调试中达到 AWS IoT 安全*隧道连接的每日限制时发生的隧道配额超出错误*的示例。

```
Error creating/reusing tunnel: LimitExceededException: Exceeded quota of Lambda debugging tunnels
```

AWS IoT 安全隧道连接具有以下配额：
+ 免费层的 IoT 安全隧道每天最多分配 10 个连接。
+ 每个隧道支持一个 VS Code 实例，最长 12 小时。
+ 配额适用于每个 AWS 账户、每天。

如果您遇到 AWS IoT 安全隧道错误，请等待每日配额重置或联系 AWS 支持部门申请提高配额限制。有关 AWS 支持联系人信息，请访问[AWS 支持联系人门户](https://aws.amazon.com/contact-us/)。*有关 AWS IoT 安全隧道的详细信息，请参阅《开发人员指南》中的[AWS IoT 安全隧道](https://docs.aws.amazon.com/iot/latest/developerguide/secure-tunneling.html)主题。AWS IoT *