

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

# 使用 sam local start-lambda 进行测试简介
<a name="using-sam-cli-local-start-lambda"></a>

使用 AWS SAMCLI子命令通过 AWS CLI 和调`sam local start-lambda`用您的 Lambda 函数。 SDKs此命令启动模拟 Lambda 的本地端点。
+ 有关简介 AWS SAMCLI，请参阅 [那是什么 AWS SAMCLI？](what-is-sam-overview.md#what-is-sam-cli)
+ 有关 `sam local start-lambda` 命令选项的列表，请参阅 [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md)。

**注意**  
`sam local start-lambda`支持具有自动检查点和重播功能的耐用功能。耐用函数可与本地 Lambda 端点无缝协作。

## 先决条件
<a name="using-sam-cli-local-start-api-prerequisites"></a>

要使用 `sam local start-lambda`，请完成以下操作安装 AWS SAM CLI。
+ [AWS SAM 先决条件](prerequisites.md).
+ [安装 AWS SAM CLI](install-sam-cli.md).

我们建议您在使用 `sam local start-lambda` 之前初步了解以下主题：
+ [配置 AWS SAM CLI](using-sam-cli-configure.md).
+ [在中创建您的应用程序 AWS SAM](using-sam-cli-init.md).
+ [搭建简介 AWS SAM](using-sam-cli-build.md).
+ [使用部署简介 AWS SAM](using-sam-cli-deploy.md).

## 使用 sam local start-lambda
<a name="using-sam-cli-local-start-lambda-use"></a>

当您运行 `sam local start-lambda` 时， AWS SAM CLI 会假设当前工作目录是项目的根目录。 AWS SAM CLI 会首先在 `.aws-sam` 子文件夹中查找 `template.[yaml|yml]` 文件。如果找不到， AWS SAM CLI 会在当前工作目录中查找 `template.[yaml|yml]` 文件。

**要使用 sam local start-lambda**

1. 从项目的根目录中，运行以下命令：

   ```
   $ sam local start-lambda <options>
   ```

1.  AWS SAM CLI 会在本地 Docker 容器中构建 Lambda 函数。然后，它会将本地地址输出到 HTTP 服务器端点。以下是示例：

   ```
   $ sam local start-lambda
   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/.../sam-app/hello_world as /var/task:ro,delegated, inside runtime container
   Containers Initialization is done.
   Starting the Local Lambda Service. You can now invoke your Lambda Functions defined in your template through the endpoint.
   2023-04-13 07:25:43 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:3001
   2023-04-13 07:25:43 Press CTRL+C to quit
   ```

1. 使用 AWS CLI 或在本地调 SDKs 用您的 Lambda 函数。

   以下是一个使用 AWS CLI的示例：

   ```
   $ aws lambda invoke --function-name "HelloWorldFunction" --endpoint-url "http://127.0.0.1:3001" --no-verify-ssl out.txt
       
   StatusCode: 200
   (END)
   ```

   以下是使用 for AWS SDK 的示例Python：

   ```
   import boto3
   from botocore.config import Config
   from botocore import UNSIGNED
   
   lambda_client = boto3.client('lambda',
                                endpoint_url="http://127.0.0.1:3001",
                                use_ssl=False,
                                verify=False,
                                config=Config(signature_version=UNSIGNED,
                                              read_timeout=1,
                                              retries={'max_attempts': 0}
                                              )
                               )
   lambda_client.invoke(FunctionName="HelloWorldFunction")
   ```

## 选项
<a name="using-sam-cli-local-start-lambda-options"></a>

### 指定模板
<a name="using-sam-cli-local-start-lambda-options-template"></a>

要为 AWS SAM CLI 指定要引用的模板，请使用 `--template` 选项。 AWS SAMCLI将只加载该 AWS SAM 模板及其指向的资源。以下是示例：

```
$ sam local start-lambda --template myTemplate.yaml
```

有关 AWS SAM 模板的更多信息，请参阅[AWS SAM 模板解剖学](sam-specification-template-anatomy.md)。

## 最佳实践
<a name="using-sam-cli-local-start-lambda-best"></a>

如果应用程序有无法运行 `sam build` 的 `.aws-sam` 目录，请务必在每次更新函数代码时都运行 `sam build`。然后，运行 `sam local start-lambda`，以在本地测试更新后的函数代码。

本地测试是部署到云中之前进行快速开发和测试的理想解决方案。但是，本地测试并不能验证所有内容，例如，不能验证云端资源之间的权限。尽可能在云端测试应用程序。我们建议[使用 `sam sync`](using-sam-cli-sync.md) 来加快云测试工作流程。

## 了解详情
<a name="using-sam-cli-local-start-lambda-learn"></a>

有关全部 `sam local start-lambda` 选项的列表，请参阅 [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md)。