LocalStack および Terraform Tests を使用して AWS インフラストラクチャをテストする - AWS 規範ガイダンス

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

LocalStack および Terraform Tests を使用して AWS インフラストラクチャをテストする

作成者: Ivan Girardi (AWS) と Ioannis Kalyvas (AWS)

コードリポジトリ: AWS および Terraform Tests を使用して LocalStack インフラストラクチャをテストする

環境:本稼働

テクノロジー: インフラストラクチャ、モダナイゼーション、コンテナとマイクロサービス

ワークロード:その他すべてのワークロード

AWS サービス: Amazon CloudWatch、Amazon DynamoDB、AWS Lambda、Amazon S3、AWS Step Functions

[概要]

このパターンは、 AWS 環境にインフラストラクチャをプロビジョニングすることなく、Terraform AWS で のInfrastructure as Code (IaC) をローカルでテストするのに役立ちます。Terraform Tests フレームワークLocalStack と統合します。 LocalStack Docker コンテナは、さまざまな をエミュレートするローカル開発環境を提供します AWS のサービス。これにより、 でコストを発生させることなく、インフラストラクチャのデプロイをテストして反復処理できます AWS クラウド。

ソリューションは次の利点があります。

  • コストの最適化 — LocalStack に対してテストを実行すると、 を使用する必要がなくなります AWS のサービス。これにより、これらの AWS リソースの作成、運用、変更に関連するコストが発生するのを防ぐことができます。

  • 速度と効率 — ローカルでのテストも、通常、 AWS リソースのデプロイよりも高速です。この迅速なフィードバックループにより、開発とデバッグが高速化されます。 LocalStack はローカルで実行されるため、インターネット接続なしで Terraform 設定ファイルを開発およびテストできます。Terraform 設定ファイルをローカルでデバッグし、すぐにフィードバックを受け取ることができるため、開発プロセスが合理化されます。

  • 一貫性と再現性 — LocalStack は、テストのための一貫した環境を提供します。この一貫性は、外部 AWS の変更やネットワークの問題に関係なく、テストで同じ結果が得られることを確認するのに役立ちます。

  • 分離 — LocalStack でテストすることで、ライブ AWS リソースや本番環境に誤って影響することを防ぎます。この分離により、さまざまな設定を安全に実験およびテストできます。

  • 自動化 — 継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインとの統合により、Terraform 設定ファイルを自動的にテストできます。パイプラインは、デプロイ前に IaC を徹底的にテストします。

  • 柔軟性 — さまざまな AWS リージョン、、および のサービス設定をシミュレートして AWS アカウント、本番環境により近いものにすることができます。

前提条件と制限

前提条件

制約事項

  • このパターンでは、Amazon Simple Storage Service (Amazon S3) AWS Lambda、 AWS Step Functions、および Amazon DynamoDB リソースをテストするための明示的な例を示します。ただし、このソリューションを拡張して追加の AWS リソースを含めることができます。

  • このパターンでは、Terraform テストをローカルで実行する手順を説明しますが、テストを任意の CI/CD パイプラインに統合できます。

  • このパターンでは、 LocalStack Community イメージを使用する手順を説明します。 LocalStack Pro イメージを使用している場合は、LocalStack Pro のドキュメントを参照してください。

  • LocalStack は、さまざまな AWS APIs のエミュレーションサービスを提供します。詳細なリストについては、AWS 「サービス機能のカバレッジ」を参照してください。一部の高度な機能では、 LocalStack Pro のサブスクリプションが必要になる場合があります。

アーキテクチャ

次の図は、このソリューションのアーキテクチャを示しています。主なコンポーネントは、ソースコードリポジトリ、CI/CD パイプライン、Word Docker LocalStack コンテナです。 LocalStack Docker コンテナは、以下を AWS のサービス ローカルでホストします。

  • ファイルを保存するための Amazon S3 バケット

  • モニタリングとログ記録用の Amazon CloudWatch

  • サーバーレスコードを実行するための AWS Lambda 関数

  • マルチステップワークフローをオーケストレーションするための AWS Step Functions ステートマシン

  • NoSQL データを保存するための Amazon DynamoDB テーブル

CI/CD パイプラインは、 LocalStack Docker コンテナと AWS リソースを構築してテストします。

この図表は、次のワークフローを示しています:

  1. Terraform 設定ファイルをソースコードリポジトリに追加してコミットします。

  2. CI/CD パイプラインは変更を検出し、静的 Terraform コード分析のビルドプロセスを開始します。パイプラインは LocalStack Docker コンテナを構築して実行します。その後、パイプラインはテストプロセスを開始します。

  3. パイプラインは、 LocalStack Docker コンテナでホストされている Amazon S3 バケットにオブジェクトをアップロードします。

  4. オブジェクトをアップロードすると、 AWS Lambda 関数が呼び出されます。

  5. Lambda 関数は、Amazon S3 イベント通知を a CloudWatch ログに保存します。

  6. Lambda 関数は AWS Step Functions ステートマシンを起動します。

  7. ステートマシンは Amazon S3 オブジェクトの名前を DynamoDB テーブルに書き込みます。

  8. CI/CD パイプラインのテストプロセスは、アップロードされたオブジェクトの名前が DynamoDB テーブルのエントリと一致することを確認します。また、S3 バケットが指定された名前でデプロイされていること、および AWS Lambda 関数が正常にデプロイされたことも確認します。

ツール

AWS のサービス

  • Amazon CloudWatch は、 AWS リソースと で実行しているアプリケーションのメトリクスを AWS リアルタイムでモニタリングするのに役立ちます。

  • Amazon DynamoDB は、高速で予測可能なスケーラブルなパフォーマンスを提供するフルマネージド NoSQL データベースサービスです。

  • AWS Lambda は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。

  • Amazon Simple Storage Service (Amazon S3) は、任意の量のデータを保存、保護、取得する上で役立つクラウドベースのオブジェクトストレージサービスです。

  • AWS Step Functions は、 AWS Lambda 関数と他の を組み合わせてビジネスクリティカルなアプリケーション AWS のサービス を構築するのに役立つサーバーレスオーケストレーションサービスです。

その他のツール

  • Docker は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するサービスとしてのPlatform as a Service (PaaS) 製品のセットです。

  • Docker Compose は、マルチコンテナアプリケーションを定義して実行するためのツールです。

  • LocalStack は、単一のコンテナで実行されるクラウドサービスエミュレータです。 LocalStack を使用すると、 に接続せずに AWS のサービス、 を使用するローカルマシンでワークロードを実行できます AWS クラウド。

  • Terraform は、クラウドおよびオンプレミスリソースの作成と管理に役立つ HashiCorp の IaC ツールです。

  • Terraform Tests は、統合テストまたはユニットテストに類似したテストを通じて Terraform モジュール設定の更新を検証するのに役立ちます。

コードリポジトリ

このパターンのコードは、 GitHub および Terraform Tests リポジトリを使用する LocalStack Test AWS インフラストラクチャで使用できます。

ベストプラクティス

エピック

タスク説明必要なスキル

リポジトリをクローン作成します。

bash シェルで、次のコマンドを入力します。これにより、 LocalStack および Terraform Tests リポジトリを使用して Word からテスト AWS インフラストラクチャのクローンが作成されます。 GitHub

git clone https://github.com/aws-samples/localstack-terraform-test.git
DevOps エンジニア

LocalStack コンテナを実行します。

  1. 次のコマンドを入力して、クローンされたリポジトリに移動します。

    cd localstack-terraform-test
  2. 次のコマンドを入力して、 LocalStack Docker コンテナをデタッチモードで起動します。

    docker-compose up -d
  3. LocalStack Docker コンテナが動作するまで待ちます。

DevOps エンジニア

Terraform を初期化します。

次のコマンドを入力して Terraform を初期化します。

terraform init
DevOps エンジニア

Terraform テストを実行します。

  1. Terraform Tests を実行するには、次のコマンドを入力します。

    terraform test
  2. すべてのテストが正常に完了したことを確認します。出力は次の例のようになります:

    Success! 3 passed, 0 failed.
DevOps エンジニア

リソースをクリーンアップします。

次のコマンドを入力して、 LocalStack コンテナを破棄します。

docker-compose down
DevOps エンジニア

トラブルシューティング

問題ソリューション

Error: reading DynamoDB Table Item (Files|README.md): empty 結果は、 terraform test コマンドの実行時に表示されます。

  1. terraform test コマンドを再入力します。

  2. それでもエラーが解決しない場合は、main.tf ファイルを編集してスリープタイムアウトを 15 秒を超える値に増やします。

    resource "time_sleep" "wait" { create_duration = "15s" triggers = { s3_object = local.key_json } }

関連リソース

追加情報

GitHub Actions との統合

LocalStack Actions を使用して、CI/CD パイプラインに GitHub テストと Terraform テストを統合できます。詳細については、GitHub Actions のドキュメントを参照してください。以下は、 GitHub Actions 設定ファイルの例です。

name: LocalStack Terraform Test on: push: branches: - '**' workflow_dispatch: {} jobs: localstack-terraform-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build and Start LocalStack Container run: | docker compose up -d - name: Setup Terraform uses: hashicorp/setup-terraform@v3 with: terraform_version: latest - name: Run Terraform Init and Validation run: | terraform init terraform validate terraform fmt --recursive --check terraform plan terraform show - name: Run Terraform Test run: | terraform test - name: Stop and Delete LocalStack Container if: always() run: docker compose down