次の方法で共有


Terraform コードのテスト

Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、デプロイが可能になります。 Terraform を使用して、 HCL 構文を使用して構成ファイルを作成します。 HCL 構文を使用すると、クラウド プロバイダー (Azure など) とクラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、インフラストラクチャの変更をデプロイする前にプレビューできる 実行プラン を作成します。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。

Terraform は、コードとしてのインフラストラクチャ (IaC) ツールです。 このカテゴリのツールは、Terraform ファイルをプロジェクトのソース コードと同じように扱うという事実を指します。 そのプロセスの一部には、バージョン管理とソース コード管理が含まれます。 また、テストもプロセスの一部である必要があります。 この記事では、Terraform プロジェクトに対して実行できるさまざまな種類のテストの概要について説明します。

統合テストの実装

統合テストでは、新しく導入されたコード変更によって既存のコードが破損しないことを検証します。 DevOps では、継続的インテグレーション (CI) とは、コード ベースが変更されるたびにシステム全体を構築するプロセスを指します。たとえば、PR を Git リポジトリにマージする必要があるユーザーなどです。 統合テストの一般的な例を次に示します。

  • 静的コード解析ツールの一例として、lintやフォーマットがあります。
  • terraform 検証を実行して、構成ファイルの構文を確認します。
  • terraform プランを実行して、構成が期待どおりに動作することを確認します。

単体テストの実装

単体テストでは、プログラムの特定の部分または機能が正しく動作することを確認します。 単体テストは、機能の開発者によって記述されます。 テスト駆動型開発 (TDD) とも呼ばれるこの種類のテストには、継続的な短い開発サイクルが含まれます。 Terraform プロジェクトのコンテキストでは、単体テストでは、 terraform plan を使用して、生成されたプランで使用できる実際の値が期待値と等しいことを確認できます。

単体テストは、Terraform モジュールの複雑化が始まるときに特に役立ちます。

  • 動的ブロックを生成する
  • ループを使用する
  • ローカル変数の計算

統合テストと同様に、継続的インテグレーション プロセスには何度も単体テストが含まれます。

コンプライアンス テストを実装する

コンプライアンス テストは、構成がプロジェクトに対して定義したポリシーに従っていることを確認するために使用されます。 たとえば、Azure リソースの地政学的な名前付け規則を定義できます。 または、定義されたイメージのサブセットから仮想マシンを作成することもできます。 コンプライアンス テストは、これらの規則を適用するために使用されます。

コンプライアンス テストは、通常、継続的インテグレーション プロセスの一部として定義されます。

エンド ツー エンド (E2E) テストを実装する

E2E テストでは、運用環境にデプロイする前にプログラムが動作することを検証します。 シナリオの例としては、2 つの仮想マシンを仮想ネットワークにデプロイする Terraform モジュールがあります。 2 台のマシンが互いに ping を実行しないようにすることができます。 この例では、デプロイ前に目的の結果を確認するテストを定義できます。

E2E テストは通常、3 段階のプロセスです。 まず、構成がテスト環境に適用されます。 その後、結果を確認するコードが実行されます。 最後に、テスト環境が再初期化されるか、または停止されます (仮想マシンの割り当て解除など)。