linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • База знаний
  • Шпаргалка
  • Capstone
  • Собеседование
home/terraform/lessons/tf-beginner-03-outputs

lesson ── terraform-beginner ── ~8 мин ── 3 шагов

Outputs: возвращаем значения наружу

Output, это значение, которое Terraform показывает после apply и сохраняет в state. Используется чтобы передать что-то наружу: пользователю в терминал, скрипту через terraform output -raw, или другому Terraform- проекту через remote state.

В этом уроке создадим бакет, вернём его ARN наружу через output, и научимся читать его в shell через terraform output -raw. См. tf-output.

▶ интерактивный sandbox

Поднимется пара контейнеров: terraform 1.9 и localstack 3.8 в одной сети. В браузере откроется терминал, можно сразу terraform init. Каждый шаг проверяется автоматически. TTL 45 минут, без регистрации.

запустить sandbox →

stack ── terraform · localstack · 1 GB RAM · самоуничтожается через 45 мин простоя

Шаги

  1. 01

    Создай бакет с тегом

    В ~/tf-out уже есть provider.tf. Создай файл main.tf:

    hcl
    resource "aws_s3_bucket" "demo" {
      bucket = "linuxlab-out-${random_id.suffix.hex}"
      tags = {
        Owner = "student"
      }
    }
    resource "random_id" "suffix" {
      byte_length = 4
    }

    После init и apply бакет создастся в LocalStack. Запусти всё одной цепочкой:

    bash
    cd /home/student/tf-out
    terraform init -input=false
    terraform apply -auto-approve -input=false
    подсказка

    Если что-то падает: открой `terraform apply` без auto-approve и прочитай вывод.

    ✓ Бакет создан. Теперь добавим output.

  2. 02

    Добавь output с ARN бакета

    Добавь в директорию файл outputs.tf:

    hcl
    output "bucket_arn" {
      value       = aws_s3_bucket.demo.arn
      description = "ARN созданного S3-бакета: нужен для cross-account IAM."
    }
    output "bucket_name" {
      value = aws_s3_bucket.demo.bucket
    }

    aws_s3_bucket.demo.arn, ссылка на атрибут arn ресурса aws_s3_bucket с именем demo. Этот атрибут вычисляется на стороне облака и появляется в state после apply. См. tf-references.

    После добавления output'ов нужно ещё раз сделать apply, он обновит state и покажет значения:

    bash
    terraform apply -auto-approve

    В конце вывода должна появиться секция Outputs: с двумя значениями.

    подсказка

    Файл может называться как угодно, конвенция: `outputs.tf`.

    ✓ Output записан в state, видно через `terraform output`.

    То же самое на OpenTofu

    OpenTofu держит CLI и state совместимыми с Terraform по командам этого шага: миграция обычно проходит через mv .terraform .terraform.bak; tofu init -upgrade. Но при первом переходе сделай backup state и прогон на feature-branch - расхождения концентрируются в новых фичах (variables в backend, state-encryption, OCI registry-backed модули). См. tf-opentofu-parity для полной матрицы.

    • → OpenTofu parity
  3. 03

    Прочитай output через CLI

    В скриптах часто нужно достать значение output в переменную shell. Для этого есть terraform output -raw имя_output:

    bash
    BUCKET_ARN=$(terraform output -raw bucket_arn)
    echo "ARN: $BUCKET_ARN"
    BUCKET_NAME=$(terraform output -raw bucket_name)
    echo "Name: $BUCKET_NAME"

    Флаг -raw убирает JSON-обвязку и кавычки, удобно для подстановки. Без -raw вывод был бы "arn:aws:s3:::..." с кавычками.

    Эта команда. Это основной способ скриптов получить значения из развёрнутой инфры. Никаких ходить в AWS API через CLI. Terraform уже всё знает.

    подсказка

    Если `terraform output bucket_arn` ругается «no outputs found», значит apply не прошёл, повтори предыдущий шаг.

    ✓ Output читается из CLI. Готово к интеграции с другими скриптами.

    Output и sensitive

    Если output помечен sensitive = true, в выводе terraform apply он маскируется как (sensitive value). Но terraform output имя напечатает его как есть, это правильно для скриптов, которым нужно реальное значение. Имейте в виду: в state-файле sensitive значения лежат открытым текстом, защита только от логов.

    • → output блок и sensitive

Что ты узнал

Ты добавил output "bucket_arn", увидел его в выводе apply, и прочитал через terraform output -raw. Это тот же механизм, через который CI/CD pipeline получает значения из развёрнутой инфры.

команды

  • terraform outputвсе output в человеческом формате
  • terraform output -raw bucket_arnодно значение без кавычек, для bash
  • terraform output -jsonвсе output в JSON, для парсинга

концепции

  • · output: единственный способ вернуть значение наружу
  • · sensitive = true маскирует значение в логе, но в state хранится открыто
  • · output между модулями: module.имя.output_имя

← предыдущий

Свой Terraform-provider, Go и Plugin Framework

следующий →

Troubleshooting Garden: import показывает на пустоту

Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки