Terraform 基本リソース作成

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

はじめに

Terraform は、HashiCorp によって作成されたオープンソースの Infrastructure as Code (IaC) ツールです。宣言的な設定言語を使用して、データセンターのインフラストラクチャを定義し、プロビジョニングすることができます。これは、設定ファイルに希望するインフラストラクチャを記述すると、Terraform がその状態に一致するようにリソースを作成、更新、または削除する方法を自動的に判断することを意味します。

Terraform のコアワークフローは、主に次の 3 つのステージで構成されます。

  1. Write (記述): インフラストラクチャをコードとして記述します。
  2. Plan (計画): 適用前に変更内容をプレビューします。
  3. Apply (適用): インフラストラクチャをプロビジョニングし、管理します。

この実験(Lab)では、local プロバイダを使用して非常にシンプルなリソース(ローカルファイル)を作成することにより、このワークフロー全体を順を追って学習します。local プロバイダを使用することは、クラウドプロバイダの認証情報なしに Terraform の仕組みを学ぶための優れた方法です。ファイル定義、作成計画、変更の適用、および結果の検証を行います。

main.tf に local_file リソースを定義する

このステップでは、Terraform の設定ファイルにリソースを定義することから始めます。すべての Terraform 設定は、.tf 拡張子で終わるファイルに記述されます。メインの設定ファイルは一般的に main.tf という名前が付けられます。

resource ブロックは、インフラストラクチャオブジェクトを宣言するための主要な構文です。これは、指定されたタイプ(例:local_file)と指定されたローカル名(例:example)を持つリソースを定義します。タイプと名前の組み合わせは、モジュール内で一意である必要があります。

まず、nano テキストエディタを使用して、~/project ディレクトリにある main.tf ファイルを開きます。

nano main.tf

次に、ファイルに次のコードを追加します。これは、local_file 型のリソースを定義し、ローカル名 example を与えます。現時点では、リソースブロックは空です。

resource "local_file" "example" {
}

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

リソースブロックで filename と content を指定する

このステップでは、作成したいファイルのプロパティを指定するために、リソースブロックに引数(arguments)を追加します。引数は、リソースブロックの内部にあるキーと値のペアであり、その設定を定義します。local_file リソースにとって最も重要な引数は、filenamecontent の 2 つです。

  • filename: 作成されるファイルのパス。
  • content: ファイルに書き込まれるコンテンツ。

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

nano main.tf

以下に示すように、filename 引数と content 引数を含めるように local_file リソースブロックを変更します。

resource "local_file" "example" {
  content  = "Hello, Terraform!"
  filename = "${path.module}/hello.txt"
}

ここでは、Terraform に対して、現在のプロジェクトディレクトリに hello.txt という名前のファイルを作成するように指示しています。${path.module} は、現在のモジュールのパス(この場合は ~/project)に解決される特別な Terraform 式です。ファイルの内容は文字列 "Hello, Terraform!" になります。

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

Terraform の初期化と変更のプレビュー

このステップでは、まず Terraform プロジェクトを初期化し、次に terraform plan コマンドを実行して実行計画(execution plan)を作成します。

変更を計画する前に、プロジェクトを初期化する必要があります。terraform init コマンドは、設定ファイルをスキャンし、必要なプロバイダ(この場合は local_file 用)をダウンロードし、バックエンドを設定します。

ターミナルで、まず terraform init を実行します。

terraform init

初期化が成功したら、terraform plan を実行します。このコマンドは、変更の「ドライラン」を提供するため、Terraform ワークフローの重要な部分です。これは、実際に変更を加えずに Terraform がインフラストラクチャに対して何を行うかを示します。これにより、適用前に意図されたアクションを確認および検証できます。

terraform plan

Terraform は設定ファイルを読み込み、インフラストラクチャの現在の状態(現時点では空)と比較します。その後、アクションの計画が表示されます。リソースが 1 つ作成されることを示す、以下に類似した出力が表示されるはずです。

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.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

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

resource "local_file" "example" の隣にある + 記号は、このリソースが作成されることを示しています。出力には、新しいファイルに設定されるすべての属性が詳細に示されています。

terraform apply を実行してリソースを作成する

このステップでは、terraform apply コマンドを使用して変更を適用し、実際にファイルを作成します。このコマンドは、terraform plan の出力で提案されたアクションを実行します。

デフォルトでは、terraform apply は再度計画を表示し、続行する前にインタラクティブな確認を求めます。実験や自動化に役立つように、非対話的に実行するには、-auto-approve フラグを使用できます。

ターミナルで次のコマンドを実行します。

terraform apply -auto-approve

Terraform は計画を実行します。出力には、まず計画が再度表示され、次に適用(application)の進行状況が表示されます。完了すると、確認メッセージが表示されます。

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.example will be created
  + resource "local_file" "example" {
      + content              = "Hello, Terraform!"
      + content_base64sha256 = (known after apply)
      + content_base64sha512 = (known after apply)
      + content_md5          = (known after apply)
      + content_sha1         = (known after apply)
      + content_sha256       = (known after apply)
      + content_sha512       = (known after apply)
      + directory_permission = "0777"
      + file_permission      = "0777"
      + filename             = "./hello.txt"
      + id                   = (known after apply)
    }

Plan: 1 to add, 0 to change, 0 to destroy.
local_file.example: Creating...
local_file.example: Creation complete after 0s [id=42086c02e03bf671ddf621ed9922f52f2c7a605c]

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

"Apply complete!" というメッセージは、Terraform が設定で定義されたリソースを正常に作成したことを確認します。

ファイルシステムに作成されたファイルを確認する

この最終ステップでは、Terraform がローカルファイルシステム上に指定どおりにファイルを正常に作成したことを確認します。local_file リソースを使用したため、結果はプロジェクトディレクトリ内に実体のあるファイルとなります。

まず、ls コマンドを使用して現在のディレクトリ内のファイルを一覧表示します。Terraform の設定ファイルと共に hello.txt が表示されるはずです。

ls

期待される出力:

hello.txt  main.tf  terraform.tfstate

次に、cat コマンドを使用して、新しく作成された hello.txt ファイルの内容を表示します。

cat hello.txt

main.tf で定義した内容が表示されるはずです。

Hello, Terraform!

これにより、Terraform の設定が正常に適用され、コードで定義したとおりにリソースが作成されたことが確認できました。

まとめ

おめでとうございます!最初の Terraform プロジェクトを無事に完了しました。

この実験(Lab)では、Terraform の基本的なワークフローを学習しました。

  1. 記述 (Write): main.tf 設定ファイル内に local_file リソースを定義しました。
  2. 計画 (Plan): terraform plan を使用して、変更を加えることなくファイルの作成をプレビューしました。
  3. 適用 (Apply): terraform apply を使用して計画を実行し、ローカルファイルシステム上にファイルを作成しました。

ローカルファイルを作成するというこの簡単な例は、Infrastructure as Code (IaC) の核となる力を示しています。設定ファイル内でリソースの望ましい状態を宣言し、Terraform がその状態を達成するためのロジックを処理しました。これと全く同じ原則が、クラウド上の仮想マシン、ネットワーク、データベースなど、より複雑なインフラストラクチャを管理する際にも適用されます。