Skip to Content

Terraform Output とは?

デジタル環境における複数の抽象的なサーバー・スタックを青色の背景で示した図

Terraform は、インフラ・アス・コードとして定義およびプロビジョニングするための広く受け入れられているツールです。このツールの重要な機能の 1 つは、terraform output です。ユーザーは、Terraform 構成から有用な情報を抽出して表示できます。

この記事では、terraform output の重要性、その構文と使用法、インフラ・アス・コード・プロジェクトを強化するためのベストプラクティスについて詳しく解説します。

Terraform Output を理解する

複雑なインフラを管理し、さまざまなリソースや外部システム間で重要なデータを共有する必要があるとします。terraform output は、まさにそれを可能にする機能です。この機能では、Terraform 構成から重要な情報を簡単に抽出して表示し、さまざまなモジュール、ワークスペース、外部システム間で共有できます。

terraform output は、Terraform が管理するリソースに関する貴重な情報を公開します。terraform output コマンドライン・ツールでは、これらの出力値を取得して表示することができます。この出力値は、インフラや外部システムの他のコンポーネントが利用できます。

terraform output の機能には、次のようなメリットがあります。

  • データの共有:terraform output は、Terraform 構成と他のシステム間で動的に生成されたリソースの属性を共有するという点で優れています。Terraform で EC2 インスタンスを作成するとします。output ブロックはパブリック IP アドレスをキャプチャし、別の Terraform 構成でセキュリティ・グループ・ルールを設定するか、外部構成管理ツールに渡します。
  • 自動化:出力は、依存リソースに動的な値を提供することで、自動化された構成管理を可能にします。例えば、Terraform でデータベース・サーバーをプロビジョニングし、データベース・ポートが動的に割り当てられている場合、output ブロックはこのポートをキャプチャできます。このキャプチャされたポートは、Web アプリケーションからデータベースへの接続を確立するために別の構成内で使用できます。
  • デバッグと検証:出力は、単にリソースの状態を検証するだけではありません。トラブルシューティング中に、出力値を調べて、依存プロセスに問題を引き起こす可能性のある不整合や予期しないリソース構成を特定できます。
  • 一貫性:出力は、環境間の一貫性を促進します。ハードコードされた値ではなく出力を参照することで、開発、テスト、本番環境全体で同一の構成ロジックを維持できます。
  • ドキュメント:出力はドキュメントの形式として機能し、Terraform がプロビジョニングするインフラに関する明確で簡潔な情報を提供します。これは、システムを理解する必要のある他のエンジニアやチームにとって特に重要です。

Terraform Output の構文と使用

terraform output は、output ブロックを使用して構成ファイル内で定義されます。構文の内訳は次のとおりです。

output "<name>" {
  value = <expression>
}
  • <name>:これは、出力変数のユーザー定義の名前です。保持するデータを表すわかりやすい名前を選択します。
  • <expression>:これは、公開する値を評価する Terraform の式です。リソースの属性を参照したり、関数を使用したり、計算を実行したりできます。

出力の例

次の AWS インスタンスの例は、terraform output をさまざまなデータ型として表示する方法を示しています。

  • 文字列の出力:

output "instance_id" {
  value = aws_instance.example.id
}
  • 数値の出力:

output "instance_count" {
  value = length(aws_instance.example)
}
  • リストの出力:

output "instance_ips" {
  value = aws_instance.example[*].public_ip
}
  • マップの出力:

output "instance_tags" {
  value = {
    for instance in aws_instance.example :
    instance.id => instance.tags
  }
}

コード内の出力を参照する

定義後は、Terraform コード内の出力を名前で参照できます。以下に例を示します。

module "example_module" {
  source  = "./modules/example"
  # Reference the output from another module
  instance_id = var.other_module_name.instance_id
}

この例では、example_module は、other_module_name という名前の別のモジュールからの instance_id 出力を参照しています。これは、出力がモジュール間の通信とデータ交換をどのように促進するかを示しています。

出力変数とデータソースの比較

Terraformの出力とデータソースは一見類似しているように見えますが、IaC(インフラ・アズ・コード)ワークフローでは異なる目的を果たします。以下に、違いを明確化するための内訳を示します。

Terraform の出力変数

terraform output は、Terraform が管理するリソースに関する情報を明らかにします。出力値は、Terraform 構成内の既存のリソースの属性から得られます。出力は通常、次のような場合に使用されます。

  • Terraform モジュールまたは構成間でのデータ共有
  • 構成管理または監視のために情報を外部システムに渡す
  • ハードコードされたデータではなく動的な値を参照することで、構成ロジックを簡素化

このようなシナリオの例としては、EC2 インスタンスのパブリック IP アドレスを抽出し、それを使用して別の Terraform モジュールでセキュリティ・グループ・ルールを構成する場合が挙げられます。

