ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
Terraformテスト・フレームワークとOracle Cloud Infrastructure DevOpsを使用したTerraform検証パイプラインの構築
イントロダクション
組織は、Terraformモジュールを頻繁に使用して複雑なリソース・プロビジョニングを管理し、開発者が必要なインフラストラクチャのデプロイに必要なパラメータを入力するための簡単なインタフェースを提供します。モジュールは、コードの再利用を容易にし、3層のWebアプリケーション、クラウド・ネットワーキング環境、データ分析パイプラインなど、一般的なワークロードのデプロイメントを標準化する手段を組織に提供します。Terraformモジュールを開発する場合、作成者は通常、手動テストから開始します。これには、terraform validate for Syntax Validation、terraform plan to preview the execution plan、terraform applyなどのコマンドを使用し、その後、Oracle Cloud Infrastructure (OCI)コンソールでリソース構成を手動で検査します。ただし、手動テストは、スケーラブルではなく人的エラーが発生しやすく、意図しない問題を引き起こす可能性があります。モジュールは組織内の複数のチームによって使用されるため、リリース前に変更を徹底的にテストすることが重要です。
Terraformテストは、モジュール作成者がTerraformモジュールのユニット・テストおよび統合テストを実行できるように設計された新しいテスト・フレームワークです。これにより、モジュールで定義されているインフラストラクチャの作成、インフラストラクチャの検証チェックの実行、テストに合格したかどうかに関係なくテスト・リソースの破棄が可能になります。また、Terraformテストでは、リソースを破棄できない場合に警告が表示されます。Terraformモジュールと同じHashiCorp構成言語(HCL)構文を使用すると、作成者が他のツールやプログラミング言語を学ぶ必要が最小限に抑えられます。
各Terraformテストはテスト・ファイル内にあります。Terraformは、ファイル拡張子(.tftest.hcl
または.tftest.json
)に基づいてテスト・ファイルを検出します。すべてのテスト・ファイルは、次のようにルートレベルの属性とブロックで構成されます。
- 1つ以上の
run
ブロック。 - 1つまたはゼロの
variables
ブロック。 - ゼロから多数の
provider
ブロック。
Terraformは、run
ブロックを順番に実行し、構成ディレクトリで実行されている一連のTerraformコマンドを模倣します。Terraformでは、テスト・プロセスの開始時にこれらのブロック内のすべての値が評価されるため、variables
ブロックとprovider
ブロックの配置順序は関係ありません。わかりやすくするために、variables
およびprovider
ブロックをテスト・ファイルの先頭に置くことをお薦めします。
目的
- Terraformモジュールを検証し、継続的インテグレーション/継続的デプロイメント(CI/CD)パイプラインを使用してプロセスを自動化する方法をデモンストレーションします。
前提条件
- Terraform v1.6.0以降をインストールして設定します。詳細は、Terraformのインストールを参照してください。
タスク1: リソース作成を検証するためのTerraformテストの記述
-
Terraformテスト・ファイルの基本的な構造について説明しました。次のTerraform構成の機能を確認するための基本的なテストを記述します。次のTerraform構成では、標準層のOCIオブジェクト・ストレージ・バケットが作成されます。
#main.tf resource "oci_objectstorage_bucket" "test_bucket" { compartment_id = var.compartment_id name = var.bucket_name namespace = var.bucket_namespace storage_tier = var.bucket_storage_tier versioning = var.bucket_versioning }
-
必要な変数を使用して
var.tf
ファイルを作成します。variable compartment_id { default = "<compartment-ocid>" } variable region { default = "<region>" } variable bucket_name { default = "<bucket-name>"} variable bucket_namespace { default = "<object-storage-namespace>"} variable bucket_access_type { default = "ObjectRead"} variable bucket_storage_tier { default = "Standard"} variable bucket_versioning {default = "Enabled"}
-
リソース・プリンシパル認可を使用してOCI Terraformプロバイダを構成すると、プロバイダは、プロバイダ定義内で資格証明を指定しなくてもAPIコールを実行できます。OCIプロバイダのリソース・プリンシパル認可を設定するには、リソース・プリンシパル認可を参照してください。
-
tests
ディレクトリにTerraformテスト・ファイルを作成します。次に、ディレクトリ構造の例を示します。├── main.tf └── tests └── test.tftest.hcl
-
作成されたバケットの層が標準かどうかをチェックする
test.tftest.hcl
ファイルを更新します。# test.tftest.hcl run "valid_bucket_tier" { command = plan assert { condition = oci_objectstorage_bucket.test_bucket.storage_tier == "Standard" error_message = "bucket tier is not standard" } }
ノート:バケットのストレージ層が標準でない場合、テストは失敗します。
-
前述のterraformファイルをOCIコード・リポジトリにプッシュします。このコード・リポジトリをCI/CDパイプラインで使用します。
タスク2: Terraform構成を検証するためのOCI DevOpsビルド・パイプラインの構築
build_spec.yaml
ファイルで、terraform init
およびterraform validate
コマンドを使用して、Terraformを初期化し、構成が有効であることを確認します。次に、terraform testコマンドによって、構成されたテストが実行されます。いずれかのテラフォーム・テストが失敗した場合、パイプラインも失敗します。
version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash
failImmediatelyOnError: true
steps:
- type: Command
name: "Initialize Terraform"
command: |
terraform init
terraform validate
- type: Command
name: "Test Terraform"
command: |
terraform test
次のステップ
Terraform構成で簡単なアサーション・テストを実行しました。統合テスト、ユニット・テスト、エンドツーエンド・テストなど、様々なタイプのテストを実行できます。詳細は、Terraformテストを参照してください。
このTerraform検証パイプラインは、アプリケーションCI/CDパイプラインと統合できます。Terraform検証パイプラインは、前のステージからアーティファクトをプルし、変更を実装する前に構成をテストします。
関連リンク
承認
- 著者 - Nikhil Khandelwal (エンタープライズ・クラウド・アーキテクト)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Build a Terraform Validation Pipeline using Terraform Test Framework and Oracle Cloud Infrastructure DevOps
F99875-01
June 2024