Terraform の構成とスクリプト
このユニットでは、Terraform の構成とスクリプトを見ていきます。
Terraform を使用する理由
インフラストラクチャ マネージャーであるあなたには、Azure インフラストラクチャをプロビジョニングして管理するためのツールが必要です。 また、Azure リソースのトポロジを記述する構成ファイルで、"コードとしてのインフラストラクチャ" を使用する必要もあります。
HashiCorp Terraform は、複数のクラウド プロバイダー間でインフラストラクチャをデプロイする場合に適しています。 各インフラストラクチャの定義を管理するための一貫したツールが開発者に提供されます。
インフラストラクチャの管理を自動化する
テンプレート ベースの Terraform 構成ファイルを使用すると、反復可能かつ予測可能な方法で Azure リソースの定義、プロビジョニング、および構成を行うことができます。 この自動化には、いくつかの利点があります。
- これによってインフラストラクチャがデプロイおよび管理されるため、人為的なエラーが発生する可能性が低くなります。
- 同じテンプレートが複数回デプロイされ、同一の開発、テスト、および運用環境が作成されます。
- 必要に応じて開発環境とテスト環境を作成することで、それらのコストが削減されます。
インフラストラクチャの変更内容を適用前に把握する
リソースのトポロジが複雑になるにつれ、インフラストラクチャの変更の意味と影響を把握するのが困難になることがあります。
Terraform を使用すると、インフラストラクチャの変更内容を適用前に検証およびプレビューすることができます。 チームのメンバーは、提案された変更内容とその影響を開発プロセスの早い段階で理解することによって、より効果的に共同作業を行うことができます。
Terraform 構成ファイル
構成ファイルにより、実行プランと、目的の状態に達するためにそのプランで行われることが生成されます。 その後、記述されたインフラストラクチャを Terraform で構築できます。 構成が変更されたら、Terraform で変更内容を決定して、増分実行プランを作成できます。
Terraform 構成ファイルでは、インフラストラクチャを記述できるように設計されている、YAML に似た独自の構成言語が使用されます。
構成ファイルを作成するには、HashiCorp Configuration Language (HCL) 構文を使用します。 HCL は宣言型であり、目標に到達するための手順ではなく、意図される目標を記述します。 HCL 構文を使用すると、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定することができます。
構成ファイルは、拡張子が .tf のプレーンテキスト ファイルとして保存されます。 これらは次のとおりです。
- main.tf: (必須) 完全なインフラストラクチャを直接、またはモジュールの呼び出しを通じてデプロイする、メインの構造が定義されます
- outputs.tf: Terraform モジュールの各戻り値が特定されます
- variables.tf: main.tf の変数が (必須であるかどうかにかかわらず) 定義されます
モジュール
Terraform リソースをモジュールにグループ化して、より大きな構成単位を作成することができます。 これらのモジュールは、1 つのディレクトリに格納されている構成ファイルのセットです。 シンプルな構成は、1 つ以上の .tf ファイルを含む 1 つのディレクトリで構成されます。
モジュールには多くの利点があります。 たとえば、モジュールによって:
- プロジェクトを整理しやすくなります。
- 複雑さがカプセル化されます。
- 共通のタスクを再利用できるようになります。
- 一貫性がもたらされ、優れたプラクティスが適用されるようになります。
main.tf ファイル
main.tf ファイルには、モジュールに関する構成の詳細の主なセットが含まれます。 このファイルは、Terraform の "プラン" と呼ばれることがよくあります。 Terraform のプランでは、必要なインフラストラクチャ リソースを指定します。 このファイルには任意の名前を付けることができますが、通常は main.tf という名前が使用されます。
Terraform のワークフロー
Terraform により、自動化のための "初期化、計画、適用" のコア ワークフローが推奨されています。 このワークフローにより、新規および更新される Git pull request に対して Terraform のすべての CI/CD アクションが実行されます。
このワークフローの主要なアクションは次のとおりです。
- Init: Terraform 構成ファイルを使用して作業ディレクトリを初期化します
- Plan: 現在の構成に合わせてリソースを変更するための計画を立てます
- Apply: 計画によって記述されている変更を適用します
State
"状態" を使用すると、追加、更新、または削除する Azure リソースが Terraform によって把握されます。
Terraform により、状態を使用してプランが作成され、インフラストラクチャに対する変更が行われます。 操作が行われる前に、Terraform により実際のインフラストラクチャに従って状態が更新されます。
既定では、状態は terraform.tfstate という名前のローカル テキスト ファイルに格納されます。 このファイルは Terraform によって、ユーザーがモジュールで定義したワークフロー アクションを使用して管理されます。
また、状態をリモートで格納することもできます。この方法はチーム環境に適しています。 状態をリモートで管理する方法の詳細については、このモジュールの最後にある「まとめ」ユニットを参照してください。
次のステップ
次のユニットでは、Terraform を GitHub Actions または Azure Pipelines と共に使用して、アプリケーションのプロビジョニングとデプロイを行う方法について説明します。