Terraform プロジェクトの初期化

LinuxBeginner
オンラインで実践に進む

はじめに

Terraform は、HashiCorp 社によって開発されたオープンソースの Infrastructure as Code (IaC) ツールです。宣言的な構成言語を使用して、インフラストラクチャのリソースを定義およびプロビジョニングすることができます。

新しい Terraform プロジェクトで最初に実行するコマンドは terraform init です。このコマンドは、作業ディレクトリを Terraform で使用できるように準備するため、非常に重要です。具体的には、以下の主要なアクションを実行します。

  • バックエンドの初期化: 状態(State)を保存するバックエンドを構成します。
  • プロバイダープラグインのインストール: 構成ファイルをスキャンして必要なプロバイダーを特定し、Terraform Registry からダウンロードします。
  • モジュールのインストール: 構成内で参照されているモジュールをダウンロードします。

この実験では、新しい Terraform プロジェクトを初期化する基本的なプロセスを学びます。プロジェクトディレクトリを作成し、シンプルな構成ファイルを定義し、terraform init を使用して必要なプロバイダープラグインをダウンロードします。

Terraform プロジェクト用の新しいディレクトリを作成する

このステップでは、新しい Terraform プロジェクト専用のディレクトリを作成します。競合を避け、構成を整理しておくために、各 Terraform プロジェクトを個別のディレクトリで管理するのがベストプラクティスです。すべての操作は ~/project ディレクトリ内で行います。

まず、terraform-init-lab という名前の新しいディレクトリを作成します。

mkdir terraform-init-lab

次に、作成したディレクトリに移動します。これ以降の実験では、このディレクトリが作業ディレクトリとなります。

cd terraform-init-lab

ターミナルのプロンプトが ~/project/terraform-init-lab ディレクトリ内であることを示しているはずです。

プロジェクトディレクトリに main.tf ファイルを作成する

このステップでは、プロジェクトのメイン構成ファイルを作成します。Terraform の構成ファイルは .tf 拡張子を使用し、HashiCorp Configuration Language (HCL) で記述されます。慣習として、主要な構成ファイルには main.tf という名前が付けられます。

terraform-init-lab ディレクトリ内で、touch コマンドを使用して main.tf という空のファイルを作成します。

touch main.tf

ディレクトリの内容を一覧表示して、ファイルが作成されたことを確認できます。

ls

出力に main.tf ファイルが表示されるはずです。

main.tf

main.tf にローカルプロバイダーの構成を定義する

このステップでは、main.tf ファイルに構成コードを追加します。このコードは、Terraform に対してどのプロバイダーをダウンロードして使用すべきかを指示します。プロバイダーとは、クラウドプロバイダーや SaaS サービスなど、特定の API と Terraform が対話できるようにするためのプラグインです。

今回の実験では、ローカルファイルを管理できる local プロバイダーを使用します。クラウドの認証情報が不要なため、学習に最適なプロバイダーです。

nano テキストエディタを使用して main.tf ファイルを開きます。

nano main.tf

次に、以下のコードブロックをコピーして nano エディタに貼り付けます。この terraform ブロックは、プロジェクトに必要なプロバイダーを指定するものです。

terraform {
  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "2.4.0"
    }
  }
}

この構成は Terraform に対して以下のように伝えています。

  • required_providers: このプロジェクトが必要とするプロバイダーを宣言します。
  • local: プロバイダーに付けるローカル名です。
  • source: Terraform Registry におけるプロバイダーのグローバルアドレス(hashicorp/local)です。
  • version: 使用するプロバイダーの特定のバージョンです。

コードを貼り付けたら、Ctrl+OEnterCtrl+X の順に押して、ファイルを保存して nano を終了します。

terraform init を実行してプロジェクトを初期化する

このステップでは、terraform init コマンドを実行します。プロバイダーの構成が完了したため、Terraform はプロジェクトを初期化するために何をすべきかを理解しています。main.tf ファイルを読み込み、required_providers ブロックを見つけ、Terraform Registry から指定されたバージョンの hashicorp/local プロバイダーをダウンロードします。

terraform-init-lab ディレクトリにいることを確認してから、初期化コマンドを実行します。

terraform init

Terraform がバックエンドとプロバイダープラグインを初期化している様子が表示されます。初期化が成功すると、完了メッセージが表示されます。

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/local versions matching "2.4.0"...
- Installing hashicorp/local v2.4.0...
- Installed hashicorp/local v2.4.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

.terraform ディレクトリでダウンロードされたプラグインを確認する

このステップでは、terraform init がプロバイダープラグインを正常にダウンロードしたことを確認します。このコマンドは、プロジェクトフォルダ内に .terraform という隠しディレクトリを作成し、そこにプラグインやその他の初期化データを保存します。

まず、隠しファイルを含むすべてのファイルとディレクトリを一覧表示し、init コマンドによって作成された新しい成果物を確認します。

ls -a

出力に .terraform ディレクトリと .terraform.lock.hcl ファイルが表示されるはずです。ロックファイルは、初期化中に選択されたプロバイダーのバージョンを記録しています。

.  ..  main.tf  .terraform  .terraform.lock.hcl

次に、.terraform ディレクトリの内容を調べて、ダウンロードされたプロバイダーを確認しましょう。tree コマンドを使用すると、階層構造を明確に把握できます。

tree .terraform

出力には、プロバイダープラグインが保存されているディレクトリ構造が表示されます。レジストリからダウンロードされた local プロバイダーの実行ファイルを確認できます。

.terraform
└── providers
    └── registry.terraform.io
        └── hashicorp
            └── local
                └── 2.4.0
                    └── linux_amd64
                        └── terraform-provider-local_v2.4.0_x5

6 directories, 1 file

これで、terraform init が必要なプロバイダーを使用してプロジェクトを正常にセットアップできたことが確認できました。

まとめ

おめでとうございます!Terraform プロジェクトの初期化に関するこの実験を無事に完了しました。

この実験では、新しい Terraform プロジェクトを開始するための基本的な手順を学びました。以下の操作を実践しました。

  • Terraform プロジェクト専用のディレクトリを作成する。
  • main.tf 構成ファイルに必要なプロバイダーを定義する。
  • terraform init コマンドを実行してプロジェクトを準備する。
  • プロバイダープラグインが .terraform ディレクトリにダウンロードされたことを確認する。

プロジェクトの初期化が完了したことで、リソース定義の記述や、terraform plan および terraform apply を使用したインフラストラクチャの管理など、Terraform ワークフローの次のステップに進む準備が整いました。