10.1 Общие положения ГОСТ Р 70860—2023
Автоматизация является ключевой особенностью как в отношении предоставления, так и использования облачных сервисов. Автоматизация применяется на протяжении всего жизненного цикла: при проектировании, разработке, тестировании, развертывании, работе и выводе из эксплуатации. Автоматизация необходима для обеспечения высокой продуктивности работы специалистов, а также для снижения требований к уровню профессиональной квалификации специалистов и уменьшения объема работ, необходимых для предоставления и использования облачных сервисов.
Одной из целей автоматизации является снижение объема работ при развертывании приложений и данных в облачных сервисах. Это связано с тем, что такого рода операции выполняются довольно часто и предназначены либо для устранения неполадок, либо для расширения функциональности. Автоматизация подразумевает внедрение целого ряда методов программирования, которые, хотя и не являются узкоспециализированными решениями, предназначенными исключительно для облачных вычислений, стали важными элементами успешного развертывания облачных вычислений [из 10.1 Общие положения ГОСТ Р 70860—2023]
10.2 Автоматизация жизненного цикла разработки ГОСТ Р 70860—2023
Одним из важных элементов автоматизации является внедрение либо непрерывного развертывания, либо непрерывной доставки. Непрерывное развертывание — это подход в программировании, в рамках которого специалисты создают ПО в короткие циклы таким образом, что оно может быть выпущено в производство в любое время, а сам процесс развертывания в производство автоматизирован. Непрерывная доставка выполняется так же, как и непрерывное развертывание. Однако при непрерывной доставке этап развертывания инициируется вручную (т. е. решение о развертывании принимает человек, а не автоматизированная система, а сам процесс развертывания обычно автоматизирован). Как правило, использование методов непрерывного развертывания или непрерывной доставки также связано с использованием в организации концепции DevOps. DevOps включает в себя методику, которая объединяет разработку программного обеспечения и ИТ-операции для сокращения жизненного цикла разработки. Такой подход позволяет специалистам часто добавлять исправления в программные продукты и расширять их функциональность в соответствии с бизнес-целями.
Непрерывное развертывание и непрерывная доставка подразумевают инкрементальную (поэтапную) разработку. При этом во время и после этапов сборки и развертывания тестирование выполняется в автоматическом режиме. Поэтапный принцип работы объясняется использованием микросервисов при разработке приложений (каждый микросервис реализует небольшую отдельную часть общей функциональности всего решения) и отдельных (облачных) сервисов в рамках более общей функциональности (например, функциональные возможности базы данных или обмена сообщениями).
Непрерывная интеграция является неотъемлемой частью процесса непрерывного развертывания и непрерывной доставки, когда обновления базы исходного кода производятся часто, а сама база исходного кода собирается и тестируется регулярно (зачастую по много раз в день). Непрерывная интеграция основывается на разработке посредством тестирования с целью автоматического выполнения модульных тестов и интеграционных тестов с целью убедиться, что обновления базы исходного кода не нарушили программный код. Кроме того, такая схема организации работы призвана обеспечить быструю обратную связь с разработчиками в случае возникновения неполадок.
Автоматизированное управление является ключевой особенностью работы облачных сервисов. Оно используется для решения таких задач, как восстановление отказавших экземпляров ПО, увеличение и уменьшение объема доступных ресурсов, особенно параллельных экземпляров компонентов приложений, репликация данных и резервное копирование данных. При использовании облачных сервисов все эти задачи необходимо автоматизировать, чтобы не создавать избыточную нагрузку на операционный персонал.
Одним из важных элементов концепции DevOps является DevSecOps. В рамках DevSecOps особое внимание уделяется функциям обеспечения безопасности, которые рассматриваются как важная и неотъемлемая часть процессов разработки и эксплуатации. Идея заключается в том, чтобы автоматизировать задачи безопасности параллельно с автоматизацией задач разработки и эксплуатации, которые являются центральным элементом концепции DevOps. При увеличении скорости выполнения задач по разработке и эксплуатации (DevOps) повышается и скорость выполнения задач, связанных с безопасностью, на протяжении всего жизненного цикла приложения (DevSecOps) [из 10.2 Автоматизация жизненного цикла разработки ГОСТ Р 70860—2023]
10.3 Инструменты автоматизации ГОСТ Р 70860—2023
Инструменты используются на всех этапах процесса разработки.
Как правило, использование инструментов начинается с системы управления версиями файлов исходного кода (SCM), в которой размещен исходный код и которая предоставляет контролируемые процессы для выполнения обновлений программного кода, включая отслеживание всех изменений. Система SCM создает основу, на базе которой работают инструменты для сборки, тестирования, доставки и развертывания. Существуют различные системы SCM, однако наиболее широкое распространение получила система с открытым исходным кодом: git-scm.com/, которая предлагает большое количество вспомогательных инструментов, включая функции хост-сервера.
Сервер автоматизации представляет собой инструмент, используемый для автоматизации этапов непрерывной интеграции, непрерывной доставки и непрерывного развертывания. Этот инструмент оказывается особенно полезным для сборки кода из системы SCM и проведения тестирования (модульные тесты, интеграционные тесты) на основе собранного кода. Существует множество инструментов на основе сервера автоматизации, однако наиболее популярным является инструмент с открытым исходным кодом Jenkins, доступный по адресу: www.jenkins.io/.
Автоматизация задач обеспечения безопасности в рамках DevSecOps может включать инструменты, которые проверяют программный код на наличие уязвимостей на этапе регистрации кода в системе SCM, а также проверяют уязвимости с помощью тестирования во время сборки и на этапе непрерывной интеграции. Подобного рода операции выполняются также и для безопасного использования баз исходного кода, соответствующих требованиям зависимостей приложения, например библиотек промежуточного ПО, образов контейнеров и резервных сервисов. Такие зависимости должны быть связаны с политиками безопасности, определяющими, какие зависимости подходят для использования, и поддерживаться соответствующим тестированием и системой управления, которая реагирует на уведомления об уязвимостях и необходимости перехода на более позднюю исправленную версию программного продукта.
ПО для управления конфигурацией используется для автоматизации предоставления ПО, управления конфигурацией и развертывания приложений. Архитектура, используемая для облачных приложений, увеличивает потребность в ПО для управления конфигурацией. Это объясняется тем, что различные облачные сервисы имеют множество компонентов, и все они должны быть оркестрованы для обеспечения правильной работы приложения. Существует целый ряд программных средств управления конфигурацией, например: Ansible: www.ansible.com/, Chef: github.com/chef/chef-workstation.
Программные средства управления конфигурацией различаются по своей архитектуре. В основе Ansible — архитектура без агентов, в то время как другие инструменты имеют архитектуру с агентами (т. е. они требуют наличия программного системного процесса, работающего в целевых узлах или на связанном с ними сервере).
Ключевым элементом развертывания приложений в облачной среде является оркестрация. Это связано с тем, что обычно приложения состоят из большого количества отдельных компонентов, которые необходимо одновременно развернуть, настроить и обеспечить их работу. Для автоматизации задач оркестрации используются такие инструменты, как CMS (см. 7.4).
Ключевым элементом задач автоматизации является предоставление функциональных возможностей облачных сервисов через API (интерфейсы программирования приложений). API позволяют различным инструментам настраивать, развертывать, контролировать и отслеживать каждый облачный сервис. Это распространяется и на использование других инструментов через API, в частности Kubernetes для развертывания контейнеров.
Приложения, развернутые и работающие в облачных сервисах, должны контролироваться и управляться для обеспечения высокой скорости работы и непрерывной доступности. Контроль и управление обычно осуществляются через API, предлагаемые поставщиком облачной службы. Инструменты для управления перезапуском отказавших экземпляров, как и инструменты для увеличения и уменьшения количества экземпляров определенного программного компонента в соответствии с изменениями рабочей нагрузки, зависят от функций контроля и управления. Некоторые из этих функциональных возможностей предоставляются в виде облачных сервисов (например, функция автоматического масштабирования), но в других случаях они поставляются в виде отдельных инструментов, которые необходимо установить и настроить [из 10.3 Инструменты автоматизации ГОСТ Р 70860—2023]