В этой статье есть несколько проблем. Помогите улучшить ее или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти сообщения )
|
Инфраструктура как код ( IaC ) — это процесс управления и предоставления ресурсов компьютерного центра обработки данных с помощью машиночитаемых файлов определений, а не физической конфигурации оборудования или интерактивных инструментов конфигурации. [1] ИТ -инфраструктура, управляемая этим процессом, включает как физическое оборудование, такое как серверы без ОС , так и виртуальные машины , а также связанные с ними ресурсы конфигурации. Определения могут находиться в системе контроля версий , а не поддерживать код с помощью ручных процессов. Код в файлах определений может использовать либо скрипты, либо декларативные определения, но IaC чаще использует декларативные подходы.
IaC развился в ответ на трудности, вызванные утилитарными вычислениями и веб-фреймворками второго поколения. В 2006 году запуск Amazon Web Services Elastic Compute Cloud и версии Ruby on Rails 1.0 всего за несколько месяцев до этого [2] создал широко распространенные трудности масштабирования на предприятии, которые ранее испытывали только крупные многонациональные компании. [3] С появлением новых инструментов для работы в этой постоянно растущей области родилась идея IaC. Мысль о моделировании инфраструктуры с помощью кода, а затем о возможности проектирования, внедрения и развертывания инфраструктуры приложений с использованием известных передовых методов программного обеспечения привлекла как разработчиков программного обеспечения, так и администраторов ИТ-инфраструктуры. Возможность рассматривать инфраструктуру как код и использовать те же инструменты, что и любой другой программный проект, позволила бы разработчикам быстро развертывать приложения. [4]
Ценность IaC можно разделить на три измеримые категории: стоимость, скорость и риск. [ требуется цитата ] Сокращение затрат направлено на помощь предприятию не только в финансовом отношении, но и в плане людей и усилий, что означает, что, устраняя ручной компонент, люди могут перенаправить свои усилия на другие корпоративные задачи. [ требуется цитата ] Автоматизация инфраструктуры обеспечивает скорость за счет более быстрого выполнения при настройке вашей инфраструктуры и направлена на обеспечение видимости, чтобы помочь другим командам на предприятии работать быстрее и эффективнее. Автоматизация устраняет риск, связанный с человеческими ошибками, такими как ручная неправильная настройка; устранение этого может сократить время простоя и повысить надежность. Эти результаты и атрибуты помогают предприятию двигаться к внедрению культуры DevOps , объединенной работы разработки и эксплуатации . [5]
В целом существует два подхода к IaC: декларативный (функциональный) и императивный (процедурный). Разница между декларативным и императивным подходом по сути заключается в «что» и «как» .Декларативный подход фокусируется на том, какой должна быть конечная целевая конфигурация;Императив фокусируется на том, как должна быть изменена инфраструктура , чтобы соответствовать этому. [6] Декларативный подход определяет желаемое состояние, а система выполняет то, что должно произойти для достижения этого желаемого состояния. Императив определяет конкретные команды, которые должны быть выполнены в соответствующем порядке, чтобы завершиться желаемым выводом. [7]
Infrastructure as Code (IaC) позволяет управлять серверами и их конфигурациями с помощью кода. Существует два способа отправки этих конфигураций на серверы: методы « push » и « pull ». В методе «push» система, управляющая конфигурацией, напрямую отправляет инструкции серверу. В методе «pull» сервер получает свои собственные инструкции от управляющей системы. [8]
Существует множество инструментов, которые реализуют возможности автоматизации инфраструктуры и используют IaC. В широком смысле, любой фреймворк или инструмент, который выполняет изменения или настраивает инфраструктуру декларативно или императивно на основе программного подхода, можно считать IaC. [9] Традиционно для достижения IaC использовались инструменты автоматизации (жизненного цикла) сервера и управления конфигурацией . Теперь предприятия также используют инструменты непрерывной автоматизации конфигурации или автономные фреймворки IaC, такие как Microsoft PowerShell DSC [10] или AWS CloudFormation . [11]
Все инструменты непрерывной автоматизации конфигурации (CCA) можно рассматривать как расширение традиционных фреймворков IaC. Они используют IaC для изменения, настройки и автоматизации инфраструктуры, а также обеспечивают видимость, эффективность и гибкость в управлении инфраструктурой. [3] Эти дополнительные атрибуты обеспечивают безопасность и соответствие требованиям на уровне предприятия.
Содержимое сообщества является ключевым фактором, определяющим качество инструмента CCA с открытым исходным кодом. Как утверждает Gartner , ценность инструментов CCA «зависит как от контента и поддержки, предоставляемых сообществом пользователей, так и от коммерческой зрелости и производительности инструментов автоматизации». [3] Такие известные поставщики, как Puppet и Chef, создали свои собственные сообщества. У Chef есть Chef Community Repository , а у Puppet — PuppetForge . [12] Другие поставщики полагаются на смежные сообщества и используют другие фреймворки IaC, такие как PowerShell DSC. [10] Появляются новые поставщики, которые не ориентированы на контент, а на модели с интеллектом в продукте для доставки контента. Эти визуальные, объектно-ориентированные системы хорошо работают для разработчиков, но они особенно полезны для ориентированных на производство DevOps и операционных компонентов, которые ценят модели, а не скрипты для контента. По мере того, как эта область продолжает развиваться и меняться, контент на основе сообщества будет становиться все более важным для того, как используются инструменты IaC, если только они не ориентированы на модели и не являются объектно-ориентированными.
Известные инструменты CCA включают в себя:
Инструмент | Выпущено | Метод | Подход | Написано в | Комментарии |
---|---|---|---|---|---|
CFEngine | Северный.тех (1993) | Тянуть | Декларативный | С | - |
Кукольный | Марионетка (2005) | Толкай и тяни | Декларативный и императивный | C++ и Clojure с версии 4.0, Ruby | - |
Шеф-повар | Шеф-повар (2009) | Тянуть | Декларативный и императивный | Рубин | - |
SaltStack | Соляной Стек (2011) | Толкай и тяни | Декларативный и императивный | Питон | - |
Ansible / Башня Ansible | Красная Шапочка (2012) | Толкай и тяни | Декларативный и императивный | Питон | - |
Терраформировать | HashiCorp (2014) | Толкать | Декларативный и императивный | Идти | - |
Выдра | Инедо (2015) | Толкать | Декларативный и императивный | - | Windows-ориентированный |
Пулуми | Пулуми (2018) | Толкать | Декларативный и императивный | Идти |
Другие инструменты включают AWS CloudFormation , cdist , StackStorm , Juju и Step CI.
IaC может быть ключевым атрибутом внедрения лучших практик в DevOps . Разработчики становятся более вовлеченными в определение конфигурации, а команды Ops вовлекаются в процесс разработки на более раннем этапе. [13] Инструменты, которые используют IaC, обеспечивают видимость состояния и конфигурации серверов и в конечном итоге предоставляют видимость пользователям на предприятии, стремясь объединить команды для максимизации их усилий. [14] Автоматизация в целом направлена на устранение путаницы и подверженности ошибкам аспектов ручных процессов и на то, чтобы сделать их более эффективными и производительными. Позволяет создавать лучшее программное обеспечение и приложения с гибкостью, меньшим временем простоя и в целом экономически эффективным способом для компании. IaC предназначен для снижения сложности, которая убивает эффективность ручной конфигурации. Автоматизация и сотрудничество считаются центральными точками в DevOps; инструменты автоматизации инфраструктуры часто включаются в качестве компонентов инструментальной цепочки DevOps . [15]
В отчете об угрозах в облаке за 2020 год, опубликованном Unit 42 (подразделением по анализу угроз поставщика услуг кибербезопасности Palo Alto Networks ), было выявлено около 200 000 потенциальных уязвимостей в инфраструктуре в виде шаблонов кода. [16]