前の Topic では、リソース、依存関係、および変数について説明しました。この Topic では、Terraform の出力について説明します。
出力とは
出力は、一般的なプログラミング言語の戻り値に似ています。出力を使用すると、コマンドラインの出力で作成したインフラストラクチャリソースに関する情報を表示できます。
出力には複数の目的があります。最も一般的なシナリオは、apply コマンドを実行した後に、ルートモジュールリソースのプロパティを実行ログに出力することです。たとえば、ECS インスタンスの詳細のほとんどは、apply コマンドの実行時に計算され、インスタンスの作成後にのみ利用可能になります。
さらに、出力は、あるリソースから別のリソースに情報を渡すために使用されます。たとえば、ECS インスタンスの特定のプロパティ (IP アドレスなど) の値を、この情報を必要とする別のリソース (セキュリティグループルールなど) のために抽出できます。
出力の構文
出力は output ブロックで宣言されます。Terraform 構成ファイルのどこにでも出力を宣言できます。ただし、ベストプラクティスは、outputs.tf という名前の別のファイルで宣言することです。
output キーワードの後のラベルは、出力の名前です。変数名と同様に、出力の名前は現在のモジュール内で一意である必要があります。output ブロックには、次のパラメーターを含めることができます。
value
これは、モジュールのユーザーに返される値を指定する必須パラメーターです。
description
これは、出力の目的と期待される値の説明を提供するオプションのパラメーターです。description パラメーターは、ドキュメントによく使用されます。
sensitive
これは、出力をマスクするために使用されるもう 1 つのオプションのパラメーターです。このパラメーターは、パスワードや AccessKey シークレットなどの機密情報を非表示にする必要がある場合に役立ちます。
次の例では、my-vpc という名前のリソースに対して vpc_id という名前の出力を宣言します。
# VPC の作成
resource "alicloud_vpc" "my-vpc" {
vpc_name = "tf-vpc"
cidr_block = "10.0.0.0/16"
}
output "vpc_id" {
value = alicloud_vpc.my-vpc.id
}terraform apply コマンドを実行すると、my-vpc の ID が出力に表示されます。

さらに、作成済みのリソースについては、いつでも terraform output コマンドを実行して、プロジェクト内のすべての出力をクエリできます。
出力のベストプラクティス
出力を宣言するためのベストプラクティスとして、以下を推奨します。
有用な情報のみを出力する
計算された情報など、有用な情報のみを出力します。変数値やその他の既知の情報の繰り返しである値の出力は避けてください。たとえば、ネットワークリソースの場合、次の計算されたプロパティが役立ちます。
id、リソースの識別子
router_id、VPC の作成後に自動的に作成されるルーターの識別子
route_table_id、VPC の作成後に自動的に作成されるルートテーブルの識別子
変数と同様に、意味のある名前と説明を提供する
すべての出力値を outputs.tf という名前のファイルに配置してコードを整理する
機密性の高い出力をマークする
機密性の高い値を手動で暗号化しようとしないでください。代わりに、組み込みの機密状態管理機能のサポートに依存してください。機密性の高い値の出力を宣言するときは、これらの出力が機密としてマークされていることを確認してください。出力が機密としてマークされている場合、その値は terraform plan または terraform apply コマンドの出力でマスクされます。