Шпаргалка по Terraform — полезные команды и примеры

Список всех команд Terraform

Содержимое страницы

Вот всесторонняя шпаргалка по Terraform с основными командами, элементами конфигурации, управлением ресурсами, модулями, переменными, обработкой состояния и лучшими практиками.

Terraform — это инструмент с открытым исходным кодом для инфраструктуры как кода (IaC), разработанный компанией HashiCorp, который позволяет пользователям определять и развертывать инфраструктуру на нескольких облачных платформах (например, AWS, Azure, GCP) с помощью декларативных файлов конфигурации. Его главная цель — автоматизация развертывания инфраструктуры, обеспечение ее последовательности и снижение количества ручных ошибок. Terraform поддерживает мультиоблачные, модульные и ориентированные на состояние рабочие процессы, что делает его краеугольным камнем современных практик DevOps.

Для получения дополнительной информации об инструментах разработчика и рабочих процессах ознакомьтесь с Инструменты разработчика: Полное руководство по современным рабочим процессам.

student using terraform

Ключевые преимущества Terraform:

  • Декларативный синтаксис: Описывайте желаемое состояние инфраструктуры в коде.
  • Независимость от провайдера: Работает с AWS, Azure, GCP, Kubernetes и другими платформами.
  • Управление состоянием: Отслеживает изменения инфраструктуры для избежания конфликтов.

Руководство по установке и настройке

https://developer.hashicorp.com/terraform/tutorials#get-started

Процесс установки Terraform довольно прост.

  • Linux (Ubuntu/Debian):

    wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(grep -oP '(?<=UBUNTU_CODENAME=).*' /etc/os-release || lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
    sudo apt update && sudo apt install terraform
    
  • Windows (WSL):

    wget -O terraform.zip https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_windows_amd64.zip
    unzip terraform.zip
    
  • macOS (Homebrew):

    brew install terraform
    

Для повышения продуктивности в терминале при работе с Terraform ознакомьтесь с Сочетания клавиш Ubuntu: Полная шпаргалка.

Проверка установки

terraform --version

Команды CLI Terraform

Ниже приведен список всех команд Terraform:

Команда Описание
terraform init Инициализация новой или существующей директории конфигурации Terraform
terraform validate Проверка корректности конфигурации
terraform plan Отображение плана выполнения без внесения изменений
terraform apply Применение изменений для достижения желаемого состояния
terraform destroy Удаление инфраструктуры, управляемой Terraform
terraform fmt Форматирование файлов конфигурации в стандартном стиле
terraform show Отображение текущего состояния или плана
terraform refresh Обновление состояния на основе реальной инфраструктуры
terraform providers Отображение провайдеров, используемых в конфигурации
terraform graph Визуализация зависимостей ресурсов в виде графа
terraform workspace list Отображение всех доступных рабочих пространств
terraform workspace new Создание нового рабочего пространства
terraform workspace select Переключение на указанное рабочее пространство
terraform workspace show Отображение имени текущего рабочего пространства
terraform workspace delete Удаление указанного рабочего пространства
terraform output Отображение выходных значений из файла состояния
terraform import Импорт существующего ресурса в Terraform
terraform taint Пометка ресурса для пересоздания при следующем применении
terraform untaint Снятие пометки “tainted” с ресурса
terraform state list Отображение ресурсов в файле состояния
terraform state show Отображение атрибутов одного ресурса в состоянии

Основы конфигурации

Расширения файлов

  • .tf: Основные файлы конфигурации (синтаксис HCL)
  • .tfvars: Значения переменных

Типы блоков Terraform

  • Пример провайдера
    provider "aws" {
      region = "us-east-1"
    }
    
  • Пример ресурса
    resource "aws_instance" "web" {
      ami           = "ami-0abcdef"
      instance_type = "t2.micro"
    }
    
  • Пример переменной
    variable "instance_count" {
      type    = number
      default = 2
    }
    
  • Пример вывода
    output "instance_ip" {
      value = aws_instance.web.public_ip
    }
    
  • Пример модуля
    module "vpc" {
      source = "./modules/vpc"
      cidr_block = var.vpc_cidr
    }
    

Работа с переменными

  • Объявление переменных
    variable "region" {
      description = "Регион AWS"
      default     = "us-east-1"
    }
    
  • Присваивание значений
    • CLI: terraform apply -var="region=us-west-2"
    • Файл tfvars: terraform apply -var-file="prod.tfvars"
  • Типы: string, number, bool, list, map, object

Управление состоянием

  • Файл состояния: terraform.tfstate
  • Удаленное состояние (пример S3)
    backend "s3" {
      bucket = "my-tf-state"
      key    = "state.tfstate"
      region = "us-east-1"
    }
    
  • Просмотр состояния:
    terraform show
    terraform state list

Циклы и условные операторы

  • Count
    resource "aws_instance" "web" {
      count = 3
      ...
    }
    
  • For_each
    resource "aws_s3_bucket" "b" {
      for_each = var.bucket_names
      bucket   = each.value
    }
    
  • Условные выражения
    instance_type = var.env == "prod" ? "t2.large" : "t2.micro"
    

Функции

  • Интерполяция строк:
    resource "aws_s3_bucket" "example" { bucket = "my-bucket-${var.env}" }
  • Примеры списков и карт:
    locals {
      my_map = { a = 1, b = 2 }
    }
    

Провайдеры (Provisioners)

Используются для инициализации ресурсов. Пример:

resource "aws_instance" "web" {
  ...
  provisioner "local-exec" {
    command = "echo Instance created"
  }
}

Лучшие практики

  • Версионный контроль всех файлов .tf
  • Фиксация версий провайдеров для обеспечения последовательности развертывания
  • Удаленный бэкенд для управления состоянием (S3, Azure Blob и т.д.)
  • Шифрование файлов состояния в удаленных бэкендах
  • Модулизация инфраструктуры с использованием переиспользуемых модулей
  • Документирование ваших конфигураций
  • Тестирование в staging-окружении перед продакшеном

Дополнительные ссылки

  • Помощь: terraform --help или [command] --help для помощи по конкретной команде
  • Отладка: Установите TF_LOG=INFO или TF_LOG=DEBUG для подробных логов
  • Форматирование: terraform fmt
  • Кодирование: Для операций кодирования/декодирования Base64 см. Кодирование - декодирование Base64 на Windows, Linux и Mac

Эта шпаргалка предоставляет быстрый доступ к наиболее распространенным и продвинутым аспектам использования Terraform — от команд до лучших практик — делая ее полезной как для начинающих, так и для опытных пользователей. Хорошего дня!

Полезные ссылки