Terraform 出力の管理

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

はじめに

Terraform において、出力値(output values)は、リソースがデプロイされた後に、それらに関する意味のあるデータを公開するための方法です。これらは Terraform モジュールの戻り値のようなものであり、サーバーの IP アドレス、データベース接続文字列、ファイルパスなど、情報を簡単に照会するために使用できます。これにより、その情報にコマンドラインから容易にアクセスできるようになり、他の Terraform 設定から利用することが可能になります。

この実験(Lab)では、出力値を定義、適用、および表示する方法を学習します。まず、ローカルファイルを生成する基本的な Terraform 設定から始め、その後、出力ブロックを追加してそのファイルへのパスを公開します。

出力定義のための outputs.tf ファイルの作成

このステップでは、出力定義専用のファイルを作成します。出力ブロックは任意の .tf ファイルに配置できますが、outputs.tf という名前の別のファイルに配置するのが一般的な慣習であり、ベストプラクティスです。これにより、設定が整理され、プロジェクトのすべての出力を簡単に見つけることができます。

すべての作業は、ターミナルでデフォルトのディレクトリである ~/project ディレクトリ内で行われます。

まず、あらかじめ作成されている main.tf ファイルを確認しましょう。

ls -l

main.tf ファイルと .terraform ディレクトリが表示されるはずです。

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf

次に、touch コマンドを使用して outputs.tf ファイルを作成します。

touch outputs.tf

このコマンドは、カレントディレクトリに空のファイル outputs.tf を作成します。ファイルを再度一覧表示することで、その作成を確認できます。

ls -l

ファイルリストに outputs.tf が表示されるようになります。

total 4
-rw-rw-r-- 1 labex labex 279 Oct 15 12:39 main.tf
-rw-rw-r-- 1 labex labex   0 Oct 15 12:39 outputs.tf

local_file のファイル名に対する出力の定義

このステップでは、outputs.tf ファイルに出力ブロックを定義します。出力ブロックは、Terraform 設定に対して単一の出力値を宣言します。

出力ブロックの基本的な構文は次のとおりです。

output "NAME" {
  ## Arguments go here
}

ここで、NAME は出力の名前を提供する文字列であり、後でその値を照会するために使用します。

nano エディタで outputs.tf ファイルを開き、最初に出力ブロックを追加しましょう。

nano outputs.tf

次に、ファイルに次のコードを追加します。出力名は file_path とします。

output "file_path" {

}

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

このブロックはまだ何も行いません。value 引数が欠けているためです。これは次のステップで追加します。

output ブロックでのリソース属性の参照

このステップでは、出力に表示する値を指定することで、出力を実用的なものにします。これは、出力ブロック内で value 引数を使用して行われます。値は通常、設定内で定義されたリソースの属性への参照です。

リソース属性を参照する構文は <RESOURCE_TYPE>.<RESOURCE_NAME>.<ATTRIBUTE> です。

main.tf ファイルには、次のように定義されたリソースがあります。

resource "local_file" "example" {
  ## ...
}

local_file リソースには filename という属性があり、これが管理するファイルへのパスを保持しています。この属性を参照するには、local_file.example.filename を使用します。

この参照を出力ブロックに追加しましょう。再度 nanooutputs.tf を開きます。

nano outputs.tf

ファイルを以下のように変更し、value 引数を含めます。

output "file_path" {
  value = local_file.example.filename
}

これにより、Terraform に対して、file_path 出力は example という名前の local_file リソースの filename 属性の値を持つべきであることが伝わります。

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

terraform apply を実行して設定を更新

このステップでは、設定の変更を適用します。出力の追加、削除、または変更を行うたびに、Terraform に変更を認識させ、ステートファイルを更新するために terraform apply を実行する必要があります。ステートファイルは、Terraform が出力の値を保存する場所です。

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

terraform apply

Terraform はまず実行計画を表示します。出力が追加されたことを検出し、それの追加を計画します。local_file リソースはまだ存在しないため、その作成も計画されます。

アクションを確認するように求められます。yes と入力し、Enter キーを押します。

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              = "This is an example file managed by 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             = "./example.txt"
      + id                   = (known after apply)
    }

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

Changes to Outputs:
  + file_path = "./example.txt"

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

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

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

Outputs:

file_path = "./example.txt"

出力で確認できるように、apply は成功し、Terraform はその値を持つ file_path 出力を表示します。

terraform output を実行してファイル名を表示

このステップでは、terraform output コマンドを使用して、ステートファイルから出力値を確認します。これは、ステートファイルを手動で解析したり、terraform apply を再実行したりすることなく、インフラストラクチャに関する情報を取得するのに役立ちます。

設定で定義されているすべての出力を確認するには、引数なしでコマンドを実行するだけです。

terraform output

これにより、すべての出力が人間が読める形式で表示されます。

file_path = "./example.txt"

引数として名前を提供することで、特定の出力値を問い合わせることもできます。これはスクリプト内や、単一の情報のみが必要な場合に便利です。

terraform output file_path

このコマンドは、指定された出力の生の値をのみを出力します。

"./example.txt"

これにより、例えばシェルスクリプト内で変数に割り当てるなどして、出力を簡単に利用できます:FILE=$(terraform output -raw file_path)-raw フラグは引用符を削除します。

まとめ

この実験(Lab)の完了おめでとうございます!

この実験(Lab)では、Terraform での出力の管理の基本を学びました。あなたは以下のことを首尾よく実行しました。

  • 専用の outputs.tf ファイルを作成することにより、設定を整理しました。
  • 出力値を宣言するために output ブロックを定義しました。
  • 出力ブロック内でリソース属性を参照し、その値を公開しました。
  • terraform apply を使用して設定を適用し、出力を利用可能にしました。
  • terraform output を使用してコマンドラインから出力値を照会しました。

Terraform の出力は、インフラストラクチャから重要な情報を抽出し、Terraform のワークフローを他のツールやスクリプトと統合するための強力な機能です。