Шпаргалка по Terraform - полезные команды и примеры
Список всех команд Terraform
Здесь представлена всеобъемлющая шпаргалка по Terraform с основными командами, элементами конфигурации, управлением ресурсами, модулями, переменными, обработкой состояния и лучшими практиками.
Terraform — это инструмент с открытым исходным кодом для инфраструктуры как кода (IaC), разработанный HashiCorp, позволяющий пользователям определять и развертывать инфраструктуру на нескольких облачных платформах (например, AWS, Azure, GCP) с использованием декларативных файлов конфигурации. Его основная цель — автоматизировать развертывание инфраструктуры, обеспечивать согласованность и снижать количество ручных ошибок. Terraform поддерживает мультиоблачные, модульные и ориентированные на состояние рабочие процессы, делая его основой современных практик DevOps.
Основные преимущества 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 --version
Команды Terraform CLI
Вот список всех команд 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"
- CLI:
- Типы:
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 } }
Провайдеры
Используются для загрузки ресурсов. Пример:
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
Эта шпаргалка предоставляет быстрый доступ к наиболее распространенным и продвинутым аспектам использования Terraform — от команд до лучших практик, делая ее полезной как для новичков, так и для опытных пользователей. Хорошего дня!
Полезные ссылки
- https://developer.hashicorp.com/terraform
- Шпаргалка по Docker
- Шпаргалка по Docker Compose - наиболее полезные команды с примерами
- Шпаргалка по Kubernetes
- Развертывание проекта Flutter с бэкендом на AWS Amplify
- Развертывание сайта, сгенерированного Hugo, на AWS S3
- Производительность AWS lambda: JavaScript vs Python vs Golang
- Слоистые Lambda с AWS SAM и Python
- AWS SAM + AWS SQS + Python PowerTools
- Minio как альтернатива Aws S3. Обзор и установка Minio