Все статьи | Блог студента

Terraform. Базовое использование

Статья написана студентом Хекслета. Мнение автора может не совпадать с позицией редакции
Terraform. Базовое использование главное изображение

Terraform

Terraform позволяет описывать и поднимать удаленно инфраструктуру в облаках (дальнейшие примеры в Google Cloud Platform). Простейшая конфигурация состоит из четырех файлов:

  • main.tf - основной конфиг, описывающий какие инстансы нам нужны
  • variables.tf - конфиг с описанием переменных и значениями по дефолту, если дефолтных значений нет, то они являются обязательными
  • terraform.tfvars - конфиг с значением переменных, часто является секретным, нужно с осторожностью пушить в публичные репозитарии
  • outputs.tf - описание выходных переменных, необязательный файл, но очень удобно вычленять нужные параметры из созданного инстанса, например IP созданного в облаке инстанса

Пример конфигурационного файла main.tf

provider "google" {
  project     = "infra-14367"
  region      = "europe-west1"
}
resource "google_compute_instance" "app" {
name = "reddit-app" machine_type = "g1-small"
zone = "europe-west1-b" # определение загрузочного диска boot_disk {
    initialize_params { image = "reddit-base" }
  }
  network_interface {
    network = "default"
    access_config {}
} }

Providers (конкретное облако - GCP, DO, AWS, YANDEX и др.)

  • Содержат настройки аутентификации и подключения к платформе или сервису
  • Предоставляют набор ресурсов для управления
  • Могут использоваться в модулях (начиная с версии 0.10.0) - Поддержка большого количества сервисов с API: AWS, Google Cloud, GitHub, PowerDNS, VCloud etc.

Установка провайдера производится командой terraform init

list preferences all providers

Resources

  • Определяются типом провайдера
  • Позволяют управлять компонентами платформы или сервиса
  • Могут иметь обязательные и необязательные аргументы Могут ссылаться на другие ресурсы
  • Комбинация тип ресурса + имя уникально идентифицирует ресурс в рамках данной конфигурации

Input-переменные variables.tf

  • Позволяют параметризировать конфигурационные файлы Три типа:
    • string
    • map
    • list
    • boolean
  • Можно передать из файла, из окружения, из командной строки или интерактивно.

Входные переменные описываются в файле variables.tf:

variable project {
  description = "Project ID"
}
variable region {
  description = "Region"
  default = "europe-west1"
}

Пример использования переменных в main.tf:

provider "google" {
  project = "${var.project}"
  region  = "${var.region}"
}

Задание переменных через файл

  • Укажем переменные в файле my-vars.tfvars: project = "infra-179015" public_key_path = "~/.ssh/appuser.pub"
  • Указываем путь до файла при запуске команд terraform: $ terraform apply -var-file=my-vars.tfvars
  • Если файл называется terraform.tfvars, то переменные загружаются автоматически.

Output-переменные outputs.tf

  • Позволяют сохранить выходные значения после создания ресурсов.
  • Облегчают процедуру поиска нужных данных
  • Используются в модулях как входные переменные для других модулей

outputs.tf

output "app_external-ip {
  value="${google_compute_instance.app.network_interface.0.access_config.0.assigned_nat_ip}"
}
// просмотр
$ terraform output
app_external_ip = 104.199.54.241

После описания конфигурации всё готово к "поднятию" инфраструктуры в облаке

Основные команды

  • Для приведения системы в целевое состояние используется команда terraform -auto-approve=true apply - идемпотентна!
  • Для просмотра, какие изменения будут применены terraform plan
  • Для обновления конфигурации terraform refresh
  • Для просмотра выходных переменных terraform output
  • Для пересоздания ресурса terraform taint google_compute_instance.app

После создания инфраструктуры в папке появляется state-файл со всей созданной инфраструктурой и удаляется после terraform-destroy

State файлы

  • Terraform хранит информацию об управляемых ресурсах в файле terraform.tfstate
  • Файл terraform.tfstate обновляется при каждом запуске apply или refresh
  • Файл terraform.tfstate.backup используется для бекапа предыдущего terraform.state
  • По умолчанию сохраняются локально в папке с конфигурацией

Поиск по state-файлу

$ terraform show
$ terraform state show google_compute_firewall.firewall_puma
$ terraform show | grep assigned_nat_ip

Пример создания простой инфраструктуры в GPC

Аватар пользователя Михаил Бондарев
Михаил Бондарев 30 марта 2019
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Фронтенд-разработчик
Профессия
Разработка фронтенд-компонентов веб-приложений
19 января 8 месяцев
Иконка программы Python-разработчик
Профессия
Разработка веб-приложений на Django
19 января 8 месяцев
Иконка программы PHP-разработчик
Профессия
Разработка веб-приложений на Laravel
19 января 8 месяцев
Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
19 января 8 месяцев
Иконка программы Верстальщик
Профессия
Вёрстка с использованием последних стандартов CSS
в любое время 5 месяцев
Иконка программы Java-разработчик
Профессия
Разработка приложений на языке Java
19 января 10 месяцев
Иконка программы Разработчик на Ruby on Rails
Профессия
Новый
Создает веб-приложения со скоростью света
19 января 5 месяцев