Инфраструктура как код (IaC) — это управление вашей инфраструктурой с помощью машиночитаемых файлов определений, очень похожих на исходный код приложения.

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

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

В этой статье мы рассмотрим преимущества использования инфраструктуры в виде кода, общие методы и инструменты, которые можно использовать для развертывания инфраструктуры.


Преимущества инфраструктуры как кода

Использование IaC в вашем бизнесе дает множество преимуществ. Это приносит пользу как вашим инженерам, так и бизнесу в целом.


Снижение риска

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

Знания о том, как развернуть инфраструктуру, могут быть потеряны, если кто-то из компании уйдет.

Представляя свою инфраструктуру в виде блоков кода, вы можете снизить риски развертывания.

Блоки кода обычно менее подвержены ошибкам.

Лучше всего хранить IaC в репозитории исходного кода, и это дает вам историю, изменения и контекст относительно того, что делает код.

Сегодня безопасность является важным фактором, особенно при развертывании на общедоступных облачных платформах, таких как Microsoft Azure, GCP или AWS.

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

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

Построение вашего IaC в соответствии с политиками безопасности и потребностями организации означает, что они будут такими, когда бы и кто бы ни развертывал эту инфраструктуру.


Согласованность и более быстрые итерации

Когда вы вручную развертываете свою инфраструктуру, может потребоваться много времени, чтобы убедиться, что все настроено так, как должно быть.

Это может быть медленный процесс, который задерживает продвижение других областей ИТ-отдела.

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

Он будет одинаковым независимо от того, кто его развертывает.

Традиционно операционная группа в ИТ-отделе развертывает инфраструктуру, внедрение IaC в вашем отделе может означать, что больше людей могут развернуть инфраструктуру. Это может позволить ускорить итерации по всему отделу.


Стоимость и скорость

Как было сказано ранее, ручное развертывание вашей инфраструктуры может занять много времени.

Внедряя IaC для развертывания вашей инфраструктуры, вы ускоряете процесс и высвобождаете свои ресурсы для выполнения других задач.

Что в конечном итоге означает, что вы экономите деньги, ваша команда может эффективно нажать кнопку, чтобы развернуть инфраструктуру, а затем перейти к работе над другими проектами или задачами, пока система выполняет развертывание.

Скорость, с которой вы можете развернуть инфраструктуру с помощью IaC, заметно отличается от скорости, с которой вы делаете это вручную. Ускорение развертывания означает, что вы можете лучше реагировать на изменения и запросы.


Инфраструктура как код и DevOps

Написание шаблонов, определяющих, как настраивать, создавать и конструировать вашу инфраструктуру, — это большой шаг вперед. Но вам также нужно подумать об автоматизации и отказе от ручного развертывания. Особенно, если ваши разработчики уже автоматизируют свой программный код с помощью конвейера DevOps CI/CD.

Автоматизация программного кода и кода инфраструктуры и контроль версий действительно дадут вам преимущества, о которых мы говорили выше, и многое другое.


Инфраструктура как кодовые методы

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

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

В императивном языке вы определяете конкретные команды, которые необходимо выполнить для достижения желаемого состояния.

Давайте используем реальный пример, чтобы объяснить это простыми словами. Если бы вы собирались испечь торт, императивным рецептом было бы:

  1. Включите духовку и разогрейте до 190°C.
  2. Добавьте яйца, сахар, масло, муку в большую миску и хорошо перемешайте.
  3. После смешивания равномерно вылейте тесто в круглую форму для кекса.
  4. Выпекать 30 минут
  5. Выньте кекс из духовки и дайте ему остыть в течение 5 минут.
  6. Достаньте торт из формы и наслаждайтесь.

Если бы мы испекли торт по декларативному рецепту, это было бы:

  1. Разогрейте духовку до 190°С
  2. Смешайте ингредиенты в миске.
  3. Поставить тесто для пирога в духовку и выпекать 30 минут.
  4. После запекания выньте из духовки.
  5. Наслаждаться.

Императивный способ дает вам явные инструкции, например «равномерно вылить тесто». Декларативным способом нам на самом деле просто говорят, что должно происходить, а целью является приготовленный пирог.

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

Но на самом деле все зависит от потребностей вашей организации, навыков персонала и многого другого.


Инфраструктура как инструменты кода

Существует множество инструментов, которые вы можете использовать для определения вашей инфраструктуры и среды в коде. Chef, Puppet, Azure Bicep, AWS CloudFormation, Pulumi, Terraform и Ansible — это лишь некоторые из них. Давайте посмотрим на каждый из них.


шеф-повар

Прогресс Шеф (ранее Шеф) — это инструмент с открытым исходным кодом, который может работать на любой облачной платформе, а также в операционных системах Windows или Linux.

Кулинарная терминология используется во всех их инструментах, поскольку вы используете поваренные книги и рецепты не только для развертывания вашей среды, но и для настройки ваших систем.

Chef существует с начала 2009 года и имеет большой бэк-каталог шаблонов или рецептов, которые вы можете использовать.

Вам не нужно начинать с нуля.

Chef использует Ruby DSL в качестве своего синтаксиса, поэтому для его использования требуются либо существующие знания, либо способность учиться.

Другая проблема с Chef заключается в том, что для его работы требуется инфраструктура, что может привести к значительным затратам, а также добавить некоторые дополнительные накладные расходы на управление.


Марионетка

Марионетка — это декларативный инструмент IaC, который используется для развертывания и управления конфигурацией вашей системы.

Как и Chef, Puppet требует инфраструктуры для запуска с агентами, развернутыми на серверах, которые вы развертываете и которыми управляете.

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


Лазурный бицепс

Лазурный бицепс — это декларативный язык, который поможет вам развернуть ресурсы Azure. Я также слышал, что Azure Bicep описывается как инструмент «инфраструктура как код» (IaC). \

Azure Bicep — это эволюция Шаблоны Azure Resource Manager (ARM) что у нас уже много лет. Чтобы начать работу с Azure Bicep, вам не нужны какие-либо предварительные знания о шаблонах ARM.

Шаблон бицепса Azure

Azure Bicep можно развернуть только в Azure, для тех, кто работает в мультиоблачных средах, его нельзя использовать для развертывания в других средах. Однако одно из преимуществ использования Azure Bicep заключается в том, что это первый продукт, когда выпускаются какие-либо новые функции или продукты, вы можете сразу же использовать Bicep для их развертывания или настройки. Вам не нужно ждать, пока эта интеграция произойдет, что является одним из недостатков инструментов сторонних поставщиков.


AWS CloudFormation

AWS CloudFormation — это инструмент, который может помочь вам создавать ресурсы или управлять ими в AWS программным способом с использованием инфраструктуры как кода (IaC).

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

Шаблон AWS CloudFormation

Вы можете объявить необходимые ресурсы в своем шаблоне CloudFormation. Они будут созданы в правильном порядке.

Шаблон CloudFormation может быть YAML или JSON.

Подобно Azure Bicep, AWS CloudFormation можно использовать только в облачной среде AWS, поэтому его нельзя использовать для развертывания ресурсов в других средах.


бирманский

бирманский — еще один декларативный инструмент IaC. Pulumi немного отличается от других инструментов, он позволяет вам писать свои шаблоны на TypeScript, JavaScript, Python, Go или C#.

Это означает, что если у вашей команды уже есть навыки кодирования на одном из этих языков, они могут легко внедрить Pulumi.

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

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


Терраформ

Терраформ — это инструмент IaC с открытым исходным кодом, созданный HashiCorp.

Terraform может развертывать ресурсы для всех основных облачных провайдеров, а также может развертывать некоторые локальные решения, такие как Hyper-V и VMware.

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

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

Шаблон терраформа

Хотя вы не можете взять шаблон Terraform, который развертывает ресурсы Azure, и применить его к AWS, вы можете использовать имеющиеся у вас знания о том, как создавать шаблоны, чтобы создать правильный шаблон для AWS и т. д.

Terraform полагается на плагины, называемые провайдерами, чтобы иметь возможность взаимодействовать с облачными провайдерами или другими API.

Каждый провайдер добавляет в Terraform типы ресурсов или функции. Поскольку Terraform является сторонним инструментом, поставщики могут медленно выпускать новые функции или продукты, выпускаемые поставщиками облачных услуг.

Ансибль

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

Синтаксис Ansible в значительной степени зависит от YAML и Python.

Ansible не требует агентов, поэтому использование этого инструмента в качестве предпочтительного инструмента снижает затраты на обслуживание.


Вывод

Внедрение IaC имеет решающее значение для инженеров и организаций в этом постоянно меняющемся мире ИТ.

Возможно, вам придется научиться чему-то новому, вам, возможно, придется изменить свой способ работы инженера, но именно так движется развертывание инфраструктуры.

Это действительно поможет разрушить барьеры, узкие места и информационные хранилища внутри вашего отдела.

А затем продвижение вперед и интеграция вашего IaC с принципами DevOps еще больше упростит процессы и рабочие процессы.

Не откладывайте, начните свою инфраструктуру как путешествие по изучению кода сегодня!