Terraform データソース

データソースは、外部ソースからデータを取得します。API やプラグインと連携し、クラウド・プロバイダ、構成管理ツール、その他の外部システムから情報を取得します。データソースは、次のような場合に利用されます。

  • Terraform 自身が管理していない既存のリソースに関する情報へのアクセス
  • 外部データを使用して Terraform リソースを動的に構成
  • IaC と他のツールやプラットフォームの統合

例えば、データソースを使用して、クラウド・プロバイダ内の利用可能なリージョンのリストを取得してから、それらのリージョンにリソースを作成するとします。

簡単に言えば、出力変数とデータソースのどちらを使用するかは、必要なデータの原点によって異なります。

  • Terraform 構成内で管理されるリソースからデータが発生した場合は、出力変数を使用します。
  • データが外部システムに存在する場合、または動的に取得する必要がある場合は、データソースを使用します。

Terraform Output の使用に関するベストプラクティス

terraform output を使用する際は、以下のベストプラクティスを考慮する必要があります。

  • わかりやすい名前を使用する:出力変数によって公開されるデータを反映する明確で簡潔な名前を選択します。「output1」や「data」のような一般的な名前は避けましょう。代わりに、「rds_instance_public_ip」や「webserver_security_group_id」のような名前を使用します。これにより、構成の読みやすさと保守性が向上します。
  • 一貫した命名規則を使用する:Terraform コードベース全体で一貫した命名規則を維持します。これには、アンダースコアやハイフンを使用して分離し、全てのモジュールや構成で命名スキームを整合させることが含まれます。
  • グループ関連の出力:関連する出力を論理的にグループ化します。例えば、データベース・インスタンスに関連する複数の出力(IP アドレス、ポート、ユーザー名)がある場合、それらを構成ファイル内の単一の見出しにグループ化します。これにより、組織が改善され、特定の情報を容易に見つけることができます。
  • コメントの使用:各出力変数の目的と用途を説明する明確なコメントを含めます。これは、すぐに自己説明できない出力や、他のモジュールやチームで使用される出力に特に役立ちます。
  • 不要な出力を回避:本来必要とされないデータの出力を定義することは避けてください。過剰な出力は、出力を乱雑にし、最も関連性の高い情報を特定することを困難にします。Terraform 構成内でデータを直接使用できるかどうか、あるいは代替アプローチがより効率的かどうかを評価します。
  • シークレットの出力を避ける:可能であれば、機密データを Terraform 構成に完全に保存しないでください。HashiCorp Vault や環境変数の活用など、シークレットを管理する代替手段を検討してください。
  • Terraform の sensitive 属性を使用する:シークレットに出力を避けられない場合は、output ブロック内の sensitive 属性を使用して、それらを機密としてマークします。これにより、terraform output コマンド実行時に値が表示されないよう指示できます。

以下に、sensitive 属性を追加した例を示します。

output "db_password" {
  value     = aws_db_instance.example.password
  sensitive = true
}

まとめ

terraform output により、静的構成と動的インフラ間のギャップを埋めることができます。出力を活用することで、データ共有の合理化、タスクの自動化、検証の簡素化が可能になります。

インフラの可能性を最大限に引き出すには、Portworx などのピュア・ストレージのソリューションを使用して Terraform Kubernetes のデプロイメントに永続ストレージを有効にし、Pure Cloud Block Store を使用してクラウドベースのアプリケーションに理想的なストレージ・ソリューションを提供することを検討してください。

こちらの資料もご覧ください!

10/2025
Virtual Machine Provisioning at Enterprise Scale
Sizing and scaling Red Hat OpenShift Virtualization with Portworx.
ホワイト・ペーパー
22 pages

関連リソースとイベント

動画
動画:エンタープライズ・データ・クラウドのメリット

会長兼 CEO のチャーリー・ジャンカルロが、ストレージ管理からデータ管理へのシフトこそが未来である理由を解説します。統合により、エンタープライズ IT の運用管理がいかに変わるかがわかります。

視聴する
リソース
従来のストレージは未来を支えません。

近代的なワークロードには、AI 対応の高速性、セキュリティ、拡張性が求められます。スタックの準備はできていますか?

現行のサイバー対策を評価する
Pure360 デモ
ピュア・ストレージを探索、体験、学習できます。

ピュア・ストレージの製品や機能をご紹介するオンデマンド動画/デモ付き動画をご用意しています。是非ご利用ください!

デモ動画を見る
ソート・リーダーシップ
イノベーション競争

ストレージ技術革新の最前線に立つ業界リーダーによる最新のインサイトと展望。

詳しく見る
このブラウザは現在サポートされていません。

古いブラウザには、セキュリティ・リスクが存在する場合があります。ピュア・ストレージの Web サイトをより快適にご利用いただけるよう、最新のブラウザにアップデートしてください。