Открыть сервисСервис

Deployment Manager

Deployment Manager — это инструмент управления конфигурациями и развёртыванием ресурсов в облачной платформе Google Cloud Platform (GCP), позволяющий описывать, развёртывать и управлять инфраструктурой как кодом (Infrastructure as Code, IaC). Он предоставляет декларативный подход к созданию, изменению и удалению облачных ресурсов, таких как виртуальные машины, сети, хранилища и базы данных, с использованием шаблонов на языке YAML или Python.

История

Deployment Manager был запущен в 2014 году как часть Google Cloud Platform. Его появление было связано с растущей потребностью в автоматизации управления облачной инфраструктурой, аналогичной инструментам AWS CloudFormation (выпущен в 2011 году) и Azure Resource Manager (2014 год). Изначально проект поддерживал только шаблоны на YAML, но позже была добавлена поддержка Python для более сложной логики развёртывания. В 2016 году Google представила поддержку конфигураций на основе Jinja2 — шаблонизатора для Python, что расширило возможности динамического создания ресурсов. На 2025 год Deployment Manager остаётся частью GCP, хотя Google активно продвигает альтернативные решения, такие как Terraform и Google Cloud Deployment Manager v2 (на базе Kubernetes), которые интегрируются с системой управления конфигурациями.

Архитектура и принципы работы

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

  • Конфигурация (Configuration) — основной файл, написанный на YAML (или Python), который определяет набор ресурсов и их свойства. Конфигурация может включать шаблоны и переменные.
  • Шаблоны (Templates) — многократно используемые блоки кода, которые могут быть написаны на YAML (с поддержкой шаблонизатора Jinja2) или Python. Шаблоны позволяют параметризовать развёртывание, например, задавать имя виртуальной машины или размер диска.
  • Ресурсы (Resources) — конкретные объекты GCP, такие как compute.v1.instance (виртуальная машина) или storage.v1.bucket (облачное хранилище). Каждый ресурс имеет тип, имя и набор свойств.
  • Манифест (Manifest) — внутренний объект, создаваемый Deployment Manager при развёртывании, который хранит текущее состояние конфигурации и историю изменений.
  • Развёртывание (Deployment)экземпляр конфигурации, который может быть создан, обновлён или удалён. Каждое развёртывание имеет уникальное имя в проекте GCP.

Процесс развёртывания включает следующие шаги:

  1. Пользователь создаёт конфигурационный файл (например, config.yaml), в котором описывает ресурсы.
  2. Команда gcloud deployment-manager deployments create my-deployment --config config.yaml отправляет конфигурацию в API Deployment Manager.
  3. API анализирует конфигурацию, проверяет синтаксис и зависимости между ресурсами.
  4. Deployment Manager последовательно создаёт ресурсы в GCP, отслеживая их состояние.
  5. При обновлении конфигурации (команда update) инструмент вычисляет разницу между текущим и желаемым состоянием и применяет только необходимые изменения.

Классификация и типы конфигураций

По языку описания

  • YAML-конфигурации — простые конфигурации, где ресурсы описываются в виде структуры данных. Подходят для небольших проектов или прототипирования.
  • Python-конфигурации — позволяют использовать программные конструкции (циклы, условия, функции) для генерации конфигурации. Пример: создание 10 виртуальных машин с разными именами через цикл for.
  • Шаблоны на Jinja2 — поддерживают переменные и макросы, что упрощает повторное использование кода. Например, шаблон vm-template.jinja может принимать параметры name, zone, machineType.

По сложности

  • Простые конфигурации — один файл, описывающий несколько ресурсов без шаблонов.
  • Многоуровневые конфигурации — используют импорт шаблонов из других файлов или репозиториев (например, из Google Cloud Storage или GitHub).
  • Динамические конфигурации — генерируются на лету с помощью Python-скриптов, которые могут обращаться к внешним API или базам данных.

Применение

Deployment Manager используется для автоматизации развёртывания инфраструктуры в GCP, что сокращает время на ручную настройку и снижает риск ошибок. Основные сценарии применения:

  • Создание виртуальных машин — развёртывание групп инстансов Compute Engine с заданными параметрами (образ, тип машины, сеть).
  • Настройка сетей и брандмауэров — создание VPC-сетей, подсетей, правил брандмауэра и маршрутизации.
  • Управление хранилищами — автоматическое создание бакетов Cloud Storage с политиками доступа и версионированием.
  • Развёртывание баз данных — создание экземпляров Cloud SQL или Firestore с настройками репликации и резервного копирования.
  • Оркестрация контейнеров — интеграция с Google Kubernetes Engine (GKE) для развёртывания кластеров и рабочих нагрузок.
  • Многоуровневые приложения — развёртывание полного стека, включая балансировщики нагрузки, веб-серверы и базы данных, с помощью шаблонов.

Пример простой конфигурации на YAML для создания одной виртуальной машины:

```yaml resources:

  • name: my-vm

type: compute.v1.instance properties: zone: us-central1-a machineType: zones/us-central1-a/machineTypes/n1-standard-1 disks:

  • deviceName: boot

type: PERSISTENT boot: true autoDelete: true initializeParams: sourceImage: projects/debian-cloud/global/images/family/debian-11 networkInterfaces:

  • network: global/networks/default

```

Преимущества и ограничения

Преимущества

  • Декларативный подход — пользователь описывает конечное состояние инфраструктуры, а не последовательность команд.
  • Идемпотентность — повторное применение одной конфигурации не приводит к дублированию ресурсов.
  • Поддержка версионирования — конфигурации можно хранить в системах контроля версий (Git), что упрощает отслеживание изменений.
  • Интеграция с GCP — прямой доступ к API Google Cloud, без необходимости устанавливать сторонние инструменты.
  • Шаблоны и повторное использование — возможность создавать библиотеки шаблонов для типовых задач.

Ограничения

  • Привязка к GCP — Deployment Manager не поддерживает мультиоблачные сценарии (в отличие от Terraform, Ansible или Pulumi).
  • Ограниченная поддержка состояний — инструмент не хранит полное состояние ресурсов (например, не отслеживает изменения, сделанные вручную через консоль).
  • Сложность отладки — при ошибках в конфигурации сообщения могут быть неинформативными.
  • Отсутствие поддержки некоторых ресурсов — некоторые новые сервисы GCP могут не иметь полной поддержки в Deployment Manager (например, Cloud Run или Vertex AI).
  • Зависимость от Google Cloud SDK — для работы требуется установленный gcloud CLI или доступ к API.

Альтернативы

На рынке IaC существуют несколько альтернатив Deployment Manager:

  • Terraform (HashiCorp) — мультиоблачный инструмент, поддерживающий GCP, AWS, Azure и другие платформы. Использует язык HCL (HashiCorp Configuration Language) и имеет более развитое сообщество.
  • AWS CloudFormation — аналогичный инструмент для Amazon Web Services, поддерживает шаблоны на YAML и JSON.
  • Azure Resource Manager (ARM) — инструмент для Microsoft Azure, использует шаблоны на JSON.
  • Ansible (Red Hat) — инструмент управления конфигурациями, который может развёртывать ресурсы в GCP через модули, но не является специализированным IaC-инструментом.
  • Pulumi — позволяет описывать инфраструктуру на языках общего назначения (Python, TypeScript, Go, C#), поддерживает GCP и другие облака.

Интересные факты

  • Deployment Manager поддерживает создание пользовательских типов ресурсов (Custom Types), что позволяет расширять его функциональность для работы с внутренними API организации.
  • В 2020 году Google представила Deployment Manager v2, который использует Kubernetes-подобные ресурсы и CRD (Custom Resource Definitions), но он не получил широкого распространения.
  • Согласно опросу сообщества GCP (2023 год), около 30% пользователей предпочитают Deployment Manager для автоматизации, в то время как 60% используют Terraform.

Источники

  • Google Cloud Documentation: "Cloud Deployment Manager" (2024).
  • HashiCorp: "Terraform vs. Deployment Manager" (2023).
  • Статья "Infrastructure as Code на Google Cloud Platform" (Habr, 2022).
  • Официальный блог Google Cloud: "Introducing Deployment Manager" (2014).
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru