

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

# 入门 AWS SAM
<a name="serverless-getting-started"></a>

首先， AWS SAM 请查看并完成本节中的主题。 [AWS SAM 先决条件](prerequisites.md)提供了有关设置 AWS 账户、创建 IAM 用户、创建密钥访问权限以及安装和配置的详细说明 AWS SAMCLI。完成先决条件后，您可以选择开发方法：
+ [安装 AWS SAM CLI](install-sam-cli.md)，该方法可在 Linux、Windows 和 macOS 操作系统上使用。
+ [使用 VS Code Toolkit 开始使用 S AWS AM](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/sam-get-started.html)，通过集成的调试和测试功能获得可视化开发体验。

安装完成后，你可以选择学习 AWS SAM Hello World 教程。按照本教程将引导您完成使用 AWS SAM创建基本无服务器应用程序的过程。完成本教程后，您就可以复习 [如何使用 AWS Serverless Application Model (AWS SAM)](chapter-using-sam.md) 中详述的概念了。

**Topics**
+ [

# AWS SAM 先决条件
](prerequisites.md)
+ [

# 安装 AWS SAM CLI
](install-sam-cli.md)
+ [

# 教程：使用以下命令部署 Hello World 应用程序 AWS SAM
](serverless-getting-started-hello-world.md)
+ [

# 将 Lambda 函数转换为应用程序 AWS SAM
](convert-lambda-to-sam.md)

# AWS SAM 先决条件
<a name="prerequisites"></a>

在安装和使用 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) 之前，请完成以下先决条件。

要使用 AWS SAMCLI，您需要满足以下条件：
+  AWS 账户、 AWS Identity and Access Management (IAM) 证书和 IAM 访问密钥对。
+ 用于配置 AWS 凭据的 AWS Command Line Interface (AWS CLI)。

