

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS SAM CLI Terraform のサポート
<a name="terraform-support"></a>

このセクションでは、Terraformプロジェクトと Terraform クラウドでの AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) の使用について説明します。

フィードバックや機能に関する要望を送るには、[GitHub Issue](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform) を作成してください。

**Topics**
+ [AWS SAM CLI での Terraform のサポートの準備](gs-terraform-support.md)
+ [Terraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法](using-samcli-terraform.md)
+ [AWS SAM CLI と Serverless.tf を使用したローカルデバッグとテスト](using-samcli-serverlesstf.md)
+ [Terraform リファレンス付きのAWS SAM CLI](terraform-reference.md)
+ [Terraform の AWS SAM CLI サポートの概要](#what-is-terraform-support)

# AWS SAM CLI での Terraform のサポートの準備
<a name="gs-terraform-support"></a>

このトピックでは、 AWS Serverless Application Model で コマンドラインインターフェイス (AWS SAM CLI) の使用を開始する方法について説明しますTerraform。

フィードバックや機能に関する要望を送るには、[GitHub Issue](https://github.com/aws/aws-sam-cli/issues/new?labels=area%2Fterraform) を作成してください。

**Topics**
+ [AWS SAMCLI Terraform の前提条件](#gs-terraform-support-prerequisites)
+ [Terraform と連携させた AWS SAM CLI](#gs-terraform-support-using)
+ [Terraform プロジェクト用のセットアップ](#gs-terraform-support-projects)
+ [Terraform Cloud のセットアップ](#gs-terraform-support-cloud)

## AWS SAMCLI 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 レジストリ*で「[Install Terraform](https://developer.hashicorp.com/terraform/downloads)」を参照してください。

1. 

**ローカルテスト用の Docker のインストール**

    AWS SAM CLI でローカルテストを実行するには Docker が必要です。Docker をインストールするには、「[AWS SAM CLI で Docker を使用するためのインストール方法](install-docker.md)」を参照してください。

## Terraform と連携させた AWS SAM CLI
<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>

 AWS SAM CLI と Terraform プロジェクトを使用するには、このトピックの手順を実行してください。

Terraform プロジェクト外で AWS Lambda アーティファクトを構築する場合、追加のセットアップは必要ありません。の使用を開始する[Terraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法](using-samcli-terraform.md)には、「」を参照してください AWS SAM CLI。

Terraform プロジェクト内の Lambda アーティファクトをビルドするには、以下の操作を実行する必要があります。

1. Python 3.8 以降のインストール

1. Make ツールをインストールします。

1. Terraform プロジェクト内で Lambda アーティファクトのビルドロジックを定義します。

1. ビルドロジックの AWS SAM CLI を通知する `sam metadata` リソースを定義します。

1. `sam build` コマンドを使用して AWS SAM CLI Lambda アーティファクトを構築します。

### Python 3.8 以降のインストール
<a name="gs-terraform-support-projects-python"></a>

Python で使用するには、3.8 以降が必要です AWS SAM CLI。`sam build` を実行すると、 AWS SAM CLI が Lambda アーティファクトを構築する Python コマンドを含む `makefiles` を作成します。

インストール手順については、Python の「*Beginners Guide*」にある「[Downloading Python](https://wiki.python.org/moin/BeginnersGuide/Download)」を参照してください。

次を実行して、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 は このツールに依存して Lambda アーティファクトを構築する `makefiles` を作成します。

Make をローカルマシンにまだインストールしていない場合は、先に進む前にインストールしてください。

Windows の場合は、[Chocolatey](https://chocolatey.org/) を使用してインストールできます。手順については、「*How to Install and Use "Make" in Windows*」の「[Using 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` リソースは、Lambda アーティファクトを見つけるために必要な情報を AWS SAM CLI に提供する `null_resource` Terraform リソースタイプです。プロジェクト内の 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. Lambda ビルドロジックを含む `null_resource` を `depends_on` 引数で指定します。

   以下はテンプレートの例です。

   ```
   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 またはイメージ) によって異なります。SSML の詳細と例については、「[sam metadata resource](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>

`sam build` コマンドを使用して AWS SAM CLI Lambda アーティファクトを構築します。`sam build` を実行すると、 AWS SAM CLI が次のことをします。

1. Terraform プロジェクト内の `sam metadata` リソースを探して、Lambda リソースについて調べたり、見つけたりします。

1. Lambda ビルドロジックを開始して Lambda アーティファクトを構築します。

1. `sam local` コマンドで使用するTerraform AWS SAM CLIプロジェクトを整理する `.aws-sam` ディレクトリを作成します。

**サムビルドでビルドするには**

1. Terraform ルートモジュールを含むディレクトリから、以下の操作を実行する。

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

1. 特定の Lambda 関数または Layer を構築するには、以下を実行します。

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

   許容される 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>

`sam build` コマンドを実行する AWS SAM CLIときに、ローカルDockerコンテナを使用してアプリケーションを構築するように を設定できます AWS SAM CLI。

**注記**  
Docker がインストールされ、設定されている必要があります。手順については、「[AWS SAM CLI で Docker を使用するためのインストール方法](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`オプションを使用して `sam build` コマンドを実行します AWS SAM CLI。

   以下に例を示します。

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

### 次の手順
<a name="gs-terraform-support-projects-next"></a>

Terraform プロジェクトで AWS SAM CLI を使い始めるには、「[Terraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法](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 以降のバージョンでは、これらの手順は不要です。CLI で の使用を開始するにはTerraform Cloud、 AWS SAM 「」を参照してください[Terraform と連携させた AWS SAM CLI を使用する](using-samcli-terraform.md)。

1. **API トークンの設定** — トークンのタイプはアクセスレベルによって異なります。詳細については、「*Terraform Cloud ドキュメント*」で「[API Tokens](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 は実行のブレッドクラムパスにあります。  
![\[実行 ID が表示される Terraform Cloud のブレッドクラムパス。\]](http://docs.aws.amazon.com/ja_jp/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
   ```

これで、Terraform Cloud と連携させた AWS SAM CLI の使用の準備ができました。サポートされている 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>

Terraform Cloud と連携させた AWS SAM CLI の使用を開始するには、「[Terraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法](using-samcli-terraform.md)」を参照してください。

# Terraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法
<a name="using-samcli-terraform"></a>

このトピックでは、サポートされている AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) コマンドをTerraformプロジェクトと で使用する方法について説明しますTerraform Cloud。

フィードバックや機能に関する要望を送るには、[GitHub Issue](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 SAMCLI を使用してローカルでテストするには、Docker をインストールして設定しておく必要があります。手順については、「[AWS SAM CLI で Docker を使用するためのインストール方法](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>

Terraform で `sam local start-api` を使用するには、以下を実行してください。

```
$ 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)。
+ 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 () を使用して 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>

Terraform と連携させた AWS SAM CLI を使用する場合の制限は次のとおりです。
+ 複数のレイヤーにリンクされている Lambda 関数。
+ リソース間のリンクを定義する Terraform のローカル変数。
+ まだ作成されていない Lambda 関数の参照。これには、REST API リソースの本文属性で定義されている関数が含まれます。

プロジェクトに新しいリソースが追加されたときに `terraform apply` を実行すると、このような制限を回避することができます。

# AWS SAM CLI と Serverless.tf を使用したローカルデバッグとテスト
<a name="using-samcli-serverlesstf"></a>

 AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) は、 AWS Lambda 関数とレイヤーのローカルデバッグとテストのために Serverless.tf モジュールで使用できます。以下の AWS SAM CLI コマンドがサポートされています。
+ `sam build`
+ `sam local invoke`
+ `sam local start-api`
+ `sam local start-lambda`

**注記**  
Serverless.tf バージョン 4.6.0 以降では、 AWS SAM CLI 統合がサポートされています。

Serverless.tf モジュールで の使用 AWS SAM CLIを開始するには、 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)」を参照してください。

# Terraform リファレンス付きのAWS SAM CLI
<a name="terraform-reference"></a>

このセクションは、ローカルデバッグとテストのために AWS Serverless Application Model で コマンドラインインターフェイス (AWS SAM CLI) を使用するTerraformためのリファレンスです。

フィードバックや機能に関する要望を送るには、[GitHub Issue](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>

Terraform で AWS SAM CLI を使用する際のリファレンスドキュメントは、次の場所にあります。
+ [sam metadata resource](terraform-sam-metadata.md)

# sam metadata resource
<a name="terraform-sam-metadata"></a>

このページには、Terraform プロジェクトで使用する **sam metadata resource** リソースタイプに関するリファレンスが含まれています。
+ で AWS Serverless Application Model コマンドラインインターフェイス (AWS SAM CLI) を使用する方法の概要についてはTerraform、「」を参照してください[Terraform の AWS SAM CLI サポートの概要](terraform-support.md#what-is-terraform-support)。
+ Terraform と連携させた AWS SAM CLI を使用するには、「[Terraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法](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** argument](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/ja_jp/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/ja_jp/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 metadata resource
<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 metadata resource
<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 metadata resource
<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]
}
```

## Terraform の AWS SAM CLI サポートの概要
<a name="what-is-terraform-support"></a>

コマンド AWS Serverless Application Model ラインインターフェイス (AWS SAM CLI) をTerraformプロジェクトで使用するか、 Terraform Cloudを使用して、以下のローカルデバッグとテストを実行します。
+ AWS Lambda 関数とレイヤー。
+ Amazon API Gateway API。

Terraform の概要については、*HashiCorpTerraform ウェブサイト*で「[What is Terraform?](https://developer.hashicorp.com/terraform/intro)」を参照してください。

フィードバックや機能に関する要望を送るには、[GitHub Issue](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)
+ [Terraform と連携させた AWS SAM CLI をどのように使用しますか？](#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 は、 サーバーレスアプリケーションを構築して実行するためにTerraform、 AWS SAM テンプレートや などのサポートされているサードパーティー統合で使用できるコマンドラインツールです。の概要については AWS SAM CLI、「」を参照してください[とは AWS SAM CLI](what-is-sam-overview.md#what-is-sam-cli)。

は、 AWS SAM CLI で次のコマンドをサポートしていますTerraform。
+ `sam local invoke` – AWS Lambda 関数リソースの 1 回限りの呼び出しをローカルで開始します。このコマンドの詳細については、「[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` – AWS Command Line Interface (AWS CLI) または SDKs を使用して関数をローカルで呼び出すために、Lambda 関数のローカルエンドポイントを起動します。このコマンドの詳細については、「[sam local start-lambda を使用したテストの概要](using-sam-cli-local-start-lambda.md)」を参照してください。

### Terraform と連携させた AWS SAM CLI をどのように使用しますか？
<a name="what-is-terraform-support-how"></a>

[コア Terraform ワークフロー](https://developer.hashicorp.com/terraform/intro/core-workflow)は、**作成**、**計画**、**適用**の 3 つの段階で構成されています。 AWS SAM CLI のサポートによりTerraform、Terraformワークフローを使用してアプリケーションを引き続き管理しながら、`sam local`一連のコマンドを活用 AWS SAM CLIできます AWS。一般的には、以下の操作を実行する必要があります。
+ **作成** — Terraform を使用してインフラストラクチャをコードとして作成します。
+ **テストとデバッグ** — AWS SAM CLI を使用してアプリケーションをローカルでテストおよびデバッグします。
+ **計画** — 適用前に変更をプレビューします。
+ **適用** — インフラストラクチャをプロビジョニングします。

で を使用する AWS SAM CLI例についてはTerraform、*AWS コンピューティングブログ*の[「Better together: AWS SAM CLI andHashiCorp Terraform](https://aws.amazon.com/blogs/compute/better-together-aws-sam-cli-and-hashicorp-terraform/)」を参照してください。

### 次の手順
<a name="what-is-terraform-support-next"></a>

前提条件をすべて満たして Terraform を設定するには、「[AWS SAM CLI での Terraform のサポートの準備](gs-terraform-support.md)」を参照してください。