Terraform 変数の使い方

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

はじめに

Terraform は、インフラストラクチャを安全かつ効率的に構築、変更、バージョン管理するための強力なツールです。Terraform の設定を柔軟かつ再利用可能にする重要な機能の 1 つは、入力変数 (input variables) の使用です。変数を使用すると、設定をパラメータ化できるため、値をハードコーディングすることを避け、ソースコードを変更することなくデプロイを容易にカスタマイズできます。

この実験 (Lab) では、Terraform 変数の使用に関する基本を学びます。ローカルファイルを生成するシンプルな設定を作成します。このファイルの名前と内容は、定義し、Terraform コマンド実行時に渡す変数によって決定されます。

この実験 (Lab) の終わりまでに、以下の点を理解するでしょう。

  • .tf ファイル内で変数を宣言する方法。
  • リソースブロック内で変数を参照する方法。
  • terraform apply を実行する際に、変数に値を供給する方法。

変数定義のための variables.tf ファイルを作成する

このステップでは、変数宣言を保持するための専用ファイルを作成します。変数は任意の .tf ファイルで宣言できますが、それらを variables.tf という名前のファイルに配置するのが一般的な慣習です。このプラクティスは、プロジェクトを整理し、他の人が設定が期待する入力値を理解しやすくするのに役立ちます。

すべての作業は ~/project ディレクトリ内で行います。まず、touch コマンドを使用して variables.tf ファイルを作成します。

touch variables.tf

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

ls

出力に variables.tf が表示されるはずです。

variables.tf

現時点では、このファイルは空です。次のステップで、変数定義をここに追加します。

ファイル名用の文字列変数を定義する

このステップでは、最初の変数を定義します。この変数は、Terraform が作成するファイルの名前を指定するために使用されます。

変数は variable ブロックを使用して宣言されます。各ブロックは単一の入力変数を定義します。filename という名前の変数を定義しましょう。

前のステップで作成した variables.tf ファイルを nano エディタで開きます。

nano variables.tf

次に、ファイルに次のコードを追加します。このコードは filename という名前の変数を宣言し、その型を string に指定し、役立つ説明を含んでいます。

variable "filename" {
  description = "The name of the file to create."
  type        = string
}
  • variable "filename": これは filename という名前の変数の宣言を開始します。
  • description: このオプションの引数は、変数の目的を人間が読める形で提供します。
  • type: この引数は、変数のデータ型を指定します。ここでは、テキスト値を受け入れることを示すために string を使用します。

コードを追加した後、Ctrl+X、次に Y、そして Enter を押して nano を保存して終了します。

コンテンツ用の文字列変数を定義する

このステップでは、ファイルに書き込まれるコンテンツを保持するための 2 番目の変数を定義します。これは前のステップと同じパターンに従います。

再度 nanovariables.tf ファイルを開きます。

nano variables.tf

以前追加した filename 変数定義の下に、次の variable ブロックを追加します。

variable "content" {
  description = "The content to write into the file."
  type        = string
}

これで、完全な variables.tf ファイルは次のようになります。

variable "filename" {
  description = "The name of the file to create."
  type        = string
}

variable "content" {
  description = "The content to write into the file."
  type        = string
}

これにより、Terraform 設定の 2 つの入力パラメータが定義されます。1 つはファイル名用、もう 1 つはそのコンテンツ用です。

ファイルを保存して nano を終了します(Ctrl+XYEnter)。

local_file リソースブロックで変数を参照する

このステップでは、メインの Terraform 設定ファイルである main.tf を作成し、直前に定義した変数を使用します。ローカルファイルシステム上にファイルを作成するために、hashicorp/local プロバイダの一部である local_file リソースを使用します。

まず、main.tf という名前の新しいファイルを作成します。

nano main.tf

次に、main.tf ファイルに次の設定を追加します。

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

resource "local_file" "my_file" {
  filename = var.filename
  content  = var.content
}

この設定を詳しく見てみましょう。

  • terraform { ... }: このブロックは、必要なプロバイダを含む Terraform の設定を構成します。ここでは、設定に local プロバイダが必要であることを Terraform に伝えています。
  • resource "local_file" "my_file": これは local_file 型のリソースを定義し、ローカル名 my_file を付けます。
  • filename = var.filename: ここで変数を参照します。var. プレフィックスの後に変数名(filename)が続くことで、この引数に対して filename 変数の値を使用するように Terraform に指示します。
  • content = var.content: 同様に、これは content 変数の値をリソースの content 引数に割り当てます。

コードを追加した後、ファイルを保存して nano を終了します(Ctrl+XYEnter)。

変数値を指定して terraform apply を実行する

最終ステップとして、Terraform 設定を実行し、変数に値を渡します。

まず、Terraform ワーキングディレクトリを初期化する必要があります。terraform init コマンドは、設定で定義されているプロバイダ(この場合は local プロバイダ)をダウンロードしてインストールします。

次のコマンドを実行します。

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 been successfully initialized!
...

これで、設定を適用できます。変数に値を渡すには、-var コマンドラインフラグを使用できます。また、対話的な確認プロンプトをスキップするために -auto-approve フラグも使用します。

filenamecontent の値を指定して terraform apply コマンドを実行します。

terraform apply -var="filename=hello.txt" -var="content=Hello, Terraform Variables." -auto-approve

Terraform は実行計画を生成し、ファイルを作成します。出力は次のようになります。

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  ## local_file.my_file will be created
  + resource "local_file" "my_file" {
      + content              = "Hello, Terraform Variables."
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "hello.txt"
      + id                   = "..."
    }

Plan: 1 to add, 0 to change, 0 to destroy.

local_file.my_file: Creating...
local_file.my_file: Creation complete after 0s [id=...]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

すべてが機能したことを確認するために、cat コマンドを使用して新しく作成されたファイルの内容を表示します。

cat hello.txt

変数で提供したコンテンツが表示されるはずです。

Hello, Terraform Variables.

おめでとうございます!Terraform 変数を使用してファイルを正常に作成できました。

まとめ

この実験(Lab)では、Terraform で変数を扱うための基本的なワークフローを学習しました。設定をパラメータ化し、より動的で再利用性の高いものにすることに成功しました。

以下の方法を学習しました。

  • 専用の variables.tf ファイルに変数の宣言を整理する方法。
  • variable ブロックを使用して変数を宣言し、その type(型)と description(説明)を指定する方法。
  • リソースブロック内で var.<variable_name> 構文を使用して変数に参照する方法。
  • 必要なプロバイダをダウンロードするために terraform init で Terraform プロジェクトを初期化する方法。
  • terraform apply コマンドで -var フラグを使用して、実行時に変数値を供給する方法。

この知識は、Terraform を使用してより複雑でモジュール化された IaC(Infrastructure as Code)を作成するための重要な構成要素となります。