**Topics**
+ [

## 第 1 步：注册一个 AWS 账户
](#prerequisites-sign-up)
+ [

## 第 2 步：创建 IAM 用户账户
](#prerequisites-create-user)
+ [

## 第 3 步：创建访问密钥 ID 和秘密访问密钥
](#prerequisites-create-keys)
+ [

## 步骤 4：安装 AWS CLI
](#prerequisites-install-cli)
+ [

## 步骤 5： AWS CLI 使用配置 AWS 凭证
](#prerequisites-configure-credentials)
+ [

## 第 6 步：（可选）安装适用于 VS Code 的 AWS 工具包
](#prerequisites-install-vscode)
+ [

## 后续步骤
](#prerequisites-next-steps)

## 第 1 步：注册一个 AWS 账户
<a name="prerequisites-sign-up"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**要注册 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

## 第 2 步：创建 IAM 用户账户
<a name="prerequisites-create-user"></a>

要创建管理员用户，请选择以下选项之一。


****  

| 选择一种方法来管理您的管理员 | 目标 | 方式 | 您也可以 | 
| --- | --- | --- | --- | 
| 在 IAM Identity Center 中 （推荐） | 使用短期凭证访问 AWS。这符合安全最佳实操。有关最佳实践的信息，请参阅《IAM 用户指南》**中的 [IAM 中的安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)。 | 有关说明，请参阅《AWS IAM Identity Center 用户指南》中的[入门](https://docs.aws.amazon.com//singlesignon/latest/userguide/getting-started.html)。 | 通过在《AWS Command Line Interface 用户指南[》 AWS IAM Identity Center中配置 AWS CLI 要使用的来](https://docs.aws.amazon.com//cli/latest/userguide/cli-configure-sso.html)配置编程访问权限。 | 
| 在 IAM 中 （不推荐使用） | 使用长期凭证访问 AWS。 | 按照《IAM 用户指南》中的[创建用于紧急访问的 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started-emergency-iam-user.html)中的说明进行操作。 | 按照《IAM 用户指南》中的[管理 IAM 用户的访问密钥](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html)，配置编程式访问。 | 

## 第 3 步：创建访问密钥 ID 和秘密访问密钥
<a name="prerequisites-create-keys"></a>

要进行 CLI 访问，您需要访问密钥 ID 和秘密访问密钥。如果可能，请使用临时凭证代替长期访问密钥。临时凭证包括访问密钥 ID、秘密访问密钥，以及一个指示凭证何时到期的安全令牌。有关更多信息，请参阅 *IAM 用户指南*中的将[临时证书与 AWS 资源配合使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)。

如果用户想在 AWS 外部进行交互，则需要编程访问权限 AWS 管理控制台。授予编程访问权限的方式取决于正在访问的用户类型 AWS。

要向用户授予编程式访问权限，请选择以下选项之一。


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证，签署对 AWS CLI AWS SDKs、或的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/prerequisites.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/prerequisites.html)  | 
| IAM | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 | 按照 IAM 用户指南中的将[临时证书与 AWS 资源配合使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/prerequisites.html)  | 

## 步骤 4：安装 AWS CLI
<a name="prerequisites-install-cli"></a>

 AWS CLI 是一款开源工具，可让您 AWS 服务 使用命令行外壳中的命令进行交互。 AWS CLI 对于诸如配置凭据之类的活动， AWS SAMCLI需要使用。要了解有关... 的更多信息 AWS CLI，请参阅[什么是 AWS Command Line Interface？](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) 在《*AWS Command Line Interface 用户指南》*中。

要安装 AWS CLI，请参阅*AWS Command Line Interface 用户指南 AWS CLI*中的[安装或更新最新版本](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)的。

## 步骤 5： AWS CLI 使用配置 AWS 凭证
<a name="prerequisites-configure-credentials"></a>

**要使用 IAM Identity Center 来配置凭证**
+ 要使用 IAM Identity Center [配置证书，请参阅使用 AWS 配置 SSO 向导配置您的个人资料](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html#cli-configure-sso-configure)。

**要使用配置凭证 AWS CLI**

1. 从命令行处运行 `aws configure` 命令。

1. 进行以下配置。选择每个链接以了解更多信息：

   1. [访问密钥 ID](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds)

   1. [秘密访问密钥](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds)

   1. [AWS 区域](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-region)

   1. [输出格式](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-format)

   以下示例显示了示例值。

   ```
   $ aws configure
   AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
   AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   Default region name [None]: us-west-2
   Default output format [None]: json
   ```

将此信息 AWS CLI 存储在`credentials`和文件中命名的*配置*`config`文件（设置集合）`default`中。这些文件位于主目录下的 `.aws` 文件中。默认情况下，当您运行未明确指定要使用的配置文件的 AWS CLI 命令时，将使用此配置文件中的信息。有关 `credentials` 文件的更多信息，请参阅*《AWS Command Line Interface 用户指南》*中的[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

有关配置凭证（例如使用现有配置和凭据文件）的更多信息，请参阅*《AWS Command Line Interface 用户指南》*中的[快速设置功能](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)。

## 第 6 步：（可选）安装适用于 VS Code 的 AWS 工具包
<a name="prerequisites-install-vscode"></a>

对于喜欢集成开发环境的开发者， AWS Toolkit for VS Code 为无服务器开发提供了强大的功能，包括可视化调试、CodeLens 集成和简化的部署工作流程。

**VS Code 开发的先决条件**
+ 系统上已安装 Visual Studio Code（版本 1.73.0 或更高版本）
+ VS Code 的 YAML 语言支持扩展

**安装适用于 VS Code 的 AWS Toolkit**

1. 打开 Visual Studio Code

1. 打开“扩展程序”视图（Ctrl\$1Shift\$1X 或 Cmd\$1Shift\$1X）

1. 搜索 “AWS 工具包”

1. 安装亚马逊 Web Services 的 “AWS 工具包” 扩展

1. 安装红帽的 “YAML” 扩展（SAM 模板 CodeLens 功能所必需的）

**在 SA AWS M 中使用 VS Code 的好处**
+ 可视化调试：设置断点并在本地逐步执行您的 Lambda 函数
+ CodeLens 集成：直接从 SAM 模板构建、部署和调用函数
+ 集成终端：无需离开编辑器即可访问 AWS SAM AWS CLI 命令
+ 模板验证：实时验证和 S IntelliSense AM 模板验证

有关在 VS Code 中配置 AWS 凭据的信息，请参阅《VS Code AWS 工具包用户指南》中的[设置凭据](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setup-credentials.html)。

## 后续步骤
<a name="prerequisites-next-steps"></a>
+ 现在，您可以安装 AWS SAMCLI并开始使用了 AWS SAM。要安装 AWS SAMCLI，请参阅[安装 AWS SAM CLI](install-sam-cli.md)。
+ 要为无服务器开发设置 Visual Studio Code，请参阅[为 VS Code 设置 AWS 工具包](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/setting-up.html)。

# 安装 AWS SAM CLI
<a name="install-sam-cli"></a>

按照中的说明在支持的操作系统上安装最新版本的 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) [步骤 4：安装 AWS CLI](prerequisites.md#prerequisites-install-cli)。

有关管理当前安装版本的信息 AWS SAMCLI，包括如何升级、卸载或管理夜间版本，请参阅[管理 AWS SAM CLI 版本](manage-sam-cli-versions.md)。

**这是您第一次安装 AWS SAM CLI？**  
在继续操作之前，请完成上一节中的所有[先决条件](prerequisites.md)。这包括：  
注册一个 AWS 账户。
设置安全访问权限 AWS。
创建访问密钥 ID 和秘密访问密钥。
正在安装 AWS CLI.
配置 AWS 凭证。

**Topics**
+ [

## 安装 AWS SAM CLI
](#install-sam-cli-instructions)
+ [

## 排查 安装错误
](#sam-cli-troubleshoot-install)
+ [

## 后续步骤
](#install-sam-cli-next-steps)
+ [

# 可选：验证 AWS SAMCLI 安装程序的完整性
](reference-sam-cli-install-verify.md)

## 安装 AWS SAM CLI
<a name="install-sam-cli-instructions"></a>

**注意**  
从 2023 年 9 月起， AWS 将不再维护 AWS SAMCLI (`aws/tap/aws-sam-cli`) 的 AWS 托管Homebrew安装程序。如果您Homebrew使用安装和管理 AWS SAMCLI，请参阅以下选项：  
要继续使用 Homebrew，您可以使用社区托管的安装程序。有关更多信息，请参阅 [使用 Homebrew 管理 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-homebrew)。
我们建议使用本页中记录的第一方安装方法之一。在使用其中一种方法之前，请参阅 [从 Homebrew 切换](manage-sam-cli-versions.md#manage-sam-cli-versions-switch)。
有关更多详细信息，请参阅 [Release version: 1.121.0](https://github.com/aws/aws-sam-cli/releases)。

 要安装 AWS SAMCLI，请按照操作系统的说明进行操作。

### Linux
<a name="install-sam-cli-instructions-linux"></a>

------
#### [ x86\$164 - command line installer ]

1. 将 [AWS SAM CLI .zip 文件](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip)下载到所选目录。

1. **（可选）**您可以在安装前验证安装程序的完整性。有关说明，请参阅[可选：验证 AWS SAMCLI 安装程序的完整性](reference-sam-cli-install-verify.md)。

1. 将安装文件解压缩到您选择的目录中。以下是使用 `sam-installation` 子目录的示例。
**注意**  
如果您的操作系统没有内置的 **unzip** 命令，请使用等效命令。

   ```
   $ unzip aws-sam-cli-linux-x86_64.zip -d sam-installation
   ```

1. 通过运行 `install` 可执行文件安装 AWS SAM CLI。该可执行文件位于上一步骤中使用的目录中。以下是使用 `sam-installation` 子目录的示例：

   ```
   $ sudo ./sam-installation/install
   ```

1. 验证安装。

   ```
   $ sam --version
   ```

   要确认安装成功，您应该会看到一个输出，该输出将以下括号内的文本替换为最新的可用版本：

   ```
    SAM CLI, <latest version>
   ```

------
#### [ arm64 - command line installer ]

1. 将 [AWS SAM CLI .zip 文件](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-arm64.zip)下载到所选目录。

1. **（可选）**您可以在安装前验证安装程序的完整性。有关说明，请参阅[可选：验证 AWS SAMCLI 安装程序的完整性](reference-sam-cli-install-verify.md)。

1. 将安装文件解压缩到您选择的目录中。以下是使用 `sam-installation` 子目录的示例。
**注意**  
如果您的操作系统没有内置的 **unzip** 命令，请使用等效命令。

   ```
   $ unzip aws-sam-cli-linux-arm64.zip -d sam-installation
   ```

1. 通过运行 `install` 可执行文件安装 AWS SAM CLI。该可执行文件位于上一步骤中使用的目录中。以下是使用 `sam-installation` 子目录的示例：

   ```
   $ sudo ./sam-installation/install
   ```

1. 验证安装。

   ```
   $ sam --version
   ```

   要确认安装成功，您应该会看到如下所示的输出，但其中括号内的文本将替换为最新的 SAM CLI 版本：

   ```
    SAM CLI, <latest version>
   ```

------

### macOS
<a name="install-sam-cli-instructions-macos"></a>

#### 安装步骤
<a name="install-sam-cli-instructions-macos-steps"></a>

使用软件包安装程序安装 AWS SAMCLI。此外，软件包安装程序提供两种安装方法让您选择：**GUI** 和**命令行**。您可以为**所有用户**安装，也可以只为**当前用户**安装。要为所有用户安装，需要获得超级用户授权。

**注意**  
AWS SAM CLI 不支持 macOS 13.x 之前的 macOS 版本。升级到支持的 macOS 版本或使用安装 CL AWS SAM I。Homebrew

------
#### [ GUI - All users ]

**下载软件包安装程序并安装 AWS SAMCLI**
**注意**  
 如果您之前通过 Homebrew 或 pip 安装了 AWS SAM CLI，则需要先将其卸载。有关说明，请参阅[卸载 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  将 macOS `pkg` 下载到您选择的目录：
   +  **对于运行英特尔处理器的 Mac，请选择 x86** [\$164 —-x86\$164.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **[对于运行 Apple 芯片的 Mac，请选择 arm64 —-arm64.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg)** 
**注意**  
（可选）您可以选择在安装前验证安装程序的完整性。有关说明，请参阅[可选：验证 AWS SAMCLI 安装程序的完整性](reference-sam-cli-install-verify.md)。

1.  运行您下载的文件，然后按照屏幕上的说明继续完成**简介**、**自述**和**许可**步骤。

1.  在**目标选择**中，选择**为这台计算机的所有用户安装**。

1.  在**安装类型**中，选择 AWS SAM CLI 要安装的位置，然后按下**安装**。推荐的默认位置是 `/usr/local/aws-sam-cli`。
**注意**  
 要使用 **sam** 命令调用 AWS SAM CLI，安装程序会自动在 `/usr/local/bin/sam` 和 `/usr/local/aws-sam-cli/sam` 或您选择的安装文件夹之间创建符号链接。

1.  AWS SAM CLI 将进行安装，系统将显示**安装成功**消息。按下**关闭**。

**验证安装是否成功**
+  通过运行以下命令验证 AWS SAM CLI 是否已正确安装以及符号链接是否已配置：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------
#### [ GUI - Current user ]

**下载并安装 AWS SAMCLI**
**注意**  
 如果您之前通过 Homebrew 或 pip 安装了 AWS SAM CLI，则需要先将其卸载。有关说明，请参阅[卸载 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  将 macOS `pkg` 下载到您选择的目录：
   +  **对于运行英特尔处理器的 Mac，请选择 x86** [\$164 —-x86\$164.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **[对于运行 Apple 芯片的 Mac，请选择 arm64 —-arm64.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg)** 
**注意**  
（可选）您可以选择在安装前验证安装程序的完整性。有关说明，请参阅[可选：验证 AWS SAMCLI 安装程序的完整性](reference-sam-cli-install-verify.md)。

1.  运行您下载的文件，然后按照屏幕上的说明继续完成**简介**、**自述**和**许可**步骤。

1.  对于**目标选择**，选择**仅为我安装**。如果没有看到此选项，请转到下一步。

1.  对于**安装类型**，请执行以下操作：

   1. 选择 AWS SAM CLI 要安装的位置。默认位置是 `/usr/local/aws-sam-cli`。选择您拥有写入权限的位置。要更改安装位置，请选择**本地**并选择您的位置。完成后按下**继续**。

   1.  如果您在上一步中没有看到**仅为我安装**的选项，请选择**更改安装位置** > **仅为我安装**，然后按下**继续**。

   1.  按下**安装**。

1.  AWS SAM CLI 将进行安装，系统将显示**安装成功**消息。按下**关闭**。

**要创建符号链接**
+  要使用 **sam** 命令调用 AWS SAM CLI，您必须在 AWS SAM CLI 程序和您的 `$PATH` 之间手动创建符号链接。通过修改并运行以下命令来创建符号链接：

  ```
  $ sudo ln -s /path-to/aws-sam-cli/sam /path-to-symlink-directory/sam
  ```
  +  *sudo*— 如果您的用户具有写入权限`$PATH`，则**sudo**不是必需的。否则，**sudo** 是必需的。
  +  *path-to*— AWS SAMCLI 程序安装位置的路径。例如 `/Users/myUser/Desktop`。
  +  *path-to-symlink-directory*— 您的`$PATH`环境变量。默认位置是 `/usr/local/bin`。

**验证安装是否成功**
+  通过运行以下命令验证 AWS SAM CLI 是否已正确安装以及符号链接是否已配置：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------
#### [ Command line - All users ]

**下载并安装 AWS SAMCLI**
**注意**  
 如果您之前通过 Homebrew 或 pip 安装了 AWS SAM CLI，则需要先将其卸载。有关说明，请参阅[卸载 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  将 macOS `pkg` 下载到您选择的目录：
   +  **对于运行英特尔处理器的 Mac，请选择 x86** [\$164 —-x86\$164.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **[对于运行 Apple 芯片的 Mac，请选择 arm64 —-arm64.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg)** 
**注意**  
（可选）您可以选择在安装前验证安装程序的完整性。有关说明，请参阅[可选：验证 AWS SAMCLI 安装程序的完整性](reference-sam-cli-install-verify.md)。

1.  修改并运行安装脚本：

   ```
   $ sudo installer -pkg path-to-pkg-installer/name-of-pkg-installer -target /
   installer: Package name is AWS SAM CLI
   installer: Upgrading at base path /
   installer: The upgrade was successful.
   ```
**注意**  
 要使用 **sam** 命令调用 AWS SAM CLI，安装程序会自动在 `/usr/local/bin/sam` 和 `/usr/local/aws-sam-cli/sam` 之间创建符号链接。

**验证安装是否成功**
+  通过运行以下命令验证 AWS SAM CLI 是否已正确安装以及符号链接是否已配置：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------
#### [ Command line - Current user ]

**下载并安装 AWS SAMCLI**
**注意**  
 如果您之前通过 Homebrew 或 pip 安装了 AWS SAM CLI，则需要先将其卸载。有关说明，请参阅[卸载 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-uninstall)。

1.  将 macOS `pkg` 下载到您选择的目录：
   +  **对于运行英特尔处理器的 Mac，请选择 x86** [\$164 —-x86\$164.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-x86_64.pkg) 
   +  **[对于运行 Apple 芯片的 Mac，请选择 arm64 —-arm64.pkg aws-sam-cli-macos](https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-macos-arm64.pkg)** 
**注意**  
（可选）您可以选择在安装前验证安装程序的完整性。有关说明，请参阅[可选：验证 AWS SAMCLI 安装程序的完整性](reference-sam-cli-install-verify.md)。

1.  确定您有写入权限的安装目录。然后，使用模板创建 `xml` 文件并对其进行修改以反映您的安装目录。目录必须已经存在。

    例如，如果*path-to-my-directory*替换为`/Users/myUser/Desktop`，则`aws-sam-cli`程序文件夹将安装在那里。

   ```
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
     <array>
       <dict>
         <key>choiceAttribute</key>
         <string>customLocation</string>
         <key>attributeSetting</key>
         <string>path-to-my-directory</string>
         <key>choiceIdentifier</key>
         <string>default</string>
       </dict>
     </array>
   </plist>
   ```

1.  保存 `xml` 文件并通过运行以下命令验证其是否有效：

   ```
   $ installer -pkg path-to-pkg-installer \
   -target CurrentUserHomeDirectory \
   -showChoicesAfterApplyingChangesXML path-to-your-xml-file
   ```

    输出应显示将应用于 AWS SAM CLI 程序的首选项。

1.  运行以下命令来安装 AWS SAMCLI：

   ```
   $ installer -pkg path-to-pkg-installer \
   -target CurrentUserHomeDirectory \
   -applyChoiceChangesXML path-to-your-xml-file
   
   # Example output
   installer: Package name is AWS SAM CLI
   installer: choices changes file 'path-to-your-xml-file' applied
   installer: Upgrading at base path base-path-of-xml-file
   installer: The upgrade was successful.
   ```

**要创建符号链接**
+  要使用 **sam** 命令调用 AWS SAM CLI，您必须在 AWS SAM CLI 程序和您的 `$PATH` 之间手动创建符号链接。通过修改并运行以下命令来创建符号链接：

  ```
  $ sudo ln -s /path-to/aws-sam-cli/sam /path-to-symlink-directory/sam
  ```
  +  *sudo*— 如果您的用户具有写入权限`$PATH`，则**sudo**不是必需的。否则，**sudo** 是必需的。
  +  *path-to*— AWS SAMCLI 程序安装位置的路径。例如 `/Users/myUser/Desktop`。
  +  *path-to-symlink-directory*— 您的`$PATH`环境变量。默认位置是 `/usr/local/bin`。

**验证安装是否成功**
+  通过运行以下命令验证 AWS SAM CLI 是否已正确安装以及符号链接是否已配置：

  ```
  $ which sam
  /usr/local/bin/sam
  $ sam --version
  SAM CLI, <latest version>
  ```

------

### Windows
<a name="install-sam-cli-instructions-windows"></a>

Windows 安装程序 (MSI) 文件是 Windows 操作系统的软件包安装程序文件。

按照以下步骤使用 MSI 文件安装 AWS SAM CLI。

1. 下载 AWS SAM CLI [64 位版本](https://github.com/aws/aws-sam-cli/releases/latest/download/AWS_SAM_CLI_64_PY3.msi)。

1. **（可选）**您可以在安装前验证安装程序的完整性。有关说明，请参阅[可选：验证 AWS SAMCLI 安装程序的完整性](reference-sam-cli-install-verify.md)。

1. 验证安装。

   安装完成后，打开新的命令提示符或 PowerShell 提示符进行验证。您应该能够从命令行调用 `sam`。

   ```
   sam --version
   ```

   成功安装后 AWS SAMCLI，您应该会看到如下输出：

   ```
   SAM CLI, <latest version>
   ```

1. 启用长路径（仅限 Windows 10 及更高版本）。
**重要**  
 AWS SAMCLI可能会与超过 Windows 最大路径限制的文件路径进行交互。由于 Windows 10 的 **MAX\$1PATH** 限制，这可能会在运行 `sam init` 时导致错误。若要解决此问题，必须配置新的长路径行为。

   要启用长路径，请参阅 *Microsoft Windows 应用程序开发文档*中的[在 Windows 10 版本 1607 及更高版本中启用长路径](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell#enable-long-paths-in-windows-10-version-1607-and-later)。

1. 安装 Git。

   要使用 `sam init` 命令下载示例应用程序，还必须安装 Git。有关说明，请参见[安装 Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)。

## 排查 安装错误
<a name="sam-cli-troubleshoot-install"></a>

### Linux
<a name="sam-cli-troubleshoot-install-linux"></a>

#### Docker 错误：“无法连接到 Docker 进程守护程序。Docker 进程守护程序是否在此主机上运行？”
<a name="serverless-sam-cli-install-linux-troubleshooting-docker-deamon"></a>

在某些情况下，要为 `ec2-user` 提供访问 Docker 进程守护程序的权限，您可能需要重新启动实例。如果您收到此错误，请尝试重启实例。

#### Shell 错误：“找不到命令”
<a name="serverless-sam-cli-install-linux-troubleshooting-sam-cli-not-found"></a>

如果您收到此错误，则表示 Shell 无法在路径中找到 AWS SAM CLI 可执行文件。验证 AWS SAM CLI 可执行文件安装目录的位置，然后验证该目录是否位于路径中。

#### AWS SAMCLI错误：“/lib64/libc.so.6：找不到 `GLIBC\$12.14'版本（/.so.1 必填）” usr/local/aws-sam-cli/dist/libz
<a name="serverless-sam-cli-install-linux-troubleshooting-sam-cli-missing-lib"></a>

如果您收到此错误，则表示您使用的是不受支持的 Linux 版本，并且内置的 glibc 版本已过时。请尝试以下任一方法：
+ 将您的 Linux 主机升级到最新的 64 位 CentOS、Fedora、Ubuntu 或 Amazon Linux 2 发行版。
+ 按照 [安装 AWS SAM CLI](#install-sam-cli) 的说明进行操作。

### macOS
<a name="sam-cli-troubleshoot-install-macos"></a>

#### 安装失败
<a name="sam-cli-troubleshoot-install-macos-install-failed"></a>

![\[AWS SAM CLI 安装程序的映像，其中显示安装失败消息\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/images/sam-cli-troubleshoot-install-macos-install-failed.jpg)


 如果您是在为用户安装 AWS SAM CLI，并且选择了您没有写入权限的安装目录，则可能会出现此错误。请尝试以下任一方法：

1.  选择您具有写入权限的其他安装目录。

1.  删除安装程序。然后重新下载并运行安装程序。

## 后续步骤
<a name="install-sam-cli-next-steps"></a>

要了解有关 AWS SAM CLI 的更多信息并开始构建自己的无服务器应用程序，请参阅以下内容：
+ [教程：使用以下命令部署 Hello World 应用程序 AWS SAM](serverless-getting-started-hello-world.md)— 下载、构建和部署基本无服务器应用程序的 Step-by-step说明。
+ [完整 AWS SAM 研讨会](https://catalog.workshops.aws/complete-aws-sam/en-US) —旨在向您传授所 AWS SAM 提供的许多主要功能的研讨会.
+ [AWS SAM 示例应用程序和模式](https://serverlessland.com/patterns?framework=AWS+SAM) — 来自社区作者的示例应用程序和模式，您可以进一步进行实验。

# 可选：验证 AWS SAMCLI 安装程序的完整性
<a name="reference-sam-cli-install-verify"></a>

使用软件包安装程序安装 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) 时，可以在安装前验证其完整性。此步骤是可选的，但我们强烈建议您执行此步骤。

可供您使用的两个验证选项是：
+ 验证软件包安装程序签名文件。
+ 验证软件包安装程序的哈希值。

如果可用于您的平台，我们建议您验证签名文件选项。此选项提供额外的安全层，因为密钥值在此处发布，并且与 GitHub 存储库分开管理。

**Topics**
+ [

## 验证安装程序包签名文件
](#reference-sam-cli-install-verify-signature)
+ [

## 验证哈希值
](#reference-sam-cli-install-verify-hash)

## 验证安装程序包签名文件
<a name="reference-sam-cli-install-verify-signature"></a>

### Linux
<a name="reference-sam-cli-install-verify-signature-linux"></a>

#### arm64：命令行安装程序
<a name="reference-sam-cli-install-verify-signature-linux-arm64"></a>

AWS SAM 使用 [GnuPG](https://www.gnupg.org/) 对.zip 安装程序进行签名 AWS SAMCLI。验证过程需要执行以下步骤：

1. 使用主公钥验证签署人公钥。

1. 使用签署人公钥验证 AWS SAM CLI 软件包安装程序。

**验证签署人公钥的完整性**

1. 复制主公钥并将其作为 `.txt` 文件保存到本地计算机。例如 *`primary-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   mQINBGRuSzMBEADsqiwOy78w7F4+sshaMFRIwRGNRm94p5Qey2KMZBxekFtoryVD
   D9jEOnvupx4tvhfBHz5EcUHCEOdl4MTqdBy6vVAshozgxVb9RE8JpECn5lw7XC69
   4Y7Gy1TKKQMEWtDXElkGxIFdUWvWjSnPlzfnoXwQYGeE93CUS3h5dImP22Yk1Ct6
   eGGhlcbg1X4L8EpFMj7GvcsU8f7ziVI/PyC1Xwy39Q8/I67ip5eU5ddxO/xHqrbL
   YC7+8pJPbRMej2twT2LrcpWWYAbprMtRoa6WfE0/thoo3xhHpIMHdPfAA86ZNGIN
   kRLjGUg7jnPTRW4Oin3pCc8nT4Tfc1QERkHm641gTC/jUvpmQsM6h/FUVP2i5iE/
   JHpJcMuL2Mg6zDo3x+3gTCf+Wqz3rZzxB+wQT3yryZs6efcQy7nROiRxYBxCSXX0
   2cNYzsYLb/bYaW8yqWIHD5IqKhw269gp2E5Khs60zgS3CorMb5/xHgXjUCVgcu8a
   a8ncdf9fjl3WS5p0ohetPbO2ZjWv+MaqrZOmUIgKbA4RpWZ/fU97P5BW9ylwmIDB
   sWy0cMxg8MlvSdLytPieogaM0qMg3u5qXRGBr6Wmevkty0qgnmpGGc5zPiUbtOE8
   CnFFqyxBpj5IOnG0KZGVihvn+iRxrv6GO7WWO92+Dc6m94U0EEiBR7QiOwARAQAB
   tDRBV1MgU0FNIENMSSBQcmltYXJ5IDxhd3Mtc2FtLWNsaS1wcmltYXJ5QGFtYXpv
   bi5jb20+iQI/BBMBCQApBQJkbkszAhsvBQkHhM4ABwsJCAcDAgEGFQgCCQoLBBYC
   AwECHgECF4AACgkQQv1fenOtiFqTuhAAzi5+ju5UVOWqHKevOJSO08T4QB8HcqAE
   SVO3mY6/j29knkcL8ubZP/DbpV7QpHPI2PB5qSXsiDTP3IYPbeY78zHSDjljaIK3
   njJLMScFeGPyfPpwMsuY4nzrRIgAtXShPA8N/k4ZJcafnpNqKj7QnPxiC1KaIQWm
   pOtvb8msUF3/s0UTa5Ys/lNRhVC0eGg32ogXGdojZA2kHZWdm9udLo4CDrDcrQT7
   NtDcJASapXSQL63XfAS3snEc4e1941YxcjfYZ33rel8K9juyDZfi1slWR/L3AviI
   QFIaqSHzyOtP1oinUkoVwL8ThevKD3Ag9CZflZLzNCV7yqlF8RlhEZ4zcE/3s9El
   WzCFsozb5HfE1AZonmrDh3SyOEIBMcS6vG5dWnvJrAuSYv2rX38++K5Pr/MIAfOX
   DOI1rtA+XDsHNv9lSwSy0lt+iClawZANO9IXCiN1rOYcVQlwzDFwCNWDgkwdOqS0
   gOA2f8NF9lE5nBbeEuYquoOl1Vy8+ICbgOFs9LoWZlnVh7/RyY6ssowiU9vGUnHI
   L8f9jqRspIz/Fm3JD86ntZxLVGkeZUz62FqErdohYfkFIVcv7GONTEyrz5HLlnpv
   FJ0MR0HjrMrZrnOVZnwBKhpbLocTsH+3t5It4ReYEX0f1DIOL/KRwPvjMvBVkXY5
   hblRVDQoOWc=
   =d9oG
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 将主公钥导入到您的密钥环中。

   ```
   $ gpg --import primary-public-key.txt
   							
   gpg: directory `/home/.../.gnupg' created
   gpg: new configuration file `/home/.../.gnupg/gpg.conf' created
   gpg: WARNING: options in `/home/.../.gnupg/gpg.conf' are not yet active during this run
   gpg: keyring `/home/.../.gnupg/secring.gpg' created
   gpg: keyring `/home/.../.gnupg/pubring.gpg' created
   gpg: /home/.../.gnupg/trustdb.gpg: trustdb created
   gpg: key 73AD885A: public key "AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```

1. 复制签署人公钥并将其作为 `.txt` 文件保存到本地计算机。例如 *`signer-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   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
   LtZnq+n4SfeNbZjD2FQWZR4CrA==
   =lHfs
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 将签署人公钥导入到您的密钥环中。

   ```
   $ gpg --import signer-public-key.txt
   							
   gpg: key 4094ABB1BEDFDAB4: public key "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   gpg: no ultimately trusted keys found
   ```

   记下输出中的密钥值。例如 *`4094ABB1BEDFDAB4`*。

1. 使用密钥值获取并验证签署人公钥的指纹。

   ```
   $ gpg --fingerprint 4094ABB1BEDFDAB4
   							
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   ```

   指纹应与以下内容匹配：

   ```
   EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```

   如果指纹字符串不匹配，请不要使用 AWS SAM CLI 安装程序。通过在*aws-sam-cli GitHub 存储库*中[创建问题来上](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)报给 AWS SAM 团队。

1. 验证签署人公钥的签名：

   ```
   $ gpg --check-sigs 4094ABB1BEDFDAB4
   						  
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF463E86CA31933BB688CC1A4094ABB1BEDFDAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   sig!3        4094ABB1BEDFDAB4 2025-05-19  [self-signature]
   sig!         42FD5F7A73AD885A 2025-05-19 AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>
   ```

   如果看到 `1 signature not checked due to a missing key`，请重复前面的步骤，将主公钥和签署人公钥导入到密钥环中。

   您应该会看到列出的主公钥和签署人公钥的密钥值。

现在，您已经验证了签署人公钥的完整性，您可以使用签署人公钥来验证 AWS SAM CLI 软件包安装程序。

**验证 AWS SAM CLI 软件包安装程序的完整性**

1. **获取 AWS SAM CLI 软件包签名文件** - 使用以下命令下载 AWS SAM CLI 软件包安装程序的签名文件：

   ```
   $ wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-arm64.zip.sig
   ```

1. **验证签名文件** – 将两个下载 `.sig` 和 `.zip` 文件作为参数传递给 `gpg` 命令。以下是示例：

   ```
   $ gpg --verify aws-sam-cli-linux-arm64.zip.sig aws-sam-cli-linux-arm64.zip
   ```

   该输出值应该类似于以下内容：

   ```
   gpg: Signature made Mon 19 May 2025 01:21:57 AM UTC using RSA key ID 4094ABB1BEDFDAB4
   gpg: Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```
   + 可以忽略消息`WARNING: This key is not certified with a trusted signature!`。之所以出现此警告，是因为您的个人 PGP 密钥（如果您有）和 AWS SAM CLI 密钥之间没有信任链。有关更多信息，请参阅[信任 Web](https://en.wikipedia.org/wiki/Web_of_trust)。
   + 如果输出包含短语 `BAD signature`，则检查是否正确执行了此过程。如果您继续收到此回复，请通过在*aws-sam-cli GitHub 存储库*中[创建问题](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)来上报给 AWS SAM 团队，并避免使用下载的文件。

   消息`Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"`表示签名已通过验证，您可以继续安装。

#### x86\$164 - 命令行安装程序
<a name="reference-sam-cli-install-verify-signature-linux-x8664"></a>

AWS SAM 使用 [GnuPG](https://www.gnupg.org/) 对.zip 安装程序进行签名 AWS SAMCLI。验证过程需要执行以下步骤：

1. 使用主公钥验证签署人公钥。

1. 使用签署人公钥验证 AWS SAM CLI 软件包安装程序。

**验证签署人公钥的完整性**

1. 复制主公钥并将其作为 `.txt` 文件保存到本地计算机。例如 *`primary-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   mQINBGRuSzMBEADsqiwOy78w7F4+sshaMFRIwRGNRm94p5Qey2KMZBxekFtoryVD
   D9jEOnvupx4tvhfBHz5EcUHCEOdl4MTqdBy6vVAshozgxVb9RE8JpECn5lw7XC69
   4Y7Gy1TKKQMEWtDXElkGxIFdUWvWjSnPlzfnoXwQYGeE93CUS3h5dImP22Yk1Ct6
   eGGhlcbg1X4L8EpFMj7GvcsU8f7ziVI/PyC1Xwy39Q8/I67ip5eU5ddxO/xHqrbL
   YC7+8pJPbRMej2twT2LrcpWWYAbprMtRoa6WfE0/thoo3xhHpIMHdPfAA86ZNGIN
   kRLjGUg7jnPTRW4Oin3pCc8nT4Tfc1QERkHm641gTC/jUvpmQsM6h/FUVP2i5iE/
   JHpJcMuL2Mg6zDo3x+3gTCf+Wqz3rZzxB+wQT3yryZs6efcQy7nROiRxYBxCSXX0
   2cNYzsYLb/bYaW8yqWIHD5IqKhw269gp2E5Khs60zgS3CorMb5/xHgXjUCVgcu8a
   a8ncdf9fjl3WS5p0ohetPbO2ZjWv+MaqrZOmUIgKbA4RpWZ/fU97P5BW9ylwmIDB
   sWy0cMxg8MlvSdLytPieogaM0qMg3u5qXRGBr6Wmevkty0qgnmpGGc5zPiUbtOE8
   CnFFqyxBpj5IOnG0KZGVihvn+iRxrv6GO7WWO92+Dc6m94U0EEiBR7QiOwARAQAB
   tDRBV1MgU0FNIENMSSBQcmltYXJ5IDxhd3Mtc2FtLWNsaS1wcmltYXJ5QGFtYXpv
   bi5jb20+iQI/BBMBCQApBQJkbkszAhsvBQkHhM4ABwsJCAcDAgEGFQgCCQoLBBYC
   AwECHgECF4AACgkQQv1fenOtiFqTuhAAzi5+ju5UVOWqHKevOJSO08T4QB8HcqAE
   SVO3mY6/j29knkcL8ubZP/DbpV7QpHPI2PB5qSXsiDTP3IYPbeY78zHSDjljaIK3
   njJLMScFeGPyfPpwMsuY4nzrRIgAtXShPA8N/k4ZJcafnpNqKj7QnPxiC1KaIQWm
   pOtvb8msUF3/s0UTa5Ys/lNRhVC0eGg32ogXGdojZA2kHZWdm9udLo4CDrDcrQT7
   NtDcJASapXSQL63XfAS3snEc4e1941YxcjfYZ33rel8K9juyDZfi1slWR/L3AviI
   QFIaqSHzyOtP1oinUkoVwL8ThevKD3Ag9CZflZLzNCV7yqlF8RlhEZ4zcE/3s9El
   WzCFsozb5HfE1AZonmrDh3SyOEIBMcS6vG5dWnvJrAuSYv2rX38++K5Pr/MIAfOX
   DOI1rtA+XDsHNv9lSwSy0lt+iClawZANO9IXCiN1rOYcVQlwzDFwCNWDgkwdOqS0
   gOA2f8NF9lE5nBbeEuYquoOl1Vy8+ICbgOFs9LoWZlnVh7/RyY6ssowiU9vGUnHI
   L8f9jqRspIz/Fm3JD86ntZxLVGkeZUz62FqErdohYfkFIVcv7GONTEyrz5HLlnpv
   FJ0MR0HjrMrZrnOVZnwBKhpbLocTsH+3t5It4ReYEX0f1DIOL/KRwPvjMvBVkXY5
   hblRVDQoOWc=
   =d9oG
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 将主公钥导入到您的密钥环中。

   ```
   $ gpg --import primary-public-key.txt
   							
   gpg: directory `/home/.../.gnupg' created
   gpg: new configuration file `/home/.../.gnupg/gpg.conf' created
   gpg: WARNING: options in `/home/.../.gnupg/gpg.conf' are not yet active during this run
   gpg: keyring `/home/.../.gnupg/secring.gpg' created
   gpg: keyring `/home/.../.gnupg/pubring.gpg' created
   gpg: /home/.../.gnupg/trustdb.gpg: trustdb created
   gpg: key 73AD885A: public key "AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   ```

1. 复制签署人公钥并将其作为 `.txt` 文件保存到本地计算机。例如 *`signer-public-key.txt`*。

   ```
   -----BEGIN PGP PUBLIC KEY BLOCK-----
   Version: GnuPG v2.0.22 (GNU/Linux)
   
   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
   LtZnq+n4SfeNbZjD2FQWZR4CrA==
   =lHfs
   -----END PGP PUBLIC KEY BLOCK-----
   ```

1. 将签署人公钥导入到您的密钥环中。

   ```
   $ gpg --import signer-public-key.txt
   							
   gpg: key 4094ABB1BEDFDAB4: public key "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>" imported
   gpg: Total number processed: 1
   gpg:               imported: 1  (RSA: 1)
   gpg: no ultimately trusted keys found
   ```

   记下输出中的密钥值。例如 *`4094ABB1BEDFDAB4`*。

1. 使用密钥值获取并验证签署人公钥的指纹。

   ```
   $ gpg --fingerprint 4094ABB1BEDFDAB4
   						  
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   ```

   指纹应与以下内容匹配：

   ```
   EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```

   如果指纹字符串不匹配，请不要使用 AWS SAM CLI 安装程序。通过在*aws-sam-cli GitHub 存储库*中[创建问题来上](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)报给 AWS SAM 团队。

1. 验证签署人公钥的签名：

   ```
   $ gpg --check-sigs 4094ABB1BEDFDAB4
   							
   pub   rsa4096 2025-05-19 [SCEA] [expires: 2027-05-19]
         EF463E86CA31933BB688CC1A4094ABB1BEDFDAB4
   uid           [ unknown] AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>
   sig!3        4094ABB1BEDFDAB4 2025-05-19  [self-signature]
   sig!         42FD5F7A73AD885A 2025-05-19 AWS SAM CLI Primary <aws-sam-cli-primary@amazon.com>
   ```

   如果看到 `1 signature not checked due to a missing key`，请重复前面的步骤，将主公钥和签署人公钥导入到密钥环中。

   您应该会看到列出的主公钥和签署人公钥的密钥值。

现在，您已经验证了签署人公钥的完整性，您可以使用签署人公钥来验证 AWS SAM CLI 软件包安装程序。

**验证 AWS SAM CLI 软件包安装程序的完整性**

1. **获取 AWS SAM CLI 软件包签名文件** - 使用以下命令下载 AWS SAM CLI 软件包安装程序的签名文件：

   ```
   $ wget https://github.com/aws/aws-sam-cli/releases/latest/download/aws-sam-cli-linux-x86_64.zip.sig
   ```

1. **验证签名文件** – 将两个下载 `.sig` 和 `.zip` 文件作为参数传递给 `gpg` 命令。以下是示例：

   ```
   $ gpg --verify aws-sam-cli-linux-x86_64.zip.sig aws-sam-cli-linux-x86_64.zip
   ```

   该输出值应该类似于以下内容：

   ```
   gpg: Signature made Mon 19 May 2025 01:21:57 AM UTC using RSA key ID 4094ABB1BEDFDAB4
   gpg: Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"
   gpg: WARNING: This key is not certified with a trusted signature!
   gpg:          There is no indication that the signature belongs to the owner.
   Primary key fingerprint: EF46 3E86 CA31 933B B688  CC1A 4094 ABB1 BEDF DAB4
   ```
   + 可以忽略消息`WARNING: This key is not certified with a trusted signature!`。之所以出现此警告，是因为您的个人 PGP 密钥（如果您有）和 AWS SAM CLI 密钥之间没有信任链。有关更多信息，请参阅[信任 Web](https://en.wikipedia.org/wiki/Web_of_trust)。
   + 如果输出包含短语 `BAD signature`，则检查是否正确执行了此过程。如果您继续收到此回复，请通过在*aws-sam-cli GitHub 存储库*中[创建问题](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)来上报给 AWS SAM 团队，并避免使用下载的文件。

   消息`Good signature from "AWS SAM CLI Team <aws-sam-cli-signer@amazon.com>"`表示签名已通过验证，您可以继续安装。

### macOS
<a name="reference-sam-cli-install-verify-signature-macos"></a>

#### GUI 和命令行安装程序
<a name="reference-sam-cli-install-verify-signature-macos-installer"></a>

您可以使用 `pkgutil` 工具或手动验证 AWS SAM CLI 软件包安装程序签名文件的完整性。

**使用 pkgutil 进行验证**

1. 运行以下命令，提供下载的安装程序在本地计算机上的路径：

   ```
   $ pkgutil --check-signature /path/to/aws-sam-cli-installer.pkg
   ```

   以下是示例：

   ```
   $ pkgutil --check-signature /Users/user/Downloads/aws-sam-cli-macos-arm64.pkg
   ```

1. 从输出中找到 **Developer ID Installer: AMZN Mobile LLC** 的 **SHA256 fingerprint**。以下是示例：

   ```
   Package "aws-sam-cli-macos-arm64.pkg":
      Status: signed by a developer certificate issued by Apple for distribution
      Notarization: trusted by the Apple notary service
      Signed with a trusted timestamp on: 2026-01-28 07:39:16 +0000
      Certificate Chain:
       1. Developer ID Installer: AMZN Mobile LLC (94KV3E626L)
          Expires: 2030-09-26 00:18:06 +0000
          SHA256 Fingerprint:
              5C 45 BE 63 FD 52 10 07 2D 66 56 77 5C A9 FF 25 91 6D 3F 01 F7 0E
              9A 8A 05 F6 2D 62 B2 88 8D A9
          ------------------------------------------------------------------------
       2. Developer ID Certification Authority
          Expires: 2031-09-17 00:00:00 +0000
          SHA256 Fingerprint:
              F1 6C D3 C5 4C 7F 83 CE A4 BF 1A 3E 6A 08 19 C8 AA A8 E4 A1 52 8F
              D1 44 71 5F 35 06 43 D2 DF 3A
          ------------------------------------------------------------------------
       3. Apple Root CA
          Expires: 2035-02-09 21:40:36 +0000
          SHA256 Fingerprint:
              B0 B1 73 0E CB C7 FF 45 05 14 2C 49 F1 29 5E 6E DA 6B CA ED 7E 2C
              68 C5 BE 91 B5 A1 10 01 F0 24
   ```

1. **Developer ID Installer: AMZN Mobile LLC SHA256 fingerprint** 应匹配以下值：

   ```
   5C 45 BE 63 FD 52 10 07 2D 66 56 77 5C A9 FF 25 91 6D 3F 01 F7 0E 9A 8A 05 F6 2D 62 B2 88 8D A9
   ```

   如果指纹字符串不匹配，请不要使用 AWS SAM CLI 安装程序。通过在*aws-sam-cli GitHub 存储库*中[创建问题来上](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)报给 AWS SAM 团队。如果指纹字符串匹配，您可以继续使用软件包安装程序。

**手动验证软件包安装程序**
+ 请参阅 *Apple 支持网站*上的[如何验证手动下载的 Apple 软件更新的真实性](https://support.apple.com/en-us/HT202369)。

### Windows
<a name="reference-sam-cli-install-verify-signature-windows"></a>

 AWS SAMCLI安装程序打包为Windows操作系统的MSI文件。

**验证安装程序的完整性**

1. 右键单击安装程序，打开**属性**窗口。

1. 选择**数字签名**选项卡。

1. 在**签名列表**中，选择 **Amazon Web Services, Inc.**，然后选择**详细信息**。

1. 选择**常规**选项卡 (如果尚未选择)，然后选择**查看证书**。

1. 选择**详细信息**选项卡，然后选择**显示**下拉列表中的**全部** (如果尚未选择)。

1. 向下滚动直至您看到**指纹**字段，然后选择**指纹**。这将在下部窗口中显示整个指纹值。

1. 将指纹值与以下值进行匹配。如果值匹配，就继续安装。如果不是，请通过在*aws-sam-cli GitHub 存储库*中[创建问题](https://github.com/aws/aws-sam-cli/issues/new?assignees=&labels=stage%2Fneeds-triage&projects=&template=Bug_report.md&title=Bug%3A+TITLE)来上报给 AWS SAM 团队。

   ```
   cd62479397f09d72a04c7399a254b0a91da53d6c
   ```

## 验证哈希值
<a name="reference-sam-cli-install-verify-hash"></a>

### Linux
<a name="reference-sam-cli-install-verify-hash-linux"></a>

#### x86\$164 - 命令行安装程序
<a name="reference-sam-cli-install-verify-hash-linux-x8664"></a>

使用以下命令生成哈希值，验证下载的安装程序文件的完整性和真实性：

```
$ sha256sum aws-sam-cli-linux-x86_64.zip
```

输出应与以下示例类似：

```
<64-character SHA256 hash value> aws-sam-cli-linux-x86_64.zip
```

将包含 64 个字符的 SHA-256 哈希值与您所需的 AWS SAM CLI 版本在 GitHub 上的[AWS SAM CLI 发布说明](https://github.com/aws/aws-sam-cli/releases/latest)中的哈希值进行比较。

### macOS
<a name="reference-sam-cli-install-verify-hash-macos"></a>

#### GUI 和命令行安装程序
<a name="reference-sam-cli-install-verify-hash-macos-installer"></a>

 使用以下命令生成哈希值，验证下载的安装程序的完整性和真实性：

```
$ shasum -a 256 path-to-pkg-installer/name-of-pkg-installer

# Examples
$ shasum -a 256 ~/Downloads/aws-sam-cli-macos-arm64.pkg
$ shasum -a 256 ~/Downloads/aws-sam-cli-macos-x86_64.pkg
```

 将包含 64 个字符的 SHA-256 哈希值与 GitHub 存储库上的 [AWS SAM CLI 发布说明](https://github.com/aws/aws-sam-cli/releases/latest)中相应的值进行比较。

# 教程：使用以下命令部署 Hello World 应用程序 AWS SAM
<a name="serverless-getting-started-hello-world"></a>

在本教程中，您将使用 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) 来完成以下操作：
+ 初始化、构建和部署示例 **Hello World** 应用程序。
+ 进行本地更改并同步到 AWS CloudFormation。
+ 在开发主机上执行本地测试。
+ 从 AWS 云中删除示例应用程序。

示例 **Hello World** 应用程序实现了基本的 API 后端。它由以下资源组成：
+ **Amazon API Gateway** – 将用于调用函数的 API 端点。
+ **AWS Lambda**– 处理 HTTP API GET 请求并返回 `hello world` 消息的函数。
+ **AWS Identity and Access Management (IAM) 角色** — 为服务提供安全交互的权限。

下图显示此应用程序的组件：

![\[向 API 网关端点发送 GET 请求时调用的 Lambda 函数的图表\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/images/gs-01.png)


**Topics**
+ [

## 先决条件
](#serverless-getting-started-hello-world-prerequisites)
+ [

## 第 1 步：初始化示例 Hello World 应用程序
](#serverless-getting-started-hello-world-init)
+ [

## 第 2 步：构建应用程序
](#serverless-getting-started-hello-world-build)
+ [

## 步骤 3：将您的应用程序部署到 AWS 云
](#serverless-getting-started-hello-world-deploy)
+ [

## 第 4 步：运行应用程序
](#serverless-getting-started-hello-world-run)
+ [

## 第 5 步：在中与你的函数进行交互 AWS 云
](#serverless-getting-started-hello-world-remote-invoke)
+ [

## 步骤 6：修改您的应用程序并将其同步到 AWS 云
](#serverless-getting-started-hello-world-sync)
+ [

## 第 7 步：（可选）在本地测试应用程序
](#serverless-getting-started-hello-world-test)
+ [

## 第 8 步：从中删除您的应用程序 AWS 云
](#serverless-getting-started-hello-world-delete)
+ [

## 问题排查
](#serverless-getting-started-hello-world-troubleshoot)
+ [

## 了解详情
](#serverless-getting-started-hello-world-learn)

## 先决条件
<a name="serverless-getting-started-hello-world-prerequisites"></a>

确认您是否已完成以下操作：
+ [AWS SAM 先决条件](prerequisites.md)
+ [安装 AWS SAM CLI](install-sam-cli.md)

**注意**  
如果您更喜欢使用 Visual Studio Code 进行[无服务器开发，请参阅 VS Code AWS 工具包用户指南中的创建无服务器应用程序](https://docs.aws.amazon.com/toolkit-for-vscode/latest/userguide/sam-get-started.html#serverless-apps-create)，了解使用 VS Code 接口的 step-by-step说明。

## 第 1 步：初始化示例 Hello World 应用程序
<a name="serverless-getting-started-hello-world-init"></a>

在此步骤中，您将使用 AWS SAM CLI 在本地计算机上创建示例 **Hello World** 应用程序项目。

**初始化示例 Hello World 应用程序**

1. 在命令行中，从您选择的起始目录运行以下内容：

   ```
   $ sam init
   ```
**注意**  
此命令将初始化您的无服务器应用程序并创建项目目录。该目录包含多个文件和`template.yaml`文件夹，包括作为 AWS SAM 模板的文件。  
已安装的 Python 版本必须与 `Runtime` 中指定的 `template.yaml` 属性相匹配。对于生产工作负载，我们建议使用 AWS 环境中完全支持的 Python 3.12 或更早版本。若 Python 版本不匹配，将导致构建错误。  
要解决版本兼容性问题，请执行以下操作：  
 在初始化期间指定兼容的[运行时](sam-cli-command-reference-sam-init.md#sam-cli-command-reference-sam-init-options-runtime)：`sam init --runtime python3.9`
初始化后，修改 `template.yaml` 中的 `Runtime` 属性

1.  AWS SAM CLI 将指导您完成新应用程序的初始化。配置以下内容：

   1. 选择**AWS 快速入门模板**以选择起始模板。

   1. 选择 **Hello World 示例**模板并下载。

   1. 使用 Python 运行时系统和 `zip` 包类型。

   1. 在本教程中，请选择退出 AWS X-Ray 跟踪。要了解更多信息，请参阅[什么是 AWS X-Ray？](https://docs.aws.amazon.com/xray/latest/devguide/aws-xray.html) 在《*AWS X-Ray 开发人员指南》*中。

   1. 在本教程中，请选择退出使用 Amazon CloudWatch 应用程序见解进行监控。要了解更多信息，请参阅《[亚马逊* CloudWatch 用户指南》中的 “亚马逊 CloudWatch *应用程序见解](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html)”。

   1. 在本教程中，请选择不在 Lambda 函数上设置 JSON 格式的结构化日志记录。

   1. 将应用程序命名为 **sam-app**。

   使用 AWS SAM CLI 交互式流程：
   + 方括号 (`[ ]`) 表示默认值。将答案留空以选择默认值。
   + 输入 **`y`** 以选择**是**，输入 **`n`** 以选择**否**。

   以下是 `sam init` 交互式流程的示例：

   ```
   $ sam init
   ...
   Which template source would you like to use?
       1 - AWS Quick Start Templates
       2 - Custom Template Location
   Choice: 1
   
   Choose an AWS Quick Start application template
       1 - Hello World Example
       2 - Data processing
       3 - Hello World Example with Powertools for AWS Lambda
       4 - Multi-step workflow
       5 - Scheduled task
       6 - Standalone function
       7 - Serverless API
       8 - Infrastructure event management 
       9 - Lambda Response Streaming
      10 - GraphQLApi Hello World Example
      11 - Full Stack
      12 - Lambda EFS example
      13 - Serverless Connector Hello World Example
      14 - Multi-step workflow with Connectors
      15 - DynamoDB Example
      16 - Machine Learning
   Template: 1
   
   Use the most popular runtime and package type? (Python and zip) [y/N]: y
   
   Would you like to enable X-Ray tracing on the function(s) in your application?  [y/N]: ENTER
   
   Would you like to enable monitoring using CloudWatch Application Insights?
   For more info, please view https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch-application-insights.html [y/N]: ENTER
   					
   Would you like to set Structured Logging in JSON format on your Lambda functions?  [y/N]: ENTER
   
   Project name [sam-app]: ENTER
   ```

1.  AWS SAMCLI下载您的起始模板并在您的本地计算机上创建应用程序项目目录结构。下面是 AWS SAM CLI 输出的一个示例：

   ```
   Cloning from https://github.com/aws/aws-sam-cli-app-templates (process may take a moment)
   
       -----------------------
       Generating application:
       -----------------------
       Name: sam-app
       Runtime: python3.9
       Architectures: x86_64
       Dependency Manager: pip
       Application Template: hello-world
       Output Directory: .
       Configuration file: sam-app/samconfig.toml
   
       Next steps can be found in the README file at sam-app/README.md
   
   
   Commands you can use next
   =========================
   [*] Create pipeline: cd sam-app && sam pipeline init --bootstrap
   [*] Validate SAM template: cd sam-app && sam validate
   [*] Test Function in the Cloud: cd sam-app && sam sync --stack-name {stack-name} --watch
   ```

1. 在命令行中，移至新创建的 `sam-app` 目录。以下是 AWS SAM CLI 所创建内容的示例：
**注意**  
如果 `tree` 命令未自动安装，请运行以下命令：`brew install tree`

   ```
   $ cd sam-app
   
   $ tree
   
   ├── README.md
   ├── __init__.py
   ├── events
   │   └── event.json
   ├── hello_world
   │   ├── __init__.py
   │   ├── app.py
   │   └── requirements.txt
   ├── samconfig.toml
   ├── template.yaml
   └── tests
       ├── __init__.py
       ├── integration
       │   ├── __init__.py
       │   └── test_api_gateway.py
       ├── requirements.txt
       └── unit
           ├── __init__.py
           └── test_handler.py
           
   6 directories, 14 files
   ```

   需要重点介绍的一些重要文件：
   + `hello_world/app.py` – 包含您的 Lambda 函数代码。
   + `hello_world/requirements.txt` – 包含您的 Lambda 函数所需的任何 Python 依赖项。
   + `samconfig.toml`— 应用程序的配置文件，用于存储使用的默认参数 AWS SAMCLI。
   + `template.yaml`— 包含您的应用程序基础架构代码的 AWS SAM 模板。

现在，您的本地计算机上有了编写完整的无服务器应用程序！

## 第 2 步：构建应用程序
<a name="serverless-getting-started-hello-world-build"></a>

在此步骤中，您将使用 AWS SAM CLI 来构建应用程序并准备部署。在构建时， AWS SAM CLI 会创建一个 `.aws-sam` 目录并在其中整理函数依赖项、项目代码和项目文件。

**要构建应用程序**
+ 从 `sam-app` 项目目录，在命令行中运行以下命令：

  ```
  $ sam build
  ```
**注意**  
 如果您的本地计算机上没有 Python，请改用 **sam build --use-container ** 命令。 AWS SAM CLI 将创建一个包含函数运行时系统和依赖项的 Docker 容器。此命令要求本地计算机上有 Docker。要安装 Docker，请参阅 [安装 Docker](install-docker.md)。

  下面是 AWS SAM CLI 输出的一个示例：

  ```
  $ sam build
  Starting Build use cache
  Manifest file is changed (new hash: 3298f1304...d4d421) or dependency folder (.aws-sam/deps/4d3dfad6-a267-47a6-a6cd-e07d6fae318c) is missing for (HelloWorldFunction), downloading dependencies and copying/building source
  Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
  Running PythonPipBuilder:CleanUp
  Running PythonPipBuilder:ResolveDependencies
  Running PythonPipBuilder:CopySource
  Running PythonPipBuilder:CopySource
  
  Build Succeeded
  
  Built Artifacts  : .aws-sam/build
  Built Template   : .aws-sam/build/template.yaml
  
  Commands you can use next
  =========================
  [*] Validate SAM template: sam validate
  [*] Invoke Function: sam local invoke
  [*] Test Function in the Cloud: sam sync --stack-name {{stack-name}} --watch
  [*] Deploy: sam deploy --guided
  ```

  以下是 AWS SAM CLI 创建的 `.aws-sam` 目录的简短示例：

  ```
  .aws-sam
  ├── build
  │   ├── HelloWorldFunction
  │   │   ├── __init__.py
  │   │   ├── app.py
  │   │   └── requirements.txt
  │   └── template.yaml
  └── build.toml
  ```

需要重点介绍的一些重要文件：
+ `build/HelloWorldFunction` – 包含您的 Lambda 函数代码和依赖项。 AWS SAM CLI 为应用程序中的每个函数创建一个目录。
+ `build/template.yaml`— 包含部署 CloudFormation 时引用的 AWS SAM 模板副本。
+ `build.toml` – 用于存储构建和部署应用程序时 AWS SAM CLI 引用的默认参数值的配置文件。

您现在已准备好将应用程序部署到 AWS 云。

## 步骤 3：将您的应用程序部署到 AWS 云
<a name="serverless-getting-started-hello-world-deploy"></a>

**注意**  
此步骤需要配置 AWS 凭证。有关更多信息，请参阅[AWS SAM 先决条件](prerequisites.md)中的[步骤 5： AWS CLI 使用配置 AWS 凭证](prerequisites.md#prerequisites-configure-credentials)。

在此步骤中，您将使用 AWS SAM CLI 将应用程序部署到 AWS 云。 AWS SAMCLI将执行以下操作：
+ 指导您配置应用程序设置以进行部署。
+ 将应用程序文件上载到 Amazon Simple Storage Service (Amazon S3)。
+ 将您的 AWS SAM 模板转换为 CloudFormation 模板。然后，它会将您的模板上传到 CloudFormation 服务以配置您的 AWS 资源。

**部署 应用程序**

1. 从 `sam-app` 项目目录，在命令行中运行以下命令：

   ```
   $ sam deploy --guided
   ```

1. 按照 AWS SAM CLI 交互式流程配置您的应用程序设置。配置以下内容：

   1. **CloudFormation 堆栈名称** — 堆栈是您可以作为一个单元管理的 AWS 资源集合。要了解更多信息，请参阅*《AWS CloudFormation 用户指南》*中的[使用堆栈](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)。

   1. **AWS 区域**要将 CloudFormation 堆栈部署到的。有关更多信息，请参阅*《AWS CloudFormation 用户指南》*中的 [CloudFormation 端点](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-endpoints.html)。

   1. 在本教程中，请取消选择**在部署前确认更改**。

   1. 允许**创建 IAM 角色** — 这允许您创 AWS SAM 建 API Gateway 资源和 Lambda 函数资源进行交互所必需的 IAM 角色。

   1. 在本教程中，请取消选择**禁用回滚**。

   1. **HelloWorldFunction 未定义授权**即允许 — 显示此消息是因为您的 API Gateway 端点已配置为无需授权即可公开访问。由于这是您的 Hello World 应用程序的预期配置，因此请允许 AWS SAM CLI 继续。有关配置授权的更多信息，请参阅 [使用您的 AWS SAM 模板控制 API 访问权限](serverless-controlling-access-to-apis.md)。

   1. **将参数保存到配置文件** – 这将使用您的部署首选项更新应用程序的 `samconfig.toml` 文件。

   1. 选择默认**配置文件名称**。

   1. 选择默认**配置环境**。

   下面是一个 `sam deploy --guided` 交互式流程的示例输出：

   ```
   $ sam deploy --guided
   
   Configuring SAM deploy
   ======================
   
       Looking for config file [samconfig.toml] :  Found
       Reading default arguments  :  Success
   
       Setting default arguments for 'sam deploy'
       =========================================
       Stack Name [sam-app]: ENTER
       AWS Region [us-west-2]: ENTER
       #Shows you resources changes to be deployed and require a 'Y' to initiate deploy
       Confirm changes before deploy [Y/n]: n
       #SAM needs permission to be able to create roles to connect to the resources in your template
       Allow SAM CLI IAM role creation [Y/n]: ENTER
       #Preserves the state of previously provisioned resources when an operation fails
       Disable rollback [y/N]: ENTER
       HelloWorldFunction may not have authorization defined, Is this okay? [y/N]: y
       Save arguments to configuration file [Y/n]: ENTER
       SAM configuration file [samconfig.toml]: ENTER
       SAM configuration environment [default]: ENTER
   ```

1. 通过执行以下操作来 AWS SAMCLI部署您的应用程序：
   +  AWS SAM CLI 创建一个 Amazon S3 存储桶并上传您的 `.aws-sam` 目录。
   + 会 AWS SAMCLI将您的 AWS SAM 模板转换为 CloudFormation 服务并将其上传到服务。 CloudFormation 
   + CloudFormation 配置您的资源。

   在部署期间， AWS SAM CLI 会显示您的进度。下面是一个示例输出：

   ```
   Looking for resources needed for deployment:
   
       Managed S3 bucket: aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
       A different default S3 bucket can be set in samconfig.toml
   
       Parameter "stack_name=sam-app" in [default.deploy.parameters] is defined as a global parameter [default.global.parameters].
       This parameter will be only saved under [default.global.parameters] in /Users/.../Demo/sam-tutorial1/sam-app/samconfig.toml.
   
       Saved arguments to config file
       Running 'sam deploy' for future deployments will use the parameters saved above.
       The above parameters can be changed by modifying samconfig.toml
       Learn more about samconfig.toml syntax at
       https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-config.html
   
   File with same data already exists at sam-app/da3c598813f1c2151579b73ad788cac8, skipping upload
   
       Deploying with following values
       ===============================
       Stack name                   : sam-app
       Region                       : us-west-2
       Confirm changeset            : False
       Disable rollback             : False
       Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
       Capabilities                 : ["CAPABILITY_IAM"]
       Parameter overrides          : {}
       Signing Profiles             : {}
   
   Initiating deployment
   =====================
   
   File with same data already exists at sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template, skipping upload
   
   
   Waiting for changeset to be created..
   
   CloudFormation stack changeset
   ---------------------------------------------------------------------------------------------------------------------------------------------
   Operation                           LogicalResourceId                   ResourceType                        Replacement
   ---------------------------------------------------------------------------------------------------------------------------------------------
   * Modify                            HelloWorldFunction                  AWS::Lambda::Function               False
   * Modify                            ServerlessRestApi                   AWS::ApiGateway::RestApi            False
   - Delete                            AwsSamAutoDependencyLayerNestedSt   AWS::CloudFormation::Stack          N/A
                                       ack
   ---------------------------------------------------------------------------------------------------------------------------------------------
   
   
   Changeset created successfully. arn:aws:cloudformation:us-west-2:012345678910:changeSet/samcli-deploy1678917603/22e05525-08f9-4c52-a2c4-f7f1fd055072
   
   
   2023-03-15 12:00:16 - Waiting for stack create/update to complete
   
   CloudFormation events from stack operations (refresh every 0.5 seconds)
   ---------------------------------------------------------------------------------------------------------------------------------------------
   ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
   ---------------------------------------------------------------------------------------------------------------------------------------------
   UPDATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
   SS
   DELETE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   DELETE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
   ---------------------------------------------------------------------------------------------------------------------------------------------
   
   CloudFormation outputs from deployed stack
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Outputs
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Key                 HelloWorldFunctionIamRole
   Description         Implicit IAM Role created for Hello World function
   Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W
   
   Key                 HelloWorldApi
   Description         API Gateway endpoint URL for Prod stage for Hello World function
   Value               https://<restapiid>.execute-api.us-west-2.amazonaws.com/Prod/hello/
   
   Key                 HelloWorldFunction
   Description         Hello World Lambda Function ARN
   Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-yQDNe17r9maD
   ----------------------------------------------------------------------------------------------------------------------------------------------
   
   
   Successfully created/updated stack - sam-app in us-west-2
   ```

您的应用程序现已部署并在 AWS 云\$1 中运行

## 第 4 步：运行应用程序
<a name="serverless-getting-started-hello-world-run"></a>

在此步骤中，您将向 API 端点发送 GET 请求并查看 Lambda 函数输出。

**获取您的 API 端点值**

1. 从上一步 AWS SAM CLI 显示的信息中，找到 `Outputs` 部分。在该部分找到您的 `HelloWorldApi` 资源以查找 HTTP 端点值。下面是一个示例输出：

   ```
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Outputs
   ----------------------------------------------------------------------------------------------------------------------------------------------
   ...
   Key                 HelloWorldApi
   Description         API Gateway endpoint URL for Prod stage for Hello World function
   Value               https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
   ...
   ----------------------------------------------------------------------------------------------------------------------------------------------
   ```

1. 或者，您可以使用 **sam list endpoints --output json** 命令获取此信息。下面是一个示例输出：

   ```
   $ sam list endpoints --output json
   2023-03-15 12:39:19 Loading policies from IAM...
   2023-03-15 12:39:25 Finished loading policies from IAM.
   [
     {
       "LogicalResourceId": "HelloWorldFunction",
       "PhysicalResourceId": "sam-app-HelloWorldFunction-yQDNe17r9maD",
       "CloudEndpoint": "-",
       "Methods": "-"
     },
     {
       "LogicalResourceId": "ServerlessRestApi",
       "PhysicalResourceId": "ets1gv8lxi",
       "CloudEndpoint": [
         "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod",
         "https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Stage"
       ],
       "Methods": [
         "/hello['get']"
       ]
     }
   ]
   ```

**要调用函数**
+ 使用浏览器或命令行向 API 端点发送 GET 请求。以下是使用 curl 命令的示例。

  ```
  $ curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
  {"message": "hello world"}
  ```

## 第 5 步：在中与你的函数进行交互 AWS 云
<a name="serverless-getting-started-hello-world-remote-invoke"></a>

在此步骤中，您将使用 AWS SAM CLI 在 AWS 云中调用 Lambda 函数。

**要调用云端的 Lambda 函数**

1. 记下上一步中函数的 `LogicalResourceId`。它应该是 `HelloWorldFunction`。

1. 从 `sam-app` 项目目录，在命令行中运行以下命令：

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app
   ```

1. 在云端 AWS SAMCLI调用你的函数并返回响应。下面是一个示例输出：

   ```
   $ sam remote invoke HelloWorldFunction --stack-name sam-app
   
   Invoking Lambda Function HelloWorldFunction                                       
   START RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9 Version: $LATEST
   END RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9
   REPORT RequestId: d5ef494b-5f45-4086-86fd-d7322fa1a1f9  Duration: 6.62 ms       Billed Duration: 7 ms     Memory Size: 128 MB     Max Memory Used: 67 MB  Init Duration: 164.06 ms
   {"statusCode":200,"body":"{\"message\":\"hello world\"}"}%
   ```

## 步骤 6：修改您的应用程序并将其同步到 AWS 云
<a name="serverless-getting-started-hello-world-sync"></a>

在此步骤中，您将使用 AWS SAMCLI**sam sync --watch**命令将本地更改同步到 AWS 云。

**使用 sam 同步**

1. 从 `sam-app` 项目目录，在命令行中运行以下命令：

   ```
   $ sam sync --watch
   ```

1.  AWS SAM CLI 提示您确认正在同步开发堆栈。由于该**sam sync --watch**命令会自动将本地更改实时部署到 AWS 云 中，因此我们建议仅在开发环境中使用该命令。

    AWS SAM CLI 在开始监控本地更改之前会执行初始部署。下面是一个示例输出：

   ```
   $ sam sync --watch
   The SAM CLI will use the AWS Lambda, Amazon API Gateway, and AWS StepFunctions APIs to upload your code without
   performing a CloudFormation deployment. This will cause drift in your CloudFormation stack.
   **The sync command should only be used against a development stack**.
   
   Confirm that you are synchronizing a development stack.
   
   Enter Y to proceed with the command, or enter N to cancel:
    [Y/n]: y
   Queued infra sync. Waiting for in progress code syncs to complete...
   Starting infra sync.
   Manifest is not changed for (HelloWorldFunction), running incremental build
   Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
   Running PythonPipBuilder:CopySource
   
   Build Succeeded
   
   Successfully packaged artifacts and wrote output template to file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63.
   Execute the following command to deploy the packaged template
   sam deploy --template-file /var/folders/45/5ct135bx3fn2551_ptl5g6_80000gr/T/tmpq3x9vh63 --stack-name <YOUR STACK NAME>
   
   
       Deploying with following values
       ===============================
       Stack name                   : sam-app
       Region                       : us-west-2
       Disable rollback             : False
       Deployment s3 bucket         : aws-sam-cli-managed-default-samclisam-s3-demo-bucket-1a4x26zbcdkqr
       Capabilities                 : ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
       Parameter overrides          : {}
       Signing Profiles             : null
   
   Initiating deployment
   =====================
   
   
   2023-03-15 13:10:05 - Waiting for stack create/update to complete
   
   CloudFormation events from stack operations (refresh every 0.5 seconds)
   ---------------------------------------------------------------------------------------------------------------------------------------------
   ResourceStatus                      ResourceType                        LogicalResourceId                   ResourceStatusReason
   ---------------------------------------------------------------------------------------------------------------------------------------------
   UPDATE_IN_PROGRESS                  AWS::CloudFormation::Stack          sam-app                             Transformation succeeded
   CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   CREATE_IN_PROGRESS                  AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   Resource creation Initiated
                                                                           ack
   CREATE_COMPLETE                     AWS::CloudFormation::Stack          AwsSamAutoDependencyLayerNestedSt   -
                                                                           ack
   UPDATE_IN_PROGRESS                  AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE                     AWS::Lambda::Function               HelloWorldFunction                  -
   UPDATE_COMPLETE_CLEANUP_IN_PROGRE   AWS::CloudFormation::Stack          sam-app                             -
   SS
   UPDATE_COMPLETE                     AWS::CloudFormation::Stack          sam-app                             -
   ---------------------------------------------------------------------------------------------------------------------------------------------
   
   CloudFormation outputs from deployed stack
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Outputs
   ----------------------------------------------------------------------------------------------------------------------------------------------
   Key                 HelloWorldFunctionIamRole
   Description         Implicit IAM Role created for Hello World function
   Value               arn:aws:iam::012345678910:role/sam-app-HelloWorldFunctionRole-15GLOUR9LMT1W
   
   Key                 HelloWorldApi
   Description         API Gateway endpoint URL for Prod stage for Hello World function
   Value               https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
   
   Key                 HelloWorldFunction
   Description         Hello World Lambda Function ARN
   Value               arn:aws:lambda:us-west-2:012345678910:function:sam-app-HelloWorldFunction-yQDNe17r9maD
   ----------------------------------------------------------------------------------------------------------------------------------------------
   
   
   Stack update succeeded. Sync infra completed.
   
   Infra sync completed.
   CodeTrigger not created as CodeUri or DefinitionUri is missing for ServerlessRestApi.
   ```

接下来，您将修改 Lambda 函数代码。 AWS SAMCLI将自动检测到此更改，并将您的应用程序同步到 AWS 云。

**修改和同步应用程序**

1. 在选定 IDE 中打开 `sam-app/hello_world/app.py` 文件。

1. 更改 `message` 然后保存文件。以下是示例：

   ```
   import json
   ...
   def lambda_handler(event, context):
       ...
       return {
           "statusCode": 200,
           "body": json.dumps({
               "message": "hello everyone!",
               ...
           }),
       }
   ```

1. 会 AWS SAMCLI检测到您的更改并将您的应用程序同步到。 AWS 云下面是一个示例输出：

   ```
   Syncing Lambda Function HelloWorldFunction...
   Manifest is not changed for (HelloWorldFunction), running incremental build
   Building codeuri: /Users/.../Demo/sam-tutorial1/sam-app/hello_world runtime: python3.9 metadata: {} architecture: x86_64 functions: HelloWorldFunction
   Running PythonPipBuilder:CopySource
   Finished syncing Lambda Function HelloWorldFunction.
   ```

1. 要验证您的更改，请再次向 API 端点发送 GET 请求。

   ```
   $ curl https://ets1gv8lxi.execute-api.us-west-2.amazonaws.com/Prod/hello/
   {"message": "hello everyone!"}
   ```

## 第 7 步：（可选）在本地测试应用程序
<a name="serverless-getting-started-hello-world-test"></a>

**注意**  
此为可选步骤。

**重要**  
此步骤要求您本地计算机上有 Docker。要使用 AWS SAM CLI 进行本地测试，您必须已安装并配置 Docker。有关更多信息，请参阅 [安装 Docker](install-docker.md)。

在此步骤中，您将使用 AWS SAMCLI**sam local**命令在本地测试您的应用程序。为此， AWS SAM CLI 使用 Docker 创建本地环境。此本地环境模拟基于云的 Lambda 函数执行环境。

您将执行以下操作：

1. 为 Lambda 函数创建本地环境并调用它。

1. 在本地托管您的 HTTP API 端点，并使用它调用 Lambda 函数。

**要在本地调用 Lambda 函数**

1. 从 `sam-app` 项目目录，在命令行中运行以下命令：

   ```
   $ sam local invoke
   ```

1.  AWS SAM CLI 创建本地 Docker 容器并调用您的函数。下面是一个示例输出：

   ```
   $ sam local invoke
   Invoking app.lambda_handler (python3.9)
   Local image was not found.
   Removing rapid images for repo public.ecr.aws/sam/emulation-python3.9
   Building image.....................
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
   START RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6 Version: $LATEST
   END RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6
   REPORT RequestId: b046db01-2a00-415d-af97-35f3a02e9eb6    Init Duration: 1.01 ms    Duration: 633.45 ms    Billed Duration: 634 ms    Memory Size: 128 MB    Max Memory Used: 128 MB
   {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}
   ```

**在本地托管 API**

1. 从 `sam-app` 项目目录，在命令行中运行以下命令：

   ```
   $ sam local start-api
   ```

1.  AWS SAM CLI 为您的 Lambda 函数创建一个本地 Docker 容器，并创建一个本地 HTTP 服务器来模拟您的 API 端点。下面是一个示例输出：

   ```
   $ sam local start-api
   Initializing the lambda functions containers.
   Local image is up-to-date
   Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64.
   
   Mounting /Users/.../Demo/sam-tutorial1/sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated inside runtime container
   Containers Initialization is done.
   Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]
   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 AWS SAM CLI if you update your AWS SAM template
   2023-03-15 14:25:21 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
    * Running on http://127.0.0.1:3000
   2023-03-15 14:25:21 Press CTRL+C to quit
   ```

1. 使用浏览器或命令行，向本地 API 端点发送 GET 请求。以下是使用 curl 命令的示例。

   ```
   $ curl http://127.0.0.1:3000/hello
   {"message": "hello world"}
   ```

## 第 8 步：从中删除您的应用程序 AWS 云
<a name="serverless-getting-started-hello-world-delete"></a>

在此步骤中，您将使用 AWS SAMCLI**sam delete**命令从中删除您的应用程序 AWS 云。

**要从中删除您的应用程序 AWS 云**

1. 从 `sam-app` 项目目录，在命令行中运行以下命令：

   ```
   $ sam delete
   ```

1.  AWS SAM CLI 会请您确认。然后，它将删除您的应用程序的 Amazon S3 存储桶和 CloudFormation 堆栈。下面是一个示例输出：

   ```
   $ sam delete
       Are you sure you want to delete the stack sam-app in the region us-west-2 ? [y/N]: y
       Are you sure you want to delete the folder sam-app in S3 which contains the artifacts? [y/N]: y
       - Deleting S3 object with key c6ce8fa8b5a97dd022ecd006536eb5a4
       - Deleting S3 object with key 5d513a459d062d644f3b7dd0c8b56a2a.template
       - Deleting S3 object with key sam-app/2bebf67c79f6a743cc5312f6dfc1efee.template
       - Deleting S3 object with key sam-app/6b208d0e42ad15d1cee77d967834784b.template
       - Deleting S3 object with key sam-app/da3c598813f1c2151579b73ad788cac8
       - Deleting S3 object with key sam-app/f798cdd93cee188a71d120f14a035b11
       - Deleting Cloudformation stack sam-app
   
   Deleted successfully
   ```

## 问题排查
<a name="serverless-getting-started-hello-world-troubleshoot"></a>

要排除故障 AWS SAMCLI，请参阅[AWS SAM CLI 故障排除](sam-cli-troubleshooting.md)。

## 了解详情
<a name="serverless-getting-started-hello-world-learn"></a>

要继续了解 AWS SAM，请参阅以下资源：
+ **[完整 AWS SAM 研讨会](https://s12d.com/sam-ws-en-intro)** - 旨在指导您使用 AWS SAM 提供的许多主要功能的研讨会。
+ **[与 SAM 的会话](https://www.youtube.com/playlist?list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd)** — 由我们的 AWS 无服务器开发者倡导者团队制作的关于使用的 AWS SAM视频系列。
+ **[Serverless Land](https://serverlessland.com/)** – 汇集了关于 AWS 无服务器项目的最新信息、博客、视频、代码和学习资源的网站。

# 将 Lambda 函数转换为应用程序 AWS SAM
<a name="convert-lambda-to-sam"></a>

如果您想在 Lambda 控制台中将某个函数作为基础设施即代码 (IaC) 在 VS Code 中进行管理，则可以将其传输到 VS Code，然后将其转换为模板。 AWS SAM 将函数转换为 AWS SAM 模板后，您可以控制基础架构的版本控制、自动部署、远程调试功能，并在整个开发生命周期中保持一致的环境。借助本地和远程调试功能，您还可以通过在本地和云端逐步执行 AWS 代码、检查变量和设置断点来更有效地解决问题。

有关将函数从控制台迁移以及设置本地开发环境的说明，请参阅*《AWS Lambda 开发人员指南》*中的[使用 VS Code 本地开发 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac-local-development.html)。按照以下说明将 Lambda 函数从控制台移至 VS Code，然后将其转换为模板。 AWS SAM 完成此操作后，您可以：
+ **在 AWS 云端远程调试您的函数。**有关详细信息，请参阅*《AWS Lambda 开发人员指南》*中的[使用 VS Code 远程调试 Lambda 函数](https://docs.aws.amazon.com/lambda/latest/dg/debugging.html)。
+ **将关联资源和权限作为“基础设施即代码”进行管理。**有关详细信息，请参阅*《AWS Lambda 开发者指南》*中的[将 Lambda 与基础设施即代码（IaC）结合使用](https://docs.aws.amazon.com/lambda/latest/dg/foundation-iac.html)。
+ **使用部署和更新您的应用程序 AWS SAMCLI。**有关更多信息，请参阅 [AWS SAM CLI](using-sam-cli.md)。
+ **使用基础设施编辑器来可视化设计您的无服务器架构。**有关详细信息，请参阅[《基础设施编辑器开发人员指南》](https://docs.aws.amazon.com/application-composer/latest/dg/what-is-composer.html)。

## 了解详情
<a name="convert-lambda-to-sam-learn"></a>

要继续了解 AWS SAM，请参阅以下资源：
+ **[完整 AWS SAM 研讨会](https://s12d.com/sam-ws-en-intro)** - 旨在指导您使用 AWS SAM 提供的许多主要功能的研讨会。
+ **[与 SAM 的会话](https://www.youtube.com/playlist?list=PLJo-rJlep0ED198FJnTzhIB5Aut_1vDAd)** — 由我们的 AWS 无服务器开发者倡导者团队制作的关于使用的 AWS SAM视频系列。
+ **[Serverless Land](https://serverlessland.com/)** – 汇集了关于 AWS 无服务器项目的最新信息、博客、视频、代码和学习资源的网站。