

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

# 开始使用无服务器应用程序
<a name="sam-get-started"></a>

以下各节介绍如何开始 AWS Serverless Application 从 AWS Toolkit for Visual Studio Code、使用 AWS Serverless Application Model (AWS SAM) 和 CloudFormation 堆栈创建。

## 先决条件
<a name="serverless-apps-assumptions"></a>

在创建或使用之前 AWS Serverless Application，必须先满足以下先决条件。

**注意**  
以下操作可能需要您在更改完成之前退出或重新启动 VS Code。
+ 安装 AWS SAM 命令行界面 (CLI)。有关如何安装 AWS SAM CLI 的其他信息和说明，请参阅本*AWS Serverless Application Model 用户指南*[中的安装 AWS SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html) 主题。
+ 在您的 AWS 配置文件中，确定您的默认 AWS 区域。有关配置文件的更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)主题。
+ 安装语言 SDK 并配置工具链。有关如何配置工具链的更多信息， AWS Toolkit for Visual Studio Code 请参阅本用户指南中的[配置您的工具链](setup-toolchain.md)主题。
+ 从 VS Code Marketplace 安装 [YAML 语言支持扩展](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml)。这是 AWS SAM 模板文件可访问的 CodeLens 功能所必需的。有关的其他信息 CodeLens，请参阅 VS Code 文档中的[CodeLens](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#codelens-show-actionable-context-information-within-source-code)部分 

## 无服务器应用程序的 IAM 权限
<a name="serverless-apps-permissions"></a>

在 Toolkit for VS Code 中，您必须具有一个凭证配置文件，其中包含部署和运行无服务器应用程序所必需的 AWS Identity and Access Management （IAM）权限。您必须有权 read/write 访问以下服务： CloudFormation、IAM、Lambda、Amazon API Gateway、亚马逊简单存储服务 (Amazon S3) 和亚马逊弹性容器注册表 (Amazon ECR) Container Registry (Amazon ECR) Elastic Registry。

有关设置部署和运行无服务器应用程序所需的身份验证的更多信息，请参阅《AWS Serverless Application Model 开发人员指南》**中的 [管理资源访问和权限](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-permissions.html)。有关如何设置凭证的信息，请参阅本用户指南中的 [AWS IAM 证书](setup-credentials.md)。

## 创建新的无服务器应用程序（本地）
<a name="serverless-apps-create"></a>

此过程演示如何使用 AWS SAM Toolkit for VS Code 创建无服务器应用程序。此过程的输出是开发主机上的本地目录，其中包含一个示例无服务器应用程序，您可以构建、本地测试、修改该应用程序并将其部署到 AWS 云中。<a name="serverless-apps-create-proc"></a>

1. 要打开**命令面板**，请依次选择**视图**和**命令面板**，然后输入 **AWS**。

1. 选择 **AWS Toolkit 创建 Lambda SAM 应用程序**。  
![“Command Palette (命令调色板)”对话框。](http://docs.aws.amazon.com/zh_cn/toolkit-for-vscode/latest/userguide/images/sam-create-app-cmdlet-updated.png)
**注意**  
如果未安装 AWS SAM CLI，则在 VS Code 编辑器的右下角会出现错误。如果发生这种情况，请验证是否满足所有的 [假设和先决条件](#serverless-apps-assumptions)。

1. 为您的 AWS SAM 应用程序选择运行时。
**注意**  
如果您选择一个带有“（图像）”的运行时，则您的应用程序是 `Image` 型软件包。如果您选择一个不带有“（图像）”的运行时，则您的应用程序是 `Zip` 型。有关 `Image` 和 `Zip` 软件包类型差异的更多信息，请参阅 *AWS Lambda 开发人员指南*中的 [Lambda 部署软件包](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html)。

1. 根据您选择的运行时，您可能需要为 SAM 应用程序选择依赖项管理器和运行时架构。

------
#### [ Dependency Manager ]

   选择 **Gradle** 或 **Maven**。

**注意**  
这个构建自动化工具的选择仅适用于 Java 运行时。

------
#### [ Architecture ]

   选择 **x86\_64** 或 **arm64**。

   以下运行时可以选择在 ARM64基于模拟的环境中运行无服务器应用程序，而不是默认的基于 x86\_64 的环境：
   + nodejs12.x（ZIP 和图像）
   + nodejs14.x（ZIP 和图像）
   + python3.8（ZIP 和图像）
   + python3.9（ZIP 和图像）
   + python3.10（ZIP 和图像）
   + python3.11（ZIP 和图像）
   + python3.12（ZIP 和图像）
   + 带有 Gradle 的 java8.al2（ZIP 和图像）
   + 带有 Maven 的 java8.al2（仅限 ZIP）
   + 带有 Gradle 的 java11（ZIP 和图像）
   + 带有 Maven 的 java11（仅限 ZIP）

**重要**  
必须安装 AWS CLI 版本 1.33.0 或更高版本才能允许应用程序在 ARM64基于基础的环境中运行。有关更多信息，请参阅 [先决条件](setup-toolkit.md#setup-prereq)。

------

1. 为新项目选择一个位置。您可以使用现有工作区文件夹（如果已打开一个此类文件夹），**Select a different folder (选择已存在的其他文件夹)**，或创建新文件夹并将其选中。对于此示例，选择 **There are no workspace folders open (没有打开的工作区文件夹)** 以创建名为 `MY-SAM-APP` 的文件夹。

1. 输入新项目的名称。对于本示例，请使用 `my-sam-app-nodejs`。按下 **Enter** 键后，Toolkit for VS Code 需要几分钟才能创建项目。

创建项目后，应用程序将添加到当前工作区中。您应该看到它在 **Explorer** 窗口中列出。

## 打开无服务器应用程序（本地）
<a name="serverless-apps-open"></a>

要在本地开发主机上打开无服务器应用程序，请打开包含该应用程序的模板文件的文件夹。

1. 从**文件**中选择**打开文件夹…**。

1. 在**打开文件夹**对话框中，导航到要打开的无服务器应用程序文件夹。

1. 选择**选择文件夹**按钮。

当您打开应用程序的文件夹时，它会被添加到**资源管理器**窗口中。

## 从模板（本地）运行和调试无服务器应用程序
<a name="serverless-apps-debug"></a>

您可以使用 Toolkit for VS Code 配置如何调试无服务器应用程序，并在开发环境中本地运行它们。

您可以使用 VS Code [CodeLens](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#codelens-show-actionable-context-information-within-source-code)功能来识别符合条件的 Lambda 函数，从而开始配置调试行为。 CodeLens 启用与源代码的内容感知交互。有关确保您可以访问该 CodeLens 功能的信息，请查看本主题前[先决条件](#serverless-apps-assumptions)面的部分。

**注意**  
在此示例中，您将调试使用的一个应用程序 JavaScript。但是，您可以使用具有以下语言和运行时系统的 Toolkit for VS Code 调试功能：  
C\#：.NET Core 2.1, 3.1；.NET 5.0
JavaScript/TypeScript — Node.js 12。 *x*、14。 *x*
Python：3.6、3.7、3.8、3.9、3.10、3.11、3.12
Java：8、8.al2、11
Go：1.x
您的语言选择还会影响 CodeLens 检测符合条件的 Lambda 处理程序的方式。有关更多信息，请参阅 [直接通过代码运行和调试 Lambda 函数](serverless-apps-run-debug-no-template.md)。

在此流程中，您需要使用在本主题前面的 [创建新的无服务器应用程序（本地）](#serverless-apps-create) 部分中创建的示例应用程序。

1. 要在 VS Code 的文件资源管理器中查看应用程序文件，请依次选择**视图**和**资源管理器**。

1. 在应用程序文件夹（例如 *my-sample-app*）中，打开该`template.yaml`文件。
**注意**  
如果您使用的模板名称与之不同`template.yaml`，则该 CodeLens 指标不会自动在 YAML 文件中可用。这意味着您必须手动添加调试配置。

1. 在 `template.yaml` 的编辑器中，转到模板中定义无服务器资源的 `Resources` 部分。在本例中，这是类型 `AWS::Serverless::Function` 的 `HelloWorldFunction` 资源。

   在此资源的 CodeLens 指示器中，选择 “**添加调试配置**”。  
![使用template.yaml文件中的 CodeLens 指示器添加调试配置。](http://docs.aws.amazon.com/zh_cn/toolkit-for-vscode/latest/userguide/images/yaml_template_debug.png)

1. 在**命令面板**中，选择将运行您的 AWS SAM 应用程序的运行时系统。

1. 在 `launch.json` 文件的编辑器中，编辑或确认以下配置属性的值：
   + `"name"` – 输入一个易于阅读的名称，以显示在 **Run（运行）**视图中的 **Configuration（配置）**下拉字段中。
   + `"target"`— 确保该值为，`"template"`以便 AWS SAM 模板成为调试会话的入口点。
   + `"templatePath"` – 输入 `template.yaml` 文件的相对路径或绝对路径。
   + `"logicalId"`— 确保名称与 AWS SAM 模板的 “**资源**” 部分中指定的名称相匹配。在这种情况下，它是类型 `AWS::Serverless::Function` 的 `HelloWorldFunction`。  
![配置 launch.json 文件以进行基于模板的调试。](http://docs.aws.amazon.com/zh_cn/toolkit-for-vscode/latest/userguide/images/template_based_config_updated.png)

   有关 `launch.json` 文件中这些以及其他条目的更多信息，请参阅 [调试无服务器应用程序的配置选项](serverless-apps-run-debug-config-ref.md)。

1. 如果您对调试配置满意，请保存 `launch.json`。然后，选择**运行**视图旁边的“播放”按钮以启动调试。

   当调试会话启动时，**DEBUG CONSOLE（调试控制台）**面板显示调试输出，并显示 Lambda 函数返回的任何值。（调试 AWS SAM 应用程序时，**AWS Toolkit** 在**输出**面板中被选择作为**输出**通道。）

## 同步应用程序 AWS SAM
<a name="serverless-apps-deploy"></a>

 AWS Toolkit for Visual Studio Code 运行 AWS SAM CLI 命令`sam sync`将您的无服务器应用程序部署到。 AWS Cloud有关 AWS SAM 同步的其他信息，请参阅《*AWS Serverless Application Model 开发者指南》*中的 [AWS SAM CLI 命令参考](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-command-reference.html)主题

以下过程介绍如何通过 Toolkit for VS Code 将您的无服务器应用程序部署`sam sync`到。 AWS Cloud 

1. 在 VS Code 内的主菜单中，展开**视图**并选择**命令面板**，以打开**命令面板**。

1. 从**命令面板**中搜索 **AWS** 并选择**同步 SAM 应用程序**，以开始设置同步。  
![同步无服务器应用程序的命令。](http://docs.aws.amazon.com/zh_cn/toolkit-for-vscode/latest/userguide/images/samsync032023.png)

1. 选择要将您的无服务器应用程序同步到的 AWS 区域。

1. 选择要用于部署的 `template.yaml` 文件。

1. 选择现有的 Amazon S3 存储桶或输入新的 Amazon S3 存储桶名称，以便将您的应用程序部署到其中。
**重要**  
Amazon S3 存储桶包必须符合以下要求：  
存储桶必须位于您要同步到的区域中。
Amazon S3 存储桶名称在 Amazon S3 中的所有现有存储桶名称之间必须是全局唯一的。

1. 如果您的无服务器应用程序包含具有类型 `Image` 的函数，输入此部署可使用的 Amazon ECR 存储库的名称。存储库必须位于您要部署到的区域中。

1. 从之前的部署列表中选择部署堆栈，或者通过输入新的堆栈名称来创建新的部署堆栈。然后，继续操作以开始同步流程。
**注意**  
先前部署中使用的堆栈会按工作空间和区域召回。

1. 在同步流程期间，部署状态会在 VS Code 的**终端**选项卡中捕获。从“终端”选项卡验证同步是否成功，如果出现错误，您会收到通知。  
![部署无服务器应用程序时显示的错误弹出窗口。](http://docs.aws.amazon.com/zh_cn/toolkit-for-vscode/latest/userguide/images/sam-deploy-error.png)
**注意**  
有关同步的更多详细信息，可从**命令面板**访问 AWS Toolkit for Visual Studio Code 日志。

   要从命令面板访问您的 AWS Toolkit for Visual Studio Code 日志，请展开**视图**，选择**命令面板**，然后搜索**AWS: View AWS Toolkits Logs**并在列表中填充日志时将其选中。

一旦完成部署，您将看到 **AWS Explorer** 窗口中列出了您的应用程序。有关如何调用作为应用程序的一部分创建的 Lambda 函数的更多信息，请参阅本《用户指南》中的 [使用 AWS Lambda 函数](remote-lambda.md) 主题。

## 从中删除无服务器应用程序 AWS Cloud
<a name="serverless-apps-delete"></a>

删除无服务器应用程序涉及删除您之前部署到 AWS 云端的 CloudFormation 堆栈。请注意，此过程不会从本地主机中删除您的应用程序目录。

1. 打开 [AWS Explorer](aws-explorer.md)。

1. 在 **AWS Toolkit Explorer** 窗口中，展开包含您想要删除的已部署应用程序的区域，然后展开 **CloudFormation**。

1. 打开与要删除的无服务器应用程序相对应的 CloudFormation 堆栈名称的上下文（右键单击）菜单，然后选择**删除 CloudFormation 堆栈**。

1. 要确认删除已选择的堆栈，请选择**是**。

如果堆栈删除成功，Toolkit for VS Code 将从 **AWS Explorer** 中的 CloudFormation 列表中移除堆栈名称。