

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

# 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)」を参照してください。