0Pricing
DevOps Bootcamp · Урок

Провижионеры local и remote exec

Реализуйте провижионеры `local-exec` и `remote-exec`, чтобы выполнять команды соответственно на машине, где запущен Terraform, или на созданных ресурсах.

«Провижионеры local и remote exec» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Знакомство с провижионерами Terraform

Что делать, если после создания ресурса Terraform Вам нужно выполнить скрипт или команду? Для этого предназначены провижионеры!

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

Представляйте их как хуки, позволяющие настроить ресурсы сразу после их создания.

`local-exec`: выполнение локально

Провижионер local-exec выполняет команды на компьютере, где запущен Terraform.

Это полезно для таких задач, как:

  • Локальное создание файлов конфигурации.
  • Запуск локальных скриптов или инструментов.
  • Выполнение операций очистки после уничтожения ресурса.

Он идеально подходит для действий, которые не требуется выполнять на самом облачном ресурсе.

`local-exec`: базовый пример

Посмотрим, как local-exec создаёт простой файл на локальном компьютере после создания ресурса-заглушки.

null_resource — это заполнитель, который ничего не создаёт в облаке, но удобен для запуска провижионеров.

resource "null_resource" "local_file_creator" {
  provisioner "local-exec" {
    command = "echo 'Local file created by Terraform!' > local_output.txt"
  }

  triggers = {
    always_run = timestamp()
  }
}

Когда использовать `local-exec`

local-exec отлично подходит для следующих задач:

  • Уведомления после развёртывания: отправка электронного письма или сообщения в Slack.
  • Локальное создание файлов: создание файлов инвентаризации для Ansible или других инструментов.
  • Проверки перед развёртыванием: запуск локальных скриптов проверки.
  • Запуск CI/CD: запуск конвейера после изменений инфраструктуры.

Помните: он выполняется из каталога, в котором Вы запускаете terraform apply.

`remote-exec`: выполнение на ресурсе

В отличие от local-exec, провижионер remote-exec выполняет команды непосредственно на удалённом ресурсе.

Это особенно важно для первоначальной настройки только что созданного сервера, например:

  • Установки программных пакетов (например, веб-сервера или базы данных).
  • Настройки параметров операционной системы.
  • Развёртывания кода приложения.

Для этого требуется сетевое подключение к целевому ресурсу (например, SSH для Linux или WinRM для Windows).

Подключение для `remote-exec`

Чтобы remote-exec работал, Terraform должен подключиться к ресурсу.

Распространённые типы подключений:

  • SSH: для экземпляров Linux; требуется закрытый ключ.
  • WinRM: для экземпляров Windows; требуются учётные данные.

Обычно параметры подключения настраиваются внутри блока provisioner или наследуются от ресурса.

`remote-exec` для EC2

Ниже показано, как использовать remote-exec для установки Apache на новом экземпляре AWS EC2.

Примечание: для этого экземпляр EC2 должен быть подготовлен и доступен через SSH. Для простоты предполагается, что пара ключей и группа безопасности уже существуют.

resource "aws_instance" "web_server" {
  ami           = "ami-0abcdef1234567890" # Replace with valid AMI ID
  instance_type = "t2.micro"
  key_name      = "my-ssh-key" # Replace with your SSH key name
  vpc_security_group_ids = ["sg-0123456789abcdef0"] # Replace with your SG ID

  provisioner "remote-exec" {
    inline = [
      "sudo yum update -y",
      "sudo yum install -y httpd",
      "sudo systemctl start httpd",
      "sudo systemctl enable httpd"
    ]
    connection {
      type        = "ssh"
      user        = "ec2-user"
      private_key = file("~/.ssh/my-ssh-key.pem")
      host        = self.public_ip
    }
  }
}

Когда использовать `remote-exec`

remote-exec идеально подходит для следующих задач:

  • Начальной настройки серверов: установка веб-серверов, баз данных или Docker.
  • Развёртывания приложений: копирование кода приложения и его настройка.
  • Управления конфигурацией: непосредственный запуск сценариев Ansible или рецептов Chef.
  • Проверки после создания: проверка работы служб на новом экземпляре.

Это основной инструмент для настройки исходного состояния сервера.

Провижионеры при уничтожении

Провижионеры также могут выполняться при уничтожении ресурса. Это полезно для задач очистки.

В блоке провижионера можно указать when = destroy. Например, чтобы удалить экземпляр из балансировщика нагрузки перед его завершением.

Поведение on_failure также можно настроить, определив, что должно происходить при сбое команды провижионера. По умолчанию выполнение завершается ошибкой.

Тест по провижионерам

Какой провижионер следует использовать, чтобы установить веб-сервер (например, Nginx) на только что созданный экземпляр виртуальной машины?

Провижионеры: локальные и удалённые

Вы изучили провижионеры Terraform — мощные инструменты для выполнения команд на протяжении жизненного цикла ресурса.

  • local-exec выполняет команды на компьютере, где запущен Terraform, и подходит для локальных сценариев или уведомлений.
  • remote-exec выполняет команды непосредственно на подготовленном ресурсе и отлично подходит для первоначальной настройки серверов с программным обеспечением или конфигурациями.

Провижионеры помогают устранить разрыв между развёртыванием инфраструктуры и первоначальной настройкой приложения. Далее Вы изучите продвинутые методы управления состоянием!

Часто задаваемые вопросы

Урок «Провижионеры local и remote exec» бесплатный?

Да — полный текст урока «Провижионеры local и remote exec» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Провижионеры local и remote exec»?

Реализуйте провижионеры `local-exec` и `remote-exec`, чтобы выполнять команды соответственно на машине, где запущен Terraform, или на созданных ресурсах. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Провижионеры local и remote exec»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Запрос данных с помощью источников данных
  2. Провижионеры local и remote exec
  3. Ресурсы Null и триггеры
  4. Использование внешних данных и шаблонов
← Назад к DevOps Bootcamp