はじめに
Terraform における出力値(Output values)は、リソースのデプロイ後にそのリソースに関する有益な情報を公開するための仕組みです。Terraform モジュールの「戻り値」のようなもので、サーバーの IP アドレス、データベースの接続文字列、ファイルパスといった情報を簡単に照会するために使用できます。これにより、コマンドラインから情報を容易に取得できるだけでなく、他の Terraform 構成からその情報を再利用することも可能になります。
この実験では、出力値の定義、適用、および表示方法を学びます。まずはローカルファイルを作成する基本的な 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" {
## 引数はここに記述します
}
ここで NAME は出力の名前を指定する文字列であり、後でその値を照会する際に使用します。
nano エディタで outputs.tf ファイルを開き、最初の出力ブロックを追加しましょう。
nano outputs.tf
ファイルに以下のコードを追加します。出力の名前は file_path とします。
output "file_path" {
}
コードを追加したら、Ctrl+X を押し、Y を入力し、最後に Enter を押して nano を保存・終了します。
このブロックにはまだ value 引数が不足しているため、現時点では何も機能しません。次のステップで追加します。
出力ブロックでのリソース属性の参照
このステップでは、出力値に何を表示するかを指定して、実用的なものにします。これには出力ブロック内で value 引数を使用します。値には通常、構成内で定義されたリソースの属性への参照を指定します。
リソース属性を参照する構文は <RESOURCE_TYPE>.<RESOURCE_NAME>.<ATTRIBUTE> です。
main.tf ファイルには、以下のようにリソースが定義されています。
resource "local_file" "example" {
## ...
}
local_file リソースには filename という属性があり、管理対象のファイルパスが格納されています。この属性を参照するには local_file.example.filename を使用します。
この参照を出力ブロックに追加しましょう。再度 nano で outputs.tf を開きます。
nano outputs.tf
以下のように value 引数を含むようにファイルを修正します。
output "file_path" {
value = local_file.example.filename
}
これは、file_path 出力には example という名前の local_file リソースの filename 属性の値が割り当てられるべきであることを Terraform に伝えています。
Ctrl+X、Y、Enter を押してファイルを保存し、nano を終了します。
terraform apply による構成の更新
このステップでは、構成の変更を適用します。出力値を追加、削除、または変更するたびに、Terraform に変更を認識させ、状態ファイル(state file)を更新するために 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"
出力からわかるように、適用は成功し、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 フラグを使用すると、引用符が取り除かれます。
まとめ
実験の完了、おめでとうございます!
この実験では、Terraform における出力値管理の基礎を学びました。以下の操作を習得しました。
outputs.tfファイルを作成し、構成を整理した。outputブロックを定義して出力値を宣言した。- 出力ブロック内でリソース属性を参照し、値を公開した。
terraform applyを実行して構成を適用し、出力を利用可能にした。terraform outputコマンドを使用して、コマンドラインから出力値を照会した。
Terraform の出力値は、インフラから重要な情報を抽出し、Terraform のワークフローを他のツールやスクリプトと統合するための強力な機能です。



