プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

outputの使い方とオプション【Terraform入門】

参考 : https://developer.hashicorp.com/terraform/language/values/outputs

Terraformのoutputsとは

出力値は、インフラストラクチャに関する情報をoutputするための構文です。 コマンドライン、および他のテラフォーム構成の情報を公開し、他のテラフォーム構成などから使用できます。

出力値にはいくつかの用途があります。

  • 子モジュールはoutputを使用して、親モジュールへリソース属性の情報を公開できます
  • ルートモジュールはoutputを使用して、後にCLIoutputに特定の値を表示できます
  • リモートステートを使用する場合

このような場面で、Terraformによって管理されるリソースインスタンスの属性値は他の場所で使用できます。 出力値は、不要な情報を伏せたまま、必要な一部の情報を公開する方法です

出力値の定義

モジュールによってエクスポートされる各出力値は、outputを使用して宣言する必要があります。

output "instance_ip_addr" {
    value = aws_instance.server.private_ip
}

outputキーワードの直後のラベルは出力値の名前です。 Terraformの実行時にはこの値は画面に表示されます。 また、子モジュールから、アクセスが可能になります。

この例では、 serverという名前がつけられたaws_instanceリソースによって公開されたprivate_ip属性を instance_ip_addrとして定義します。

親モジュールから子モジュールにアクセスする

親モジュールでは、子のモジュールのoutputが式で利用可能です

例えば、instance_ip_addrという名前のoutputを宣言した場合、 親モジュールからはmodule.web_server.instance_ip_addr として値が参照可能です。

オプション

outputブロックには、オプションで、説明、敏感、および依存関係の引数を含めることができます。これらについては、次のセクションで説明します。

カスタム条件チェック

preconditionブロックを使用して、outputデータに関する保証を指定できます。 次の例は、EC2インスタンスが暗号化されたルートボ​​リュームを持っているかどうかをチェックする前提条件を作成します。

output "api_base_url" {
  value = "https://${aws_instance.example.private_dns}:8433/"

  # The EC2 instance must have an encrypted root volume.
  precondition {
    condition     = data.aws_ebs_volume.example.encrypted
    error_message = "The server's root volume is not encrypted."
  }
}

カスタム条件は、将来のメンテナーが構成の設計と意図を理解するのに役立ちます。 また、エラーに関する有用な情報はコンテキストで返すことでデバッグがしやすくなります。

description

モジュールの出力値はユーザーインターフェイスの一部であるため、できるだけオプションの説明を使用して、各値の目的を簡単に説明してください

output "instance_ip_addr" {
  value       = aws_instance.server.private_ip
  description = "The private IP address of the main server instance."
}

sensitive

outputは、オプションを使用して機密性が高い情報を含むものとしてマークすることができます

output "db_password" {
  value       = aws_db_instance.db.password
  description = "The password for logging in to the database."
  sensitive   = true
}

Terraformは、メッセージに敏感であるとマークされた値をterraform planterraform apply実行時に非表示にします。

https://developer.hashicorp.com/terraform/language/values/outputs

page:https://minegishirei.hatenablog.com/entry/2024/06/13/164400