すべてのプロダクト
Search
ドキュメントセンター

Terraform:Terraform の出力

最終更新日:Jun 03, 2026

出力とは

出力は、プログラミング言語における戻り値のようなものです。出力を使用すると、terraform apply の実行後にインフラストラクチャの属性を公開できます。これにより、属性を検査したり、モジュール間で受け渡したり、他のツールへ入力したりできます。

主なユースケースは次のとおりです:

  • リソース属性の表示terraform apply の実行後に、算出された値 (ECS インスタンス ID や IP アドレスなど) を CLI に表示します。

  • リソース間でのデータ受け渡し — あるリソースから属性を抽出し、別のリソースで参照します。たとえば、セキュリティグループのルールで VPC の IP アドレスを使用する場合などです。

  • モジュール間でのデータ共有 — 子モジュールから値を公開し、親モジュールが参照できるようにします。

  • 外部ツールとの連携terraform output を使用して、出力値をスクリプトや CI/CD パイプラインに渡します。

出力の構文

出力は output ブロックで宣言します。output ブロックは Terraform 設定ファイルのどこにでも配置できますが、設定の可読性を高めるために、outputs.tf という名前の専用ファイルに配置することを推奨します。

image

出力は output キーワードの後のラベルは出力名です。出力名はモジュール内で一意である必要があります。output ブロックは、次の引数を受け取ります:

  1. value

    (必須) モジュールのユーザーに返す値です。

  2. description

    (任意) 出力の目的について人間が判読できる説明です。Terraform はこの説明を使用して、モジュールに関するドキュメントを生成します。

  3. sensitive

    (任意) 出力が機密であるかどうかを示すブール値です。true の場合、Terraform はパスワードや AccessKey Secret などの機密データの漏洩を防ぐために、CLI の出力から値を編集します。

次の例では、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 が成功すると、VPC ID が CLI の出力に表示されます:

alicloud_vpc.my-vpc: Creating...
alicloud_vpc.my-vpc: Creation complete after 7s [id=vpc-bp1gcq59rsakmwx1apmhn]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
vpc_id = "vpc-bp1gcq59rsakmwx1apmhn"

terraform output コマンドによる出力のクエリ

作成済みのリソースについては、いつでも terraform output を実行して、すべての出力値を表示できます:

$ terraform output
vpc_id = "vpc-bp1gcq59rsakmwx1apmhn"

単一の値を raw 文字列として取得する (シェルスクリプトに適しています) には、次のようにします:

$ terraform output -raw vpc_id
vpc-bp1gcq59rsakmwx1apmhn

すべての出力を JSON として取得する (プログラムでの使用に適しています) には、次のようにします:

$ terraform output -json
{
  "vpc_id": {
    "sensitive": false,
    "type": "string",
    "value": "vpc-bp1gcq59rsakmwx1apmhn"
  }
}
警告

-raw および -json フラグは、機密出力のプレーンテキスト値を表示します。出力がログに記録されたり、キャプチャされたりする状況では、これらのフラグを使用しないでください。

子モジュールからの出力へのアクセス

親モジュールは、module.<MODULE_NAME>.<OUTPUT_NAME> を使用して子モジュールの出力にアクセスします:

module "network" {
  source = "./modules/network"
}

resource "alicloud_security_group_rule" "allow_vpc" {
  cidr_ip = module.network.vpc_cidr_block
}

子モジュール (./modules/network) は、出力を宣言する必要があります:

output "vpc_cidr_block" {
  description = "VPC の CIDR ブロック"
  value       = alicloud_vpc.main.cidr_block
}

出力のベストプラクティス

  1. 有用な情報のみを出力する

    変数の値をそのまま返す静的な値ではなく、算出された属性をエクスポートします。ネットワークリソースの場合、有用な出力には次のものが含まれます:

    1. id :リソースの識別子。

    2. router_id :VPC に自動的に作成されるルーターの識別子。

    3. route_table_id :VPC に自動的に作成されるルートテーブルの識別子。

  2. 意味のある名前と説明を使用する — 変数名と同じ規則に従い、description 引数を指定して出力の意図を文書化します。

  3. すべての出力を outputs.tf に配置する — 専用ファイルにまとめることで、設定が公開する内容を簡単に確認できます。

  4. 機密出力にマークを付ける

    値を手動で暗号化する代わりに、Terraform の組み込みの sensitive = true を使用します。出力が機密としてマークされると、Terraform は terraform planterraform apply の出力からその値を編集します。