What is: Infrastructure as Code

Автор: | 03/08/2017
 

Одним из наиболее важных трендов в IT за последние годы стало бурное развитие автоматизации и одновременно — уменьшение  необходимости во вмешательстве человека и выполнении каких-либо действий. Виртуализация дала нам возможность развёртывания новых окружений для девелоперов, в которых они могли бы делать их работу без опасений затронуть Production-систему, а гипервизоры, такие как Hyper-V или VMWare позволяют вам запустить новую машину в течении считанных минут.

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

Infrastructure as Code (IAC) — тип IT-инфрастуктуры, обслуживание и развёртывание которой выполняется с помощью кода, а не вручную. IAC так же называют «программируемая инфрастуктура» (programmable infrastructure).

Концепт IAC схож с написанием скриптов, которые используются для автоматизации важных IT-процессов. Однако скрипты используются в основном для автоматизации серии неизменяемых шагов, которые должны быть выполнены на множестве серверов.

В отличии от скриптов — для IAC используются высокоуровневые языки программирования или DSL, которые позволяют писать более гибкие конфигурации для развёртывания окружений и деплоя приложений.

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

Использование кода для развёртывания приложений интересно в первую очередь разработчикам ПО: вместо того, что бы полагаться на системного администратора в вопросах развёртывания и управления новыми окружениями — девелопер может написать IAC-процесс для автоматизации этого процесса.

Для IAC имеется целый набор утилит, среди которых Vagrant, уже упомянутый Ansible, Puppet, Docker и другие, которые делают процесс создания такой инфрастуктуры ещё более простым. Кроме того, сервисы типа AWS как правило предоставляют RESTfull API, что позволяет создавать более гибкие конфигурации.

Например, IAC созданная с помощью Ansible может установить сервер MySQL, запустить его, создать пользователя, базу данных и удалить ненужные базы данных, и всё это — с помощью кода.

Рассмотрим пример Ansible-playbook:

---
- hosts: server
  sudo: yes
  sudo_user: root

  tasks:

  - name: install mysql-server
    apt: name=mysql-server state=present update_cache=yes

  - name: install ansible dependencies
    apt: name=python-mysqldb state=present

  - name: Ensure mysql is running 
    service: name=mysql state=started

  - name: Create user with the password and all previleges
    mysql_user: login_user=root login_password="" name={{ mysql_user }} password={{ mysql_password }} priv=*.*:ALL host=% state=present

  - name: Delete test database
    mysql_db: name=test state=absent

  - name: Create ansible_example database
    mysql_db: name=ansible_example state=present

  - name: Copy mysql back up dump to the remote_user
    copy: src=dump.sql.bz2 dest=/tmp

  - name: Restore the dump into ansible_example database
    mysql_db: name=ansible_example state=import target=/tmp/dump.sql.bz2

Он выполняет установку MySQL-сервера на удалённом хосте, запускает его, создаёт пользователя и пароль, удаляет тестовую базу данных, создаёт базу ansible_example и загружает в неё дамп.

Все эти действия выполняются автоматически во время запуска плейбука, и независимо от того, сколько раз вы запустите его на выполнение — Ansible только будет проверять текущее состояние: если MySQL уже установлен и остальные действия выполнены — они не будут выполняться повторно. Кроме того — вы можете запустить этот плейбук с вашей машины (или любой другой, где имеется Ansible), и они будут выполнены на всех хостах из вашего инвентори-файла .

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

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

Недостатки

Несмотрят на преимущества — у IAC имеются и потенциальные недостатки. Например — разработка IAC может потребовать использования дополнительных утилит, а любые ошибки при таком проектировании могут быть быстро распространены по всем окружениям проекта, поэтому IAC должен быть всесторонне протестирован.

Другая возможная проблема — если конфигурация окружения была изменена администратором без внесения соотвествующих изменений в IAC, поэтмоу особенно важно полностью интегрировать IAC в процесс системного администрирования, во все IT и DevOps-процессы и вести документацию.

Ссылки по теме

Infrastructure as Code: A Reason to Smile

Infrastructure as Code (IAC)

What is ‘infrastructure as code’ and why should you embrace it?

Domain Specific Languages