

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

# AWS SAM CLI Terraform 支持
<a name="terraform-support"></a>

本节介绍在Terraform项目和Terraform云端中使用 AWS Serverless Application Model 命令行界面 (AWS SAMCLI)。

要提供反馈和提交功能请求，请创建 [GitHub 问题](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform)。

**Topics**
+ [AWS SAM CLI 的 Terraform 支持入门](gs-terraform-support.md)
+ [使用 AWS SAM CLI 和 Terraform 进行本地调试和测试](using-samcli-terraform.md)
+ [将 AWS SAM CLI 与 Serverless.tf 一起使用进行本地调试和测试](using-samcli-serverlesstf.md)
+ [结合使用AWS SAM CLI 和 Terraform 参考](terraform-reference.md)
+ [AWS SAM CLI 对于 Terraform 支持什么？](#what-is-terraform-support)

# AWS SAM CLI 的 Terraform 支持入门
<a name="gs-terraform-support"></a>

本主题介绍如何开始使用 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) Terraform。

要提供反馈和提交功能请求，请创建 [GitHub 问题](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform)。

**Topics**
+ [AWS SAM CLI Terraform 先决条件](#gs-terraform-support-prerequisites)
+ [将 AWS SAM CLI 命令与 Terraform 结合使用](#gs-terraform-support-using)
+ [为 Terraform 项目做好准备](#gs-terraform-support-projects)
+ [设置 Terraform Cloud](#gs-terraform-support-cloud)

## AWS SAM CLI Terraform 先决条件
<a name="gs-terraform-support-prerequisites"></a>

完成所有先决条件，即可开始在 Terraform 项目中使用 AWS SAM CLI。

1. 

**安装或升级 AWS SAM CLI**

   要检查是否已 AWS SAM CLI 安装，请运行以下命令：

   ```
   $ sam --version
   ```

   如果已安装 AWS SAM CLI，则输出将显示一个版本。要升级到最新版本，请参阅 [升级 AWS SAM CLI](manage-sam-cli-versions.md#manage-sam-cli-versions-upgrade)。

   有关安装 AWS SAM CLI 及其所有先决条件的说明，请参阅 [安装 AWS SAM CLI](install-sam-cli.md)。

1. 

**安装 Terraform**

   要检查是否已安装 Terraform，请运行以下命令：

   ```
   $ terraform -version
   ```

   要安装 Terraform，请参阅 *Terraform 注册表*中的[安装 Terraform](https://developer.hashicorp.com/terraform/downloads)。

1. 

**安装 Docker 以进行本地测试**

    AWS SAM CLI 进行本地测试需要 Docker。要安装 Docker，请参阅 [安装 Docker 以与 AWS SAM CLI 一起使用](install-docker.md)。

## 将 AWS SAM CLI 命令与 Terraform 结合使用
<a name="gs-terraform-support-using"></a>

运行支持的 AWS SAM CLI 命令时，请使用 `--hook-name` 选项并提供 `terraform` 值。以下是示例：

```
$ sam local invoke --hook-name terraform
```

您可以按照以下步骤在 AWS SAM CLI 配置文件中配置此选项：

```
hook_name = "terraform"
```

## 为 Terraform 项目做好准备
<a name="gs-terraform-support-projects"></a>

完成本主题中的步骤，即可在 Terraform 项目中使用 AWS SAM CLI。

如果您在Terraform项目之外构建 AWS Lambda 工件，则无需进行其他设置。[使用 AWS SAM CLI 和 Terraform 进行本地调试和测试](using-samcli-terraform.md)要开始使用，请参阅 AWS SAMCLI。

如果在 Terraform 项目中构建 Lambda 构件，您必须执行以下操作：

1. 安装 Python 3.8 或更高版本

1. 安装 Make 工具。

1. 在 Terraform 项目中定义您的 Lambda 构件构建逻辑。

1. 定义 `sam metadata` 资源以告知 AWS SAM CLI 您的构建逻辑。

1. 使用 AWS SAMCLI`sam build`命令来构建 Lambda 工件。

### 安装 Python 3.8 或更高版本
<a name="gs-terraform-support-projects-python"></a>

Python必须有 3.8 或更高版本才能与一起使用 AWS SAMCLI。运行 `sam build` 时， AWS SAM CLI 会创建包含用于构建 Lambda 构件 Python 命令的 `makefiles`。

有关安装说明，请参阅 Python 的*《初学者指南》* 中的[下载 Python](https://wiki.python.org/moin/BeginnersGuide/Download)。

运行以下命令验证 Python 3.8 或更高版本是否已添加到您的计算机路径中：

```
$ python --version
```

输出应显示 Python 3.8 或更高版本。

### 安装 Make 工具
<a name="gs-terraform-support-projects-make"></a>

GNU [Make](https://www.gnu.org/software/make/) 是一种控制项目可执行文件和其他非源文件生成的工具。 AWS SAM CLI 创建 `makefiles`，其依赖此工具来构建 Lambda 构件。

如果您尚未在本地计算机上安装 Make，请在继续操作之前进行安装。

对于 Windows，您可以使用 [Chocolatey](https://chocolatey.org/) 进行安装。有关说明，请参阅*如何在 Windows 中安装和使用 “Make”* 中的[使用 Chocolatey](https://www.technewstoday.com/install-and-use-make-in-windows/#using-chocolatey)

### 定义 Lambda 构件的构建逻辑
<a name="gs-terraform-support-projects-logic"></a>

使用 `null_resource` Terraform 资源类型来定义您的 Lambda 构建逻辑。以下是使用自定义生成脚本构建 Lambda 函数的示例。

```
resource "null_resource" "build_lambda_function" {
    triggers = {
        build_number = "${timestamp()}" 
    }

    provisioner "local-exec" {
        command =  substr(pathexpand("~"), 0, 1) == "/"? "./py_build.sh \"${local.lambda_src_path}\" \"${local.building_path}\" \"${local.lambda_code_filename}\" Function" : "powershell.exe -File .\\PyBuild.ps1 ${local.lambda_src_path} ${local.building_path} ${local.lambda_code_filename} Function"
    }
}
```

### 定义 sam metadata 资源
<a name="gs-terraform-support-projects-metadata"></a>

`sam metadata` 资源是一种 `null_resource` Terraform 资源类型，它为 AWS SAM CLI 提供查找您的 Lambda 构件所需的信息。项目中的每个 Lambda 函数或层都需要一个唯一的 `sam metadata` 资源。要了解有关此资源类型的更多信息，请参阅 *Terraform 注册表*中的 [null\$1resource](https://registry.terraform.io/providers/hashicorp/null/latest/docs/resources/resource)。

**要定义 sam metadata 资源**

1. 以 `sam_metadata_` 开头命名您的资源，以将该资源标识为 sam metadata 资源。

1. 在资源 `triggers` 块中定义您的 Lambda 构件属性。

1. 使用 `depends_on` 参数指定包含您的 Lambda 构建逻辑的 `null_resource`。

   以下是一个示例模板：

   ```
   resource "null_resource" "sam_metadata_..." {
     triggers = {
       resource_name = resource_name
       resource_type = resource_type
       original_source_code = original_source_code
       built_output_path = built_output_path
     }
     depends_on = [
       null_resource.build_lambda_function # ref to your build logic
     ]
   }
   ```

   以下是 `sam metadata` 资源示例：

   ```
   resource "null_resource" "sam_metadata_aws_lambda_function_publish_book_review" {
       triggers = {
           resource_name = "aws_lambda_function.publish_book_review"
           resource_type = "ZIP_LAMBDA_FUNCTION"
           original_source_code = "${local.lambda_src_path}"
           built_output_path = "${local.building_path}/${local.lambda_code_filename}"
       }
       depends_on = [
           null_resource.build_lambda_function
       ]
   }
   ```

您的 `sam metadata` 资源内容将因 Lambda 资源类型（函数或层）和打包类型（ZIP 或图像）而异。有关更多信息以及示例，请参阅 [sam 元数据资源](terraform-sam-metadata.md)。

当您配置 `sam metadata` 资源并使用支持的 AWS SAM CLI 命令时， AWS SAM CLI 将在运行该 AWS SAM CLI 命令之前生成元数据文件。生成此文件后，您可以使用带有未来 AWS SAM CLI 命令的 `--skip-prepare-infra` 选项来跳过元数据生成过程并节省时间。只有在您尚未对基础设施进行任何更改（例如创建新的 Lambda 函数或新的 API 端点）时，才应使用此选项。

### 使用 AWS SAM CLI 来构建 Lambda 构件
<a name="gs-terraform-support-projects-build"></a>

使用 AWS SAMCLI`sam build`命令来构建 Lambda 工件。当您运行 `sam build` 时， AWS SAM CLI 会执行以下操作：

1. 在您的 Terraform 项目中寻找 `sam metadata` 资源以了解和查找您的 Lambda 资源。

1. 启动您的 Lambda 构建逻辑以构建您的 Lambda 构件。

1. 创建用于整理Terraform项目的`.aws-sam`目录，以便与 AWS SAMCLI`sam local`命令一起使用。

**要使用 sam build 进行构建**

1. 在包含 Terraform 根模块的目录中，运行以下命令：

   ```
   $ sam build --hook-name terraform
   ```

1. 要构建特定的 Lambda 函数或层，请运行以下命令

   ```
   $ sam build --hook-name terraform lambda-resource-id
   ```

   Lambda 资源 ID 可以是 Lambda 函数名称或完整 Terraform 资源地址，例如 `aws_lambda_function.list_books` 或 `module.list_book_function.aws_lambda_function.this[0]`。

如果您的函数源代码或其他 Terraform 配置文件位于 Terraform 根模块所在的目录之外，则需要指定位置。使用 `--terraform-project-root-path` 选项指定包含这些文件的顶级目录的绝对或相对路径。以下是示例：

```
$ sam build --hook-name terraform --terraform-project-root-path ~/projects/terraform/demo
```

#### 使用容器构建
<a name="gs-terraform-support-projects-build-container"></a>

运行 AWS SAMCLI`sam build`命令时，您可以将配置 AWS SAMCLI为使用本地Docker容器构建应用程序。

**注意**  
您一定已经安装并配置 Docker。有关说明，请参阅[安装 Docker 以与 AWS SAM CLI 一起使用](install-docker.md)。

**要使用容器构建**

1. 创建包含 Terraform、Python、和 Make 工具的 `Dockerfile`。您还应该纳入 Lambda 函数运行时。

   以下是 `Dockerfile` 示例：

   ```
   FROM public.ecr.aws/amazonlinux/amazonlinux:2
   
   RUN yum -y update \
       && yum install -y unzip tar gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \
       less libcurl-devel openssl openssl-devel readline-devel xz-devel \
       zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \
       && rm -rf /var/cache/yum
   
   RUN yum -y install make \
       && yum -y install zip
   
   RUN yum install -y yum-utils \
       && yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo \
       && yum -y install terraform \
       && terraform --version
   
   # AWS Lambda Builders
   RUN amazon-linux-extras enable python3.8
   RUN yum clean metadata && yum -y install python3.8
   RUN curl -L get-pip.io | python3.8
   RUN pip3 install aws-lambda-builders
   RUN ln -s /usr/bin/python3.8 /usr/bin/python3
   RUN python3 --version
   
   VOLUME /project
   WORKDIR /project
   
   ENTRYPOINT ["sh"]
   ```

1. 使用 [https://docs.docker.com/engine/reference/commandline/build/](https://docs.docker.com/engine/reference/commandline/build/) 构建您的 Docker 映像。

   以下是示例：

   ```
   $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
   ```

1. 使用`--use-container`和`--build-image`选项运行 AWS SAMCLI`sam build`命令。

   以下是示例：

   ```
   $ sam build --use-container --build-image terraform-build:v1
   ```

### 后续步骤
<a name="gs-terraform-support-projects-next"></a>

要开始在 Terraform 项目中使用 AWS SAM CLI，请参阅 [使用 AWS SAM CLI 和 Terraform 进行本地调试和测试](using-samcli-terraform.md)。

## 设置 Terraform Cloud
<a name="gs-terraform-support-cloud"></a>

我们建议您使用 Terraform v1.6.0 或更新版本。如果使用较旧版本，您必须在本地生成 Terraform 计划文件。本地计划文件为 AWS SAM CLI提供了执行本地测试和调试所需的信息。

**要生成本地计划文件**
**注意**  
Terraform v1.6.0 或更高版本不需要这些步骤。要开始使用 wit AWS SAM CLI hTerraform Cloud，请参阅[结合使用 AWS SAM CLI 和 Terraform](using-samcli-terraform.md)。

1. **配置 API 令牌** – 令牌的类型将取决于您的访问级别。有关更多信息，请参阅 *Terraform Cloud 文档*中的 [API 令牌](https://developer.hashicorp.com/terraform/cloud-docs/users-teams-organizations/api-tokens)。

1. **设置 API 令牌环境变量** – 以下是命令行的示例：

   ```
   $ export TOKEN="<api-token-value>"
   ```

1. **获取您的运行 ID** — 在Terraform Cloud控制台中，找到您要用于的Terraform运行的运行 ID AWS SAMCLI。

   运行 ID 位于您运行的页面导览痕迹路径中。  
![\[显示运行 ID 的 Terraform Cloud 页面导览痕迹路径。\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/images/terraform-01.png)

1. **获取计划文件** – 使用您的 API 令牌获取本地计划文件。以下是来自命令行的示例：

   ```
   curl \
      --header "Authorization: Bearer $TOKEN" \
      --header "Content-Type: application/vnd.api+json" \
      --location \
      https://app.terraform.io/api/v2/runs/<run ID>/plan/json-output \
      > custom_plan.json
   ```

您现在已准备好将 AWS SAM CLI 与 Terraform Cloud 一起使用。使用支持的 AWS SAM CLI 命令时，请使用 `--terraform-plan-file` 选项指定本地计划文件的名称和路径。以下是示例：

```
$ sam local invoke --hook-name terraform --terraform-plan-file custom-plan.json
```

以下是使用 `sam local start-api` 命令的示例:

```
$ sam local start-api --hook-name terraform --terraform-plan-file custom-plan.json
```

有关可使用这些示例的示例应用程序，请参阅 *aws-samples GitHub 存储库*中的 [api\$1gateway\$1v2\$1tf\$1cloud](https://github.com/aws-samples/aws-sam-terraform-examples/tree/main/ga/api_gateway_v2_tf_cloud)。

### 后续步骤
<a name="gs-terraform-support-cloud-next"></a>

要开始使用 AWS SAM CLI 和 Terraform Cloud，请参阅 [使用 AWS SAM CLI 和 Terraform 进行本地调试和测试](using-samcli-terraform.md)。

# 使用 AWS SAM CLI 和 Terraform 进行本地调试和测试
<a name="using-samcli-terraform"></a>

本主题介绍如何在Terraform项目中使用支持的 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) 命令以及Terraform Cloud。

要提供反馈和提交功能请求，请创建 [GitHub 问题](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform)。

**Topics**
+ [使用 sam local invoke 进行本地测试](#using-samcli-terraform-local-invoke)
+ [使用 sam local start-api 进行本地测试](#using-samcli-terraform-local-start-api)
+ [使用 sam local start-lambda 进行本地测试](#using-samcli-terraform-local-start-lambda)
+ [Terraform 限制](#using-samcli-terraform-unsupported)

## 使用 sam local invoke 进行本地测试
<a name="using-samcli-terraform-local-invoke"></a>

**注意**  
要使用 AWS SAM CLI 进行本地测试，您必须安装并配置 Docker。有关说明，请参阅[安装 Docker 以与 AWS SAM CLI 一起使用](install-docker.md)。

以下是通过传入事件进行 Lambda 函数本地测试的示例：

```
$ sam local invoke --hook-name terraform hello_world_function -e events/event.json -
```

要了解有关使用此命令的更多信息，请参阅 [使用 sam local invoke 进行测试简介](using-sam-cli-local-invoke.md)。

## 使用 sam local start-api 进行本地测试
<a name="using-samcli-terraform-local-start-api"></a>

要将 `sam local start-api` 与 Terraform 结合使用，请运行以下命令：

```
$ sam local start-api --hook-name terraform
```

以下是示例：

```
$ sam local start-api --hook-name terraform                                                                                                                                                                                                                                                                                           
                                                                                                                                                                                                          
Running Prepare Hook to prepare the current application                                                                                                                                                   
Executing prepare hook of hook "terraform"                                                                                                                                                                
Initializing Terraform application                                                                                                                                                                        
...
Creating terraform plan and getting JSON output                                                                                                                                                           
....
Generating metadata file                                                                                                                                                                                  
                                                                                                                                                                                                          
Unresolvable attributes discovered in project, run terraform apply to resolve them.                                                                                                                       
                                                                                                                                                                                                          
Finished generating metadata file. Storing in...
Prepare hook completed and metadata file generated at: ...    
Mounting HelloWorldFunction at http://127.0.0.1:3000/hello [GET]                                                                                                                                          
Mounting None at http://127.0.0.1:3000/hello [POST]                                                                                                                                                       
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 SAM CLI if you update your AWS SAM template                     
2023-06-26 13:21:20  * Running on http://127.0.0.1:3000/ (Press CTRL+C to quit)
```

要了解有关此命令的更多信息，请参阅 [使用 sam local start-api 进行测试简介](using-sam-cli-local-start-api.md)。

### 使用 Lambda 授权方的 Lambda 函数
<a name="using-sam-cli-terraform-local-start-api-authorizers"></a>

对于配置为使用 Lambda 授权方的 Lambda 函数， AWS SAM CLI 将在调用您的 Lambda 函数端点之前自动调用您的 Lambda 授权方。
+ 要在中了解有关此功能的更多信息 AWS SAMCLI，请参阅[使用 Lambda 授权方的 Lambda 函数](using-sam-cli-local-start-api.md#using-sam-cli-local-start-api-authorizers)。
+ 有关在 Terraform 中使用 Lambda 授权方的更多信息，请参阅 *Terraform 注册表*中的 [https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_authorizer#example-usage](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/api_gateway_authorizer#example-usage)。

## 使用 sam local start-lambda 进行本地测试
<a name="using-samcli-terraform-local-start-lambda"></a>

以下是使用 AWS Command Line Interface ()AWS CLI在本地测试 Lambda 函数的示例：

1. 使用 AWS SAM CLI 创建本地测试环境：

   ```
   $ sam local start-lambda --hook-name terraform hello_world_function
   ```

1. 使用在本地调 AWS CLI 用您的函数：

   ```
   $ aws lambda invoke --function-name hello_world_function --endpoint-url http://127.0.0.1:3001/ response.json --cli-binary-format raw-in-base64-out --payload file://events/event.json
   ```

要了解有关此命令的更多信息，请参阅 [使用 sam local start-lambda 进行测试简介](using-sam-cli-local-start-lambda.md)。

## Terraform 限制
<a name="using-samcli-terraform-unsupported"></a>

以下是将 AWS SAM CLI 与 Terraform 一起使用时的限制：
+ 链接到多个层的 Lambda 函数。
+ 定义资源之间链接的 Terraform 局部变量。
+ 引用尚未创建的 Lambda 函数。这包括在 REST API 资源的主体属性中定义的函数。

为避免这些限制，您可以在添加新资源时运行 `terraform apply`。

# 将 AWS SAM CLI 与 Serverless.tf 一起使用进行本地调试和测试
<a name="using-samcli-serverlesstf"></a>

 AWS Serverless Application Model 命令行接口 (AWS SAMCLI) 可以与 Serverless.tf 模块一起使用，用于对 AWS Lambda 函数和层进行本地调试和测试。支持以下 AWS SAM CLI 命令：
+ `sam build`
+ `sam local invoke`
+ `sam local start-api`
+ `sam local start-lambda`

**注意**  
Serverless.tf 版本 4.6.0 及更高版本支持 AWS SAM CLI 集成。

要开始将 AWS SAMCLI与 Serverless.tf 模块一起使用，请更新到最新版本的 Serverless.tf 和。 AWS SAMCLI

从 **serverless.tf 版本 6.0.0** 开始，必须将 `create_sam_metadata` 参数设置为 `true`。这将生成 AWS SAMCLI`sam build`命令所需的元数据资源。

要了解有关 Serverless.tf 的更多信息，请参阅 [terraform-aws-lambda-module](https://registry.terraform.io/modules/terraform-aws-modules/lambda/aws/latest)。

# 结合使用AWS SAM CLI 和 Terraform 参考
<a name="terraform-reference"></a>

本节是使用 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) Terraform 进行本地调试和测试的参考。

要提供反馈和提交功能请求，请创建 [GitHub 问题](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform)。

## AWS SAM 支持的功能参考
<a name="terraform-reference-sam"></a>

可以在此处找到支持与 Terraform 一起使用的 AWS SAM CLI 功能的参考文档：
+ [sam build](sam-cli-command-reference-sam-build.md)
+ [sam local invoke](sam-cli-command-reference-sam-local-invoke.md)
+ [sam local start-api](sam-cli-command-reference-sam-local-start-api.md)
+ [sam local start-lambda](sam-cli-command-reference-sam-local-start-lambda.md)

## Terraform 特定参考
<a name="terraform-reference-specific"></a>

可以在此处找到针对一起使用 AWS SAM CLI 和 Terraform 的参考文档：
+ [sam 元数据资源](terraform-sam-metadata.md)

# sam 元数据资源
<a name="terraform-sam-metadata"></a>

本页包含 Terraform 项目所用 **sam metadata resource** 资源类型的参考信息。
+ 有关使用 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) 的简介Terraform，请参阅[AWS SAM CLI 对于 Terraform 支持什么？](terraform-support.md#what-is-terraform-support)。
+ 要将 AWS SAM CLI 与 Terraform 结合使用，请参阅 [使用 AWS SAM CLI 和 Terraform 进行本地调试和测试](using-samcli-terraform.md)。

**Topics**
+ [参数](#terraform-sam-metadata-arguments)
+ [示例](#terraform-sam-metadata-examples)

## 参数
<a name="terraform-sam-metadata-arguments"></a>


****  

| 参数 | 说明 | 
| --- | --- | 
| built\$1output\$1path |  AWS Lambda 函数生成工件的路径。 | 
| docker\$1build\$1args | Docker 构建参数 JSON 对象的解码字符串。此参数是可选的。 | 
| docker\$1context | 包含 Docker 映像构建上下文的目录的路径。 | 
| docker\$1file |  Docker 文件的路径。路径相对于 `docker_context` 路径。 此参数是可选的。默认值为 `Dockerfile`。  | 
| docker\$1tag | 创建的 Docker 映像标签的值。该值为可选项。 | 
| depends\$1on | 您的 Lambda 函数或层的构建资源的路径。要了解更多信息，请参阅 Terraform 注册表中的[**depends\$1on** 参数](https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on)。 | 
| original\$1source\$1code |  您的 Lambda 函数的定义路径。此值可以是字符串、字符串数组或字符串形式的解码 JSON 对象。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/terraform-sam-metadata.html)  | 
| resource\$1name | Lambda 函数名称。 | 
| resource\$1type |  您的 Lambda 函数包类型的格式。接受的值为： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/serverless-application-model/latest/developerguide/terraform-sam-metadata.html)  | 
| source\$1code\$1property | JSON 对象中 Lambda 资源代码的路径。当 original\$1source\$1code 是 JSON 对象时，定义此属性。 | 

## 示例
<a name="terraform-sam-metadata-examples"></a>

### 使用 ZIP 包类型引用 Lambda 函数的 sam 元数据资源
<a name="terraform-sam-metadata-examples-example1"></a>

```
# Lambda function resource
resource "aws_lambda_function" "tf_lambda_func" {
  filename = "${path.module}/python/hello-world.zip"
  handler = "index.lambda_handler"
  runtime = "python3.8"
  function_name = "function_example"
  role = aws_iam_role.iam_for_lambda.arn
  depends_on = [
    null_resource.build_lambda_function # function build logic
  ]
}

# sam metadata resource
resource "null_resource" "sam_metadata_function_example" {
  triggers = {
    resource_name = "aws_lambda_function.function_example"
    resource_type = "ZIP_LAMBDA_FUNCTION"
    original_source_code = "${path.module}/python"
    built_output_path = "${path.module}/building/function_example"
  }
  depends_on = [
    null_resource.build_lambda_function # function build logic
  ]
}
```

### 使用映像包类型引用 Lambda 函数的 sam 元数据资源
<a name="terraform-sam-metadata-examples-example2"></a>

```
resource "null_resource" "sam_metadata_function {
  triggers = {
    resource_name = "aws_lambda_function.image_function"
    resource_type = "IMAGE_LAMBDA_FUNCTION"
    docker_context = local.lambda_src_path
    docker_file = "Dockerfile"
    docker_build_args = jsonencode(var.build_args)
    docker_tag = "latest"
  }
}
```

### 引用 Lambda 层的 sam 元数据资源
<a name="terraform-sam-metadata-examples-example3"></a>

```
resource "null_resource" "sam_metadata_layer1" {
  triggers = {
    resource_name = "aws_lambda_layer_version.layer"
    resource_type = "LAMBDA_LAYER"
    original_source_code = local.layer_src
    built_output_path = "${path.module}/${layer_build_path}"
  }
  depends_on = [null_resource.layer_build]
}
```

## AWS SAM CLI 对于 Terraform 支持什么？
<a name="what-is-terraform-support"></a>

使用 AWS Serverless Application Model 命令行界面 (AWS SAMCLI) 处理您的Terraform项目，或者Terraform Cloud对以下项目进行本地调试和测试：
+ AWS Lambda 函数和层。
+ 亚马逊 API Gateway APIs。

有关 Terraform 的简介，请在 *HashiCorp Terraform 网站*上参阅[什么是 Terraform？](https://developer.hashicorp.com/terraform/intro)。

要提供反馈和提交功能请求，请创建 [GitHub 问题](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform)。

**注意**  
作为集成解析步骤的一部分 AWS SAMCLI， AWS SAMCLI处理用户命令会生成项目文件和数据。命令输出应保持不变，但在某些环境中，环境或运行程序可能会在输出中注入其他日志或信息。

**Topics**
+ [那是什么 AWS SAMCLI？](#what-is-terraform-support-sam-cli)
+ [如何结合使用 AWS SAM CLI 和 Terraform？](#what-is-terraform-support-how)
+ [后续步骤](#what-is-terraform-support-next)

### 那是什么 AWS SAMCLI？
<a name="what-is-terraform-support-sam-cli"></a>

 AWS SAMCLI是一种命令行工具，您可以将其与 AWS SAM 模板和支持的第三方集成（例如Terraform用于构建和运行您的无服务器应用程序）一起使用。有关简介 AWS SAMCLI，请参阅[那是什么 AWS SAMCLI？](what-is-sam-overview.md#what-is-sam-cli)。

 AWS SAMCLI支持以下命令Terraform：
+ `sam local invoke`— 在本地启动对 AWS Lambda 函数资源的一次性调用。要了解有关此命令的更多信息，请参阅 [使用 sam local invoke 进行测试简介](using-sam-cli-local-invoke.md)。
+ `sam local start-api` – 在本地运行您的 Lambda 资源并通过本地 HTTP 服务器主机进行测试。此类测试对由 API Gateway 端点调用的 Lambda 函数很有帮助。要了解有关此命令的更多信息，请参阅 [使用 sam local start-api 进行测试简介](using-sam-cli-local-start-api.md)。
+ `sam local start-lambda`— 启动您的 Lambda 函数的本地终端节点，以便使用 AWS Command Line Interface (AWS CLI) 或在本地调用您的函数。 SDKs要了解有关此命令的更多信息，请参阅 [使用 sam local start-lambda 进行测试简介](using-sam-cli-local-start-lambda.md)。

### 如何结合使用 AWS SAM CLI 和 Terraform？
<a name="what-is-terraform-support-how"></a>

[核心 Terraform 工作流程](https://developer.hashicorp.com/terraform/intro/core-workflow)包括三个阶段：**编写**、**计划**和**应用**。有了对的 AWS SAMCLI支持Terraform，您可以利用这 AWS SAMCLI`sam local`组命令，同时继续使用Terraform工作流程来管理应用程序 AWS。通常，这意味着以下操作：
+ **编写** – 使用 Terraform 将基础设施编写为代码。
+ **测试和调试** – 使用 AWS SAM CLI 在本地测试和调试应用程序。
+ **计划** – 在应用前预览更改。
+ **应用** – 配置基础设施。

有关使用 with 的示例Terraform，请参阅 C *AWS ompute 博客*上的 B [et HashiCorp Terraform t AWS SAMCLI er together：和](https://aws.amazon.com/blogs/compute/better-together-aws-sam-cli-and-hashicorp-terraform/)。 AWS SAMCLI

### 后续步骤
<a name="what-is-terraform-support-next"></a>

要完成所有先决条件并设置 Terraform，请参阅 [AWS SAM CLI 的 Terraform 支持入门](gs-terraform-support.md)。