

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

# 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]
}
```