

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

# AWS SAM CLI
<a name="using-sam-cli"></a>

AWS Serverless Application Model 命令行接口 (AWS SAMCLI) 是用于本地开发和测试无服务器应用程序的命令行工具。 AWS SAMCLI允许您在部署到云端之前在本地构建、转换、部署、调试、打包、初始化和同步无服务器应用程序。

AWS SAM CLI 支持使用不同框架和基础设施即代码（IaC）工具定义的无服务器应用程序，支持程度各不相同：
+ **AWS SAM 模板** — 为完整功能集提供原生支持，包括本地测试、调试、打包和部署功能。
+ **AWS CDK 应用程序** — 在使用 cdk synth 命令将 CDK 应用程序合成 CloudFormation 到模板后，支持 AWS 对 Lambda 函数进行本地测试。
+ **CloudFormation 模板** — 由于 AWS SAM 扩展而提供直接兼容性 CloudFormation，支持标准 CloudFormation 模板中定义的无服务器资源。
+ **Terraform 应用程序** - 为 Lambda 函数的构建和本地测试提供有限支持。要求您生成代表您的 TerraForm 定义的 Lambda 函数的 AWS SAM 模板工件。

为了获得最全面的功能支持和简化的开发者体验，我们建议使用原生 AWS SAM 模板。

**Topics**
+ [AWS SAM CLI 命令是如何记录的](#using-sam-cli-documentation)
+ [配置 AWS SAM CLI](using-sam-cli-configure.md)
+ [AWS SAMCLI 核心命令](using-sam-cli-corecommands.md)
+ [使用 AWS SAM CLI 进行本地测试](using-sam-cli-local-testing.md)

## AWS SAM CLI 命令是如何记录的
<a name="using-sam-cli-documentation"></a>

使用以下格式对AWS SAM CLI 命令进行记录：
+ **提示** – 默认情况下，Linux 提示被记录下来并显示为 (`$ `)。对于 Windows 特定的命令，(`> `) 用作提示。请勿在键入命令时包含提示符。
+ **目录** – 当必须从特定目录执行命令时，目录名称将显示在提示符符号之前。
+ **用户输入** – 您在命令行处输入的命令文本采用 **user input** 格式。
+ **可替换文**本-可变文本（例如文件名和参数）的格式为*replaceable text*。在多行命令中或需要特定键盘输入的命令中，键盘输入也可显示为可替换文本。例如 *ENTER*。
+ **输出** – 作为对命令的响应而返回的输出格式为 `computer output`。

下面是 `sam deploy` 命令和输出的示例：

```
$ sam deploy --guided --template template.yaml

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]: ENTER
    #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. `sam deploy --guided --template template.yaml` 是您在命令行中输入的命令。

1. **sam deploy --guided --template** 应按原样提供。

1. *template.yaml*可以用您的特定文件名替换。

1. 输出开始于 `Configuring SAM deploy`。

1. 在输出中，*ENTER*并*y*指明您提供的可替换值。

# 配置 AWS SAM CLI
<a name="using-sam-cli-configure"></a>

的好处之一 AWS SAM 是，它通过删除重复的任务来优化开发人员的时间。 AWS SAMCLI包括为此目的`samconfig`而命名的配置文件。默认情况下，不需要对 AWS SAMCLI进行配置，但您可以更新配置文件，允许在配置文件中引用您的自定义参数， AWS SAM 从而使用更少的参数运行命令。下表中的示例显示了如何优化命令：


| 原始 | 使用 `samconfig` 进行优化 | 
| --- | --- | 
| **sam build --cached --parallel --use-containers** | **sam build** | 
| **sam local invoke --env-vars locals.json** | **sam local invoke** | 
| **sam local start-api --env-vars locals.json --warm-containers EAGER** | **sam local start-api** | 

 AWS SAMCLI 提供了一组命令来帮助开发人员创建、开发和部署无服务器应用程序。其中每个命令都可以根据应用程序和开发人员的偏好使用可选标志进行配置。有关更多信息，请参阅[中的AWS SAMCLI内容 GitHub](https://github.com/aws/aws-sam-cli)

本节中的主题介绍如何创建 [AWS SAMCLI 配置文件](serverless-sam-cli-config.md) 和自定义默认设置，以优化无服务器应用程序的开发时间。

**Topics**
+ [如何创建配置文件（`samconfig` 文件）](#using-sam-cli-configure-create)
+ [配置项目设置](#using-sam-cli-configure-project)
+ [配置凭证和基本设置](#using-sam-cli-configure-basic)

## 如何创建配置文件（`samconfig` 文件）
<a name="using-sam-cli-configure-create"></a>

 AWS SAMCLI配置文件（文件名`samconfig`）是一个文本文件，通常使用 TOML 结构，但也可以采用 YAML。使用 AWS 快速入门模板时，此文件是在您运行**sam init**命令时创建的。使用 **sam deploy -\$1-guided** 命令部署应用程序时，可以更新此文件。

部署完成后，如果使用默认值，则 `samconfig` 文件将包含一个名为 `default` 的配置文件。重新运行该**deploy**命令时，会 AWS SAM 应用此配置文件中存储的配置设置。

该`samconfig`文件的好处是，除了 deploy 命令之外，还可以 AWS SAM 存储任何其他可用命令的配置设置。除了在新部署时创建的这些值外，您还可以在`samconfig`文件中设置许多属性，这些属性可以简化开发人员工作流程的其他方面 AWS SAMCLI。

## 配置项目设置
<a name="using-sam-cli-configure-project"></a>

您可以在配置文件中指定项目特定的设置，例如 AWS SAMCLI命令参数值，以便与一起使用。 AWS SAMCLI有关此配置文件的更多信息，请参阅[AWS SAMCLI 配置文件](serverless-sam-cli-config.md)。

### 使用配置文件
<a name="using-sam-cli-configure-project-using"></a>

配置文件由环境、命令和参数值构成。有关更多信息，请参阅 [配置文件基础](serverless-sam-cli-config.md#serverless-sam-cli-config-basics)。

**配置新环境**

1. 在配置文件中指定新环境。

   在以下示例中，指定了新的 `prod` 环境：

------
#### [ TOML ]

   ```
   [prod.global.parameters]
   ```

------
#### [ YAML ]

   ```
   prod:
     global:
       parameters:
   ```

------

1. 在配置文件的参数部分将参数值指定为键值对。

   在以下示例中，为 `prod` 环境指定了应用程序的堆栈名称。

------
#### [ TOML ]

   ```
   [prod.global.parameters]
   stack_name = "prod-app"
   ```

------
#### [ YAML ]

   ```
   prod:
     global:
       parameters:
         stack_name: prod-app
   ```

------

1. 使用 `--config-env` 选项指定要使用的环境。

   以下是示例：

   ```
   $ sam deploy --config-env "prod"
   ```

**配置参数值**

1. 指定要为其配置参数值的 AWS SAM CLI 命令。要为所有 AWS SAM CLI 命令配置参数值，请使用 `global` 标识符。

   在以下示例中，为 `default` 环境的 `sam deploy` 命令指定了参数值：

------
#### [ TOML ]

   ```
   [default.deploy.parameters]
   confirm_changeset = true
   ```

------
#### [ YAML ]

   ```
   default:
     deploy:
       parameters:
         confirm_changeset: true
   ```

------

   在以下示例中，为 `default` 环境中的所有 AWS SAM CLI 命令指定了参数值：

------
#### [ TOML ]

   ```
   [default.global.parameters]
   stack_name = "sam-app"
   ```

------
#### [ YAML ]

   ```
   default:
     global:
       parameters:
         stack_name: sam-app
   ```

------

1. 您还可以通过 AWS SAM CLI 交互式流程指定参数值并修改配置文件。

   以下是 `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
   ```

有关更多信息，请参阅 [创建和修改配置文件](serverless-sam-cli-config.md#serverless-sam-cli-config-using)。

### 示例
<a name="using-sam-cli-configure-project-examples"></a>

#### 基本TOML示例
<a name="using-sam-cli-configure-project-examples-toml"></a>

下面是`samconfig.toml`配置文件的示例：

```
...
version = 0.1

[default]
[default.global]
[default.global.parameters]
stack_name = "sam-app"

[default.build.parameters]
cached = true
parallel = true

[default.deploy.parameters]
capabilities = "CAPABILITY_IAM"
confirm_changeset = true
resolve_s3 = true

[default.sync.parameters]
watch = true

[default.local_start_api.parameters]
warm_containers = "EAGER"

[prod]
[prod.sync]
[prod.sync.parameters]
watch = false
```

#### 基本YAML示例
<a name="using-sam-cli-configure-project-examples-yaml"></a>

下面是`samconfig.yaml`配置文件的示例：

```
version 0.1
default:
  global:
    parameters:
      stack_name: sam-app
  build:
    parameters:
      cached: true
      parallel: true
  deploy:
    parameters:
      capabilities: CAPABILITY_IAM
      confirm_changeset: true
      resolve_s3: true
  sync:
    parameters:
      watch: true
  local_start_api:
    parameters:
      warm_containers: EAGER
prod:
  sync:
    parameters:
      watch: false
```

## 配置凭证和基本设置
<a name="using-sam-cli-configure-basic"></a>

使用 AWS Command Line Interface (AWS CLI) 配置基本设置，例如 AWS 凭据、默认区域名称和默认输出格式。配置完成后，您可以将这些设置与 AWS SAM CLI 结合使用。要了解更多信息，请参阅*《AWS Command Line Interface 用户指南》*中的以下主题：
+ [配置基础知识](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)
+ [配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
+ [的命名个人资料 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
+ [使用启用了 IAM Identity Center 的命名配置文件](https://docs.aws.amazon.com/cli/latest/userguide/sso-using-profile.html)

有关快速设置说明，请参阅[步骤 5： AWS CLI 使用配置 AWS 凭证](prerequisites.md#prerequisites-configure-credentials)。

# AWS SAMCLI 核心命令
<a name="using-sam-cli-corecommands"></a>

AWS SAMCLI 有一些基本命令，可用于创建、构建、测试、部署和同步无服务器应用程序。下表列出了这些命令，并提供了每个命令的更多信息链接。

有关 AWS SAMCLI 命令的完整列表，请参阅 [AWS SAM CLI 命令参考](serverless-sam-cli-command-reference.md)。


| 命令 | 作用 | 相关主题 | 
| --- | --- | --- | 
| **sam build** | 为开发人员工作流程中的后续步骤做好准备，例如本地测试或部署到 AWS 云端。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/using-sam-cli-corecommands.html)  | 
| **sam deploy** | 使用 CloudFormation将应用程序部署到 AWS 云端。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/using-sam-cli-corecommands.html)  | 
| **sam init** | 提供用于初始化和创建新的无服务器应用程序的选项。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/using-sam-cli-corecommands.html)  | 
| **sam local** | 提供用于在本地测试无服务器应用程序的子命令。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/using-sam-cli-corecommands.html)  | 
| **sam remote invoke** | 提供一种与 AWS 云中支持的 AWS 资源进行交互的方式。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/using-sam-cli-corecommands.html)  | 
| **sam remote test-event** | 提供一种访问和管理您的 Lambd AWS a 函数的可共享测试事件的方法。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/using-sam-cli-corecommands.html)  | 
| **sam sync** | 提供将本地应用程序更改快速同步到 AWS 云端的选项。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/using-sam-cli-corecommands.html)  | 

# 使用 AWS SAM CLI 进行本地测试
<a name="using-sam-cli-local-testing"></a>

 AWS SAM CLI 使您能够在不同的基础设施即代码（IaC）工具上本地测试无服务器应用程序。本指南说明了如何使用 AWS SAM CLI 配合各种 IaC 框架进行本地测试。

使用 AWS SAM CLI 进行本地测试的主要优势包括：
+ **快速开发**-无需部署到即可测试代码更改 AWS
+ **成本效益**-无需支付费用即可进行开发和测试 AWS 
+ **离线功能** - 无需网络连接即可处理应用程序
+ **简化调试** - 在本地使用调试器逐步执行 Lambda 函数代码
+ **真实测试**-使用本地服务仿真来测试您的应用程序 AWS 

## 在本地测试 AWS SAM 应用程序
<a name="using-sam-cli-local-testing-sam"></a>

有关测试使用 AWS SAM 模板定义的应用程序的信息，请参阅本指南中的[测试和调试无服务器应用程序](serverless-test-and-debug.md)。

## 在本地测试 CloudFormation 模板
<a name="using-sam-cli-local-testing-cfn"></a>

要将 AWS SAMCLI的本地测试功能与一起使用 CloudFormation，请将 AWS SAM 转换添加到您的 CloudFormation 模板中。有关更多信息，请参阅 [AWS SAM 模板剖析中](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-specification-template-anatomy.html)的以下内容：
+ 向 CloudFormation 模板添加 AWS SAM 转换
+ 了解模板兼容性
+ 搜索无服务器资源语法

## 在本地测试 AWS CDK 应用程序
<a name="using-sam-cli-local-testing-cdk"></a>

使用 cdk synth 命令将 AWS CDK 应用程序合成到 CloudFormation 模板后，您可以使用在本地测试 AWS CDK 应用程序。 AWS SAMCLI

有关更多信息，请查看 [AWS CDK 开发者指南 AWS SAMCLI中的本地测试和构建 AWS CDK 应用程序](https://docs.aws.amazon.com/cdk/v2/guide/testing-locally.html)。这包括：
+ [本地测试入门](https://docs.aws.amazon.com/cdk/v2/guide/testing-locally.html#testing-locally-getting-started)
+ [使用本地测试 AWS CDK 应用程序 AWS SAM](https://docs.aws.amazon.com/cdk/v2/guide/testing-locally.html#testing-locally-sam)

## 在本地测试 Terraform 应用程序
<a name="using-sam-cli-local-testing-terraform"></a>

 AWS SAMCLI 支持 Terraform 项目和 Terraform Cloud。您可以使用它对以下内容进行本地调试和测试：Lambda 函数和层以及 Amazon API Gateway HTTP 和 REST。 APIs

要设置您的环境并了解所有可用的功能，请参阅本指南中的 [Terraform 支持](terraform-support.md)。这包括：
+ [AWS SAM CLI 的 Terraform 支持入门](gs-terraform-support.md)
+ [使用 AWS SAM CLI 和 Terraform 进行本地调试和测试](using-samcli-terraform.md)