

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

# 结合使用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]
}
```