AWS SAM CLI での Terraform のサポートの準備 - AWS Serverless Application Model

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

AWS SAM CLI での Terraform のサポートの準備

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

フィードバックや機能に関する要望を送るには、GitHub Issue を作成してください。

AWS SAMCLITerraform の前提条件

Terraform プロジェクトで AWS SAM CLI を使い始めるには、すべての前提条件を満たしてください。

  1. AWS SAM CLI をインストールまたはアップグレードする

    AWS SAM CLI がインストールされているかを確認するには、次のコマンドを実行します。

    $ sam --version

    AWS SAM CLI がインストールされている場合は、出力にバージョンが表示されます。最新バージョンにアップグレードするには、「AWS SAM CLI のアップグレード」 を参照してください。

    AWS SAM CLI のインストール手順とインストールに必要な前提条件については、「AWS SAM CLIのインストール」を参照してください。

  2. Terraform をインストールする

    Terraform がインストールされているかを確認するには、次のコマンドを実行します。

    $ terraform -version

    Terraform をインストールするには、Terraform レジストリの「Install Terraform」を参照してください。

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

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

Terraform と連携させた AWS SAM CLI

サポートされている AWS SAM CLI コマンドを実行するときは、--hook-name オプションを使用して terraform 値を指定します。以下に例を示します。

$ sam local invoke --hook-name terraform

このオプションは AWS SAM CLI 設定ファイルで次のように設定できます。

hook_name = "terraform"

Terraform プロジェクト用のセットアップ

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

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

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

  1. 3.8 Python 以降をインストールする

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

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

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

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

3.8 Python 以降をインストールする

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

インストール手順については、Python の初心者ガイドにある「Downloading Python」(Python のダウンロード) を参照してください。

以下を実行して、Python 3.8 以降がマシンパスに追加されていることを確認します。

$ python --version

出力には、3.8 以降のバージョンの Python が表示されるはずです。

Make ツールをインストールする

GNU Make は、プロジェクトの実行ファイルやその他の非ソースファイルの生成を制御するツールです。 AWS SAM CLI は このツールに依存して Lambda アーティファクトを構築する makefiles を作成します。

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

Windows の場合は、Chocolatey を使用してインストールできます。Chocolatey を使用してインストールするには、「Windows で Make をインストールして使用する方法」の「Chocolatey の使用」を参照してください。

Lambda アーティファクトのビルドロジックを定義する

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 リソースを定義します。

sam metadata リソースは、Lambda アーティファクトを見つけるために必要な情報を AWS SAM CLI に提供する null_resource Terraform リソースタイプです。プロジェクト内の Lambda 関数またはレイヤーごとに固有の sam metadata リソースが必要です。このリソースタイプの詳細については、Terraform レジストリの「null_resource」を参照してください。

sam metadata リソースを定義します。
  1. リソースには sam_metadata_ で始まる名前を付けます。sam metadata リソースとして認識できるようにするためです。

  2. リソースの triggers ブロック内で Lambda アーティファクトプロパティを定義します。

  3. Lambda ビルドロジックを含む null_resourcedepends_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」を参照してください。

sam metadata リソースを設定し、サポートされている AWS SAM CLI コマンドを使用すると、 AWS SAM CLI は AWS SAM CLI コマンドを実行する前にメタデータファイルを生成します。このファイルを生成したら、今後の AWS SAM CLI コマンドで --skip-prepare-infra オプションを使用することで、メタデータの生成プロセスをスキップして時間を節約できます。このオプションは、インフラストラクチャに新しい Lambda 関数や新しい API エンドポイントの作成などの変更を加えていない場合にのみ使用してください。

AWS SAM CLI を使用して Lambda アーティファクトを構築します。

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

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

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

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

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

    $ sam build --hook-name terraform
  2. 特定の 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

コンテナを使用したビルド

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

注記

Docker がインストールされ、設定されている必要があります。手順については、「AWS SAM CLI で Docker を使用するためのインストール方法」を参照してください。

コンテナを使用してビルドするには
  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"]
  2. docker build を使用して Docker イメージをビルドします。

    以下に例を示します。

    $ docker build --tag terraform-build:v1 <path-to-directory-containing-Dockerfile>
  3. --use-container および --build-imageオプションを使用して sam build コマンドを実行します AWS SAMCLI。

    以下に例を示します。

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

次のステップ

Terraform プロジェクトで AWS SAM CLI を使い始めるには、「Terraform と連携させた AWS SAM CLI をローカルでのデバッグおよびテストに使用する方法」を参照してください。

Terraform Cloud のセットアップ

Terraform v1.6.0 以降を使用することをお勧めします。古いバージョンを使用している場合は、Terraform プランファイルをローカルで生成する必要があります。ローカルプランファイルは、 AWS SAM CLIローカルテストとデバッグを実行するために必要な情報を に提供します。

ローカルプランファイルを生成するには
注記

Terraform v1.6.0 以降のバージョンでは、これらの手順は不要です。CLI で の使用を開始するには AWS SAM 、Terraform Cloud「」を参照してくださいTerraform と連携させた AWS SAM CLI を使用する

  1. API トークンの設定 — トークンのタイプはアクセスレベルによって異なります。詳細については、Terraform Cloud のドキュメントの「API トークン」を参照してください。

  2. API トークンの環境変数を設定する — 以下はコマンドラインからの例です。

    $ export TOKEN="<api-token-value>"
  3. 実行 ID を取得する – Terraform Cloudコンソールから、 で使用するTerraform実行の実行 ID AWS SAMを見つけますCLI。

    実行 ID は実行のブレッドクラムパスにあります。

    実行 ID が表示される Terraform Cloud のブレッドクラムパス。
  4. プランファイルの取得 — 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_gateway_v2_tf_cloud」を参照してください。

次のステップ

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