

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

本節涵蓋搭配您的Terraform專案和Terraform雲端使用 AWS Serverless Application Model 命令列界面 (AWS SAM CLI)。

若要提供意見回饋並提交功能請求，請建立[GitHub問題](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform)。

**Topics**
+ [開始使用 的 Terraform 支援 AWS SAM CLI](gs-terraform-support.md)
+ [搭配 使用 AWS SAM CLITerraform進行本機偵錯和測試](using-samcli-terraform.md)
+ [搭配 AWS SAM CLIServerless.tf 使用 進行本機偵錯和測試](using-samcli-serverlesstf.md)
+ [AWS SAM CLI 含Terraform參考](terraform-reference.md)
+ [什麼是 AWS SAM CLI 的支援Terraform？](#what-is-terraform-support)

# 開始使用 的 Terraform 支援 AWS SAM CLI
<a name="gs-terraform-support"></a>

本主題說明如何開始使用 AWS Serverless Application Model 命令列界面 (AWS SAM CLI) 搭配 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>

完成所有先決條件，以開始使用 AWS SAM CLI搭配您的Terraform專案。

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 CLIDocker進行本機測試。若要安裝 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 CLITerraform進行本機偵錯和測試](using-samcli-terraform.md) 以開始使用 AWS SAM CLI。

如果您在Terraform專案中建置 Lambda 成品，您必須執行下列動作：

1. 安裝 Python 3.8 或更新版本

1. 安裝 Make工具。

1. 定義 Lambda 成品在Terraform專案中建置邏輯。

1. 定義 `sam metadata` 資源，以通知 AWS SAM CLI 您的建置邏輯。

1. 使用 AWS SAM CLI`sam build`命令來建置 Lambda 成品。

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

Python 需要 3.8 或更新版本才能與 搭配使用 AWS SAM CLI。當您執行 時`sam build`， AWS SAM CLI會建立 `makefiles`，其中包含建置 Lambda 成品的Python命令。

如需安裝說明，請參閱 [Python 入門指南中的下載](https://wiki.python.org/moin/BeginnersGuide/Download) Python。 **

執行下列動作，確認 Python 3.8 或更新版本已新增至您的機器路徑：

```
$ python --version
```

輸出應會顯示 3.8 或更新版本的 Python 版本。

### 安裝 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 中安裝和使用「製作」中的*[使用 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 函數或 layer 都需要唯一的`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`引數指定`null_resource`包含 Lambda 建置邏輯的 。

   以下是範例範本：

   ```
   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之前產生中繼資料檔案。產生此檔案後，您可以將 `--skip-prepare-infra`選項與未來的 AWS SAM CLI命令搭配使用，以略過中繼資料產生程序並節省時間。只有在您尚未進行任何基礎設施變更，例如建立新的 Lambda 函數或新的 API 端點時，才應使用此選項。

### 使用 AWS SAM CLI 建置 Lambda 成品
<a name="gs-terraform-support-projects-build"></a>

使用 AWS SAM CLI`sam build`命令來建置 Lambda 成品。當您執行 時`sam build`， 會 AWS SAM CLI執行下列動作：

1. 尋找Terraform專案中的`sam metadata`資源，以了解並找到您的 Lambda 資源。

1. 啟動 Lambda 建置邏輯以建置 Lambda 成品。

1. 建立 `.aws-sam`目錄來組織Terraform專案，以便與 AWS SAM CLI`sam local`命令搭配使用。

**使用 sam 建置建置**

1. 從包含Terraform根模組的目錄中，執行下列動作：

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

1. 若要建置特定的 Lambda 函數或 layer，請執行下列動作

   ```
   $ 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 SAM CLI`sam build`命令時，您可以設定 AWS SAM CLI以使用本機Docker容器建置應用程式。

**注意**  
您必須Docker已安裝並設定 。如需說明，請參閱[安裝 Docker 以搭配 使用 AWS SAM CLI](install-docker.md)。

**使用容器建置**

1. 建立`Dockerfile`包含 Terraform、 Python和 Make工具的 。您也應該包含 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. 使用 AWS SAM CLI`--use-container`和 `--build-image`選項執行 `sam build`命令。

   以下是範例：

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

### 後續步驟
<a name="gs-terraform-support-projects-next"></a>

若要開始將 AWS SAM CLI與Terraform專案搭配使用，請參閱 [搭配 使用 AWS SAM CLITerraform進行本機偵錯和測試](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 或更新版本不需要這些步驟。若要開始使用 AWS SAM CLI搭配 Terraform 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 SAM CLI。

   執行 ID 位於執行的 breadcrumb 路徑中。  
![\[中顯示執行 ID Terraform Cloud的 Breadcrumb 路徑。\]](http://docs.aws.amazon.com/zh_tw/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 CLITerraform進行本機偵錯和測試](using-samcli-terraform.md)。

# 搭配 使用 AWS SAM CLITerraform進行本機偵錯和測試
<a name="using-samcli-terraform"></a>

本主題說明如何搭配您的Terraform專案和 使用支援的 AWS Serverless Application Model 命令列界面 (AWS SAM CLI) 命令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 SAM CLI，請參閱 [使用 Lambda 授權方的 Lambda 函數](using-sam-cli-local-start-api.md#using-sam-cli-local-start-api-authorizers)。
+ 如需在 中使用 Lambda 授權方的詳細資訊Terraform，請參閱 *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 () 在本機測試 Lambda 函數的範例AWS CLI：

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 CLIServerless.tf 使用 進行本機偵錯和測試
<a name="using-samcli-serverlesstf"></a>

 AWS Serverless Application Model 命令列界面 (AWS SAM CLI) 可與 Serverless.tf 模組搭配使用，以進行 AWS Lambda 函數和 layer 的本機偵錯和測試。支援下列 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 SAM CLI與 Serverless.tf 模組搭配使用，請更新至最新版本的 Serverless.tf 和 AWS SAM CLI。

從 **serverless.tf 6.0.0 版**開始，您必須將 `create_sam_metadata` 參數設定為 `true`。這會產生 `sam build` 命令所需的中繼資料資源 AWS SAM CLI。

若要進一步了解 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 SAM CLI) 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 SAM CLI) 的簡介Terraform，請參閱 [什麼是 AWS SAM CLI 的支援Terraform？](terraform-support.md#what-is-terraform-support)。
+ 若要搭配 AWS SAM CLI使用 Terraform，請參閱 [搭配 使用 AWS SAM CLITerraform進行本機偵錯和測試](using-samcli-terraform.md)。

**Topics**
+ [引數](#terraform-sam-metadata-arguments)
+ [範例](#terraform-sam-metadata-examples)

## 引數
<a name="terraform-sam-metadata-arguments"></a>


****  

| 引數 | Description | 
| --- | --- | 
| 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 函數或 layer 的建置資源路徑。若要進一步了解，請參閱 [登錄檔中的 **depends\$1on**引數](https://developer.hashicorp.com/terraform/language/meta-arguments/depends_on)。 Terraform  | 
| original\$1source\$1code |  定義 Lambda 函數的路徑。此值可以是字串、字串陣列或解碼的 JSON 物件做為字串。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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_tw/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 SAM CLI) 搭配您的Terraform專案或 Terraform Cloud執行本機偵錯和測試：
+ AWS Lambda 函數和圖層。
+ Amazon 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 SAM CLI整合的剖析步驟中， AWS SAM CLI 會處理使用者命令產生專案檔案和資料。命令輸出應保持不變，但在某些環境中，環境或執行器可能會在輸出中插入其他日誌或資訊。

**Topics**
+ [什麼是 AWS SAM CLI？](#what-is-terraform-support-sam-cli)
+ [如何搭配 AWS SAM CLI使用 Terraform？](#what-is-terraform-support-how)
+ [後續步驟](#what-is-terraform-support-next)

### 什麼是 AWS SAM CLI？
<a name="what-is-terraform-support-sam-cli"></a>

 AWS SAM CLI 是命令列工具，您可以搭配 AWS SAM 範本和支援的第三方整合使用，例如 Terraform，以建置和執行無伺服器應用程式。如需 的簡介 AWS SAM CLI，請參閱 [什麼是 AWS SAM CLI？](what-is-sam-overview.md#what-is-sam-cli)。

 AWS SAM CLI 支援 的下列命令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 SAM CLI 的支援Terraform，您可以利用 AWS SAM CLI`sam local`一組命令，同時繼續使用Terraform工作流程來管理 上的應用程式 AWS。一般而言，這表示下列事項：
+ **寫入** – 使用 將基礎設施撰寫為程式碼Terraform。
+ **測試和偵錯** – 使用 在 AWS SAM CLI本機測試和偵錯您的應用程式。
+ **計劃** – 在套用之前預覽變更。
+ **套用** – 佈建您的基礎設施。

如需搭配 AWS SAM CLI使用 的範例Terraform，請參閱*AWS 「運算部落格*」中的[一起改善： AWS SAM CLI 和 HashiCorp Terraform](https://aws.amazon.com/blogs/compute/better-together-aws-sam-cli-and-hashicorp-terraform/) 。

### 後續步驟
<a name="what-is-terraform-support-next"></a>

若要完成所有先決條件並設定 Terraform，請參閱 [開始使用 的 Terraform 支援 AWS SAM CLI](gs-terraform-support.md)。