Вопрос с собеседования · DevOps

Чем Ansible отличается от Terraform и когда что применять?

MiddleИнфраструктура как код и облакаTerraform
Ещё спрашивают так:
  • Что такое идемпотентность в управлении конфигурацией?
Коротко

Terraform — создание инфраструктуры (provisioning): декларативно, со state, хорош для облачных ресурсов — сетей, ВМ, баз, DNS. Ansible — настройка существующих машин (configuration management): по SSH без агента выполняет задачи плейбука — пакеты, файлы, сервисы, пользователи. Их часто сочетают: Terraform создаёт ВМ, Ansible их настраивает.

  • Идемпотентность: повторный запуск не меняет то, что уже в нужном состоянии
  • Модули Ansible идемпотентны, команды shell — нет: нужны creates или changed_when
  • Ansible не хранит state — удалённый из плейбука ресурс останется на сервере

А ещё С контейнерами и неизменяемыми образами роль Ansible смещается к сборке образов и обслуживанию хостов

Подробно

Сравнение:

TerraformAnsible
задачасоздать ресурсынастроить машины
стильдекларативныйпроцедурный с декларативными модулями
stateестьнет
доступAPI облакаSSH, без агента
удалениеубрали из кода — удалитнужно явно описать удаление

Пример задачи Ansible:

- name: nginx установлен и запущен
  hosts: web
  become: true
  tasks:
    - ansible.builtin.apt: { name: nginx, state: present }
    - ansible.builtin.template: { src: site.conf.j2, dest: /etc/nginx/conf.d/site.conf }
      notify: reload nginx
  handlers:
    - name: reload nginx
      ansible.builtin.service: { name: nginx, state: reloaded }

Другие инструменты: Packer — сборка образов ВМ, Pulumi — инфраструктура на обычных языках программирования, Helm — пакеты для Kubernetes.

Что хотят услышать

  • Provisioning против configuration management.
  • State и идемпотентность.
  • Совместное использование.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Terraform создаёт инфраструктуру декларативно со state, Ansible настраивает существующие машины по SSH; их часто сочетают
  • ✗Ansible хранит state облачных ресурсов и создаёт инфраструктуру декларативно, а Terraform по SSH настраивает пакеты и сервисы на машинах
  • ✗Terraform и Ansible взаимозаменяемы во всех задачах
  • ✗Ansible требует агента на каждой машине

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования