YAML — это текстовый формат представления структурированных данных, который особенно часто используется для конфигурационных файлов. Его синтаксис построен так, чтобы данные было удобно читать и редактировать человеку.
Название YAML исторически расшифровывается как YAML Ain’t Markup Language и подчеркивает, что формат предназначен прежде всего для представления данных, а не для разметки документов.
YAML широко применяется в DevOps, Infrastructure as Code, CI/CD, Kubernetes, Docker Compose, Ansible и различных конфигурационных системах.
Что такое YAML простыми словами
YAML можно представить как способ записать настройки программы в виде понятной структуры без большого количества скобок и кавычек.
Например, конфигурация приложения может выглядеть так:
server: host: localhost port: 8080 debug: false
Здесь видно, что у объекта server есть три параметра: host, port и debug.
Главная особенность YAML — структура данных определяется не только символами, но и отступами.
Именно поэтому YAML обычно легче читать вручную, чем JSON, но ошибки в отступах могут менять смысл документа или делать его некорректным.
Для чего нужен YAML
YAML особенно удобен там, где конфигурацию регулярно читает и изменяет человек.
- конфигурация приложений;
- Kubernetes manifests;
- Docker Compose;
- CI/CD pipelines;
- Ansible Playbooks;
- Infrastructure as Code;
- настройки статических генераторов;
- описание автоматизации;
- конфигурация сервисов;
- обмен структурированными данными.
Как выглядит YAML
Простой YAML-документ состоит из пар ключ-значение.
name: example port: 8080 enabled: true
В отличие от JSON здесь обычно не нужны фигурные скобки, кавычки вокруг каждого ключа и запятые между полями.
Ключи и значения в YAML
Основная конструкция YAML выглядит как ключ, двоеточие и значение.
environment: production
Ключ environment описывает параметр, а production является его значением.
Между двоеточием и значением обычно ставится пробел.
Отступы в YAML
Отступы определяют вложенность структуры.
database: host: db.example.local port: 5432
Параметры host и port относятся к объекту database именно благодаря одинаковому уровню отступа.
Если отступ изменить неправильно, структура документа изменится или Parser вернет ошибку.
Почему в YAML важны пробелы
В большинстве языков программирования форматирование часто используется только для удобства чтения. В YAML отступ имеет синтаксическое значение.
Например, эти параметры относятся к одному объекту:
app: name: crm port: 8080
Поэтому при редактировании YAML особенно важно соблюдать единообразные отступы.
Можно ли использовать Tab в YAML
Для структурных отступов следует использовать пробелы, а не символ Tab.
Смешивание Tabs и пробелов может приводить к ошибкам и непредсказуемому отображению файла в редакторах.
На практике команды часто устанавливают автоматическую вставку двух пробелов при нажатии Tab в YAML-файлах.
Типы данных в YAML
YAML способен представлять основные типы структурированных данных.
| Тип | Пример |
|---|---|
| String | production |
| Number | 8080 |
| Boolean | true |
| Null | null |
| Mapping | Набор ключей и значений |
| Sequence | Упорядоченный список |
Строки в YAML
Простые строки часто можно записывать без кавычек.
name: Production Server
Однако кавычки полезны, если значение содержит символы, которые Parser может интерпретировать специальным образом.
message: "Error: service unavailable"
В конфигурациях лучше использовать кавычки там, где это делает тип значения однозначным.
Одинарные и двойные кавычки
YAML поддерживает разные способы записи строк.
Двойные кавычки позволяют использовать escape-последовательности, а одинарные обычно воспринимают содержимое более буквально.
path: '/var/lib/app' message: "First line Second line"
Конкретный стиль лучше стандартизировать внутри проекта.
Числа в YAML
Числовые значения можно записывать без кавычек.
port: 8080 replicas: 3
Если число заключить в кавычки, оно обычно будет восприниматься как строка.
port: "8080"
Это различие важно, если приложение ожидает конкретный тип данных.
Boolean в YAML
Логические параметры представляют значения true и false.
debug: false enabled: true
При проектировании конфигурации желательно использовать однозначную форму значений и учитывать правила Parser, которым обрабатывается файл.
Null в YAML
Null используется для представления отсутствующего значения.
password: null
Необходимо отличать null от пустой строки и отсутствующего ключа, поскольку приложение может интерпретировать эти состояния по-разному.
Списки в YAML
Последовательности обычно записываются с помощью дефиса.
servers: - server-1 - server-2 - server-3
Так можно описывать список серверов, пользователей, контейнеров или любых других объектов.
Список объектов в YAML
Элемент списка может быть сложным объектом.
users: - name: Ivan role: admin - name: Anna role: manager
Такие структуры часто встречаются в DevOps-конфигурациях и описаниях инфраструктуры.
Вложенные объекты
YAML позволяет создавать вложенные mappings.
database: connection: host: db.internal port: 5432 pool: size: 20
Уровень вложенности определяется отступами.
Многострочный текст
YAML позволяет удобно записывать многострочные строки.
Это полезно для скриптов, описаний и длинных текстовых параметров.
description: | Приложение используется для обработки заказов и работы с клиентами.
Символ вертикальной черты обычно сохраняет переносы строк.
Folded Style
Другой вариант многострочной записи позволяет объединять некоторые строки при интерпретации текста.
description: > Это длинное описание, записанное в несколько строк для удобства.
Такой стиль удобен для длинных текстов, которые логически должны восприниматься как один абзац.
Комментарии в YAML
Одно из важных преимуществ YAML перед JSON — поддержка комментариев.
# Основной HTTP-порт port: 8080
Комментарий начинается с символа решетки.
Это особенно удобно в конфигурационных файлах, где необходимо объяснить назначение параметров.
Почему комментарии полезны
Configuration as Code часто хранится в Git и редактируется разными специалистами.
Короткий комментарий может объяснить, почему параметр имеет определенное значение или что произойдет при его изменении.
Но комментарии не должны заменять полноценную документацию сложной системы.
YAML и JSON
YAML и JSON решают похожую задачу — представление структурированных данных.
| YAML | JSON |
|---|---|
| Ориентирован на удобство чтения человеком | Простой и строгий машинный формат |
| Использует отступы | Использует скобки и запятые |
| Поддерживает комментарии | Стандартный JSON комментарии не поддерживает |
| Часто используется для конфигураций | Часто используется в API |
| Синтаксис может быть менее очевидным | Синтаксис более ограниченный |
Пример YAML и JSON
Одни и те же данные можно представить по-разному.
YAML
server: host: localhost port: 8080
JSON
{
"server": {
"host": "localhost",
"port": 8080
}
}YAML получается компактнее для ручного редактирования, а JSON часто проще передавать между программами.
Совместимость YAML и JSON
Модели данных YAML и JSON имеют много общего: объекты, списки и простые значения.
Поэтому конфигурацию часто можно преобразовать между этими форматами.
Однако расширенные возможности YAML не всегда имеют прямой эквивалент в обычном JSON.
YAML и XML
XML также позволяет представлять структурированные данные, но использует открывающие и закрывающие теги.
YAML обычно компактнее для конфигураций и проще редактируется человеком.
XML при этом обладает развитой документной моделью, namespaces и собственными средствами описания схем.
Поэтому в старых и корпоративных интеграциях XML по-прежнему широко используется.
YAML и конфигурационные файлы
Один из основных сценариев YAML — описание настроек приложения.
application: name: crm environment: production logging: level: INFO
Программа загружает файл при запуске и применяет указанные параметры.
При этом не все настройки следует хранить непосредственно в YAML.
YAML и секреты
YAML не обеспечивает защиту или шифрование данных.
Если записать пароль в обычный YAML-файл, он останется читаемым текстом.
database: password: secret123
Такой файл опасно сохранять в общий Git-репозиторий.
YAML — это формат конфигурации, а не хранилище секретов.
Пароли, токены и API Keys следует передавать через Secret Management системы, защищенные переменные окружения или другие подходящие механизмы.
YAML и Git
YAML хорошо подходит для хранения в Git, поскольку является текстовым форматом.
Изменение параметра видно в diff, а история позволяет определить, кто и когда обновил конфигурацию.
Это одна из причин широкого применения YAML в Infrastructure as Code и GitOps.
YAML и Infrastructure as Code
В Infrastructure as Code инфраструктура описывается файлами, которые можно хранить, проверять и версионировать как программный код.
YAML используется во многих инструментах этого класса.
Например, инженер описывает контейнеры, Kubernetes-объекты или автоматизированные действия в декларативном файле и передает его соответствующей платформе.
YAML и Docker Compose
Docker Compose использует YAML для описания многоконтейнерного приложения.
services: web: image: nginx ports: - "8080:80" database: image: postgres
Из такого файла Docker Compose понимает, какие сервисы нужно запустить и какие параметры им передать.
Почему YAML удобен для Docker Compose
Compose-конфигурации имеют иерархическую структуру: services, networks, volumes и параметры каждого контейнера.
YAML позволяет наглядно представить такую вложенность.
При этом ошибка одного уровня отступа способна переместить параметр в неправильный раздел, поэтому желательно использовать редактор с поддержкой YAML Schema.
YAML и Kubernetes
Kubernetes manifests чаще всего пишутся в YAML.
Например, Deployment может выглядеть как структурированный документ с apiVersion, kind, metadata и spec.
apiVersion: apps/v1 kind: Deployment metadata: name: backend spec: replicas: 3
Kubernetes API получает структурированный объект и создает или изменяет соответствующий ресурс.
Почему Kubernetes использует YAML
Kubernetes-объекты имеют большое количество вложенных параметров.
YAML делает такие manifests относительно читаемыми и позволяет хранить их в Git.
При этом Kubernetes работает не с форматированием файла как таковым, а со структурой объекта после Parsing.
YAML и kubectl
kubectl может применять YAML manifests к Kubernetes-кластеру.
Инженер описывает желаемое состояние ресурса в файле, после чего Kubernetes пытается привести фактическое состояние к указанному.
Таким образом YAML становится частью декларативной модели управления инфраструктурой.
YAML и Helm
Helm активно использует YAML.
Kubernetes manifests внутри Chart обычно являются YAML-шаблонами, а values.yaml содержит параметры установки.
replicaCount: 3 image: repository: example/backend tag: v2
Helm подставляет Values в templates и формирует итоговые Kubernetes manifests.
Проблемы YAML в Helm
При использовании шаблонов к обычным правилам YAML добавляются правила шаблонизатора.
Ошибка может возникнуть как из-за неправильного отступа YAML, так и из-за логики template.
Поэтому перед deployment полезно сначала сгенерировать итоговый manifest и проверить его.
YAML и Ansible
Ansible Playbooks традиционно описываются в YAML.
Файл содержит hosts, tasks, variables и другие параметры автоматизации.
- hosts: web tasks: - name: Install package package: name: nginx state: present
Так системный администратор описывает последовательность желаемых действий в относительно читаемой форме.
YAML и CI/CD
Многие CI/CD-платформы используют YAML для описания Pipelines.
В конфигурации задаются stages, jobs, commands, переменные и зависимости.
Pipeline-файл хранится рядом с исходным кодом, поэтому изменения процесса сборки проходят через обычный Git workflow.
YAML и GitLab CI/CD
GitLab CI/CD использует YAML-конфигурацию для описания Pipeline.
stages: - test - deploy test: stage: test script: - run-tests
Так проект хранит процесс проверки и deployment вместе с исходным кодом.
YAML и GitHub Actions
Workflow систем автоматизации также часто описываются YAML-файлами.
В них определяются события запуска, jobs, steps и используемые действия.
Общий принцип похож на другие системы CI/CD: YAML становится декларативным описанием автоматизации.
YAML и Terraform
Terraform в основном использует HCL, а не YAML.
Однако YAML может встречаться рядом с Terraform для конфигурационных данных, Kubernetes manifests или интеграции с внешними системами.
Terraform также способен преобразовывать структуры данных между собственным представлением и YAML при необходимости.
YAML и OpenAPI
Спецификацию OpenAPI можно представлять в YAML.
Это удобно для больших API-контрактов, поскольку документ имеет глубокую иерархическую структуру.
paths: /users: get: summary: Get users
Тот же контракт можно представить в JSON, но YAML часто легче читать вручную.
YAML и API
Хотя YAML может использоваться для передачи данных, в публичных HTTP API значительно чаще встречается JSON.
JSON проще генерируется и разбирается программами и имеет более ограниченный синтаксис.
YAML чаще выбирают для файлов, которыми управляет человек.
YAML и Frontend
Frontend редко получает бизнес-данные API в YAML.
Браузерные приложения обычно работают с JSON.
Но YAML может использоваться на этапе сборки, например для конфигурации документации, генераторов или CI/CD Frontend-проекта.
YAML и Backend
Backend-приложения часто загружают YAML как конфигурацию.
Например, в нем могут находиться адреса сервисов, параметры логирования или feature flags.
Приложение должно валидировать конфигурацию при запуске и завершаться с понятной ошибкой, если обязательный параметр отсутствует.
YAML и микросервисы
В микросервисной архитектуре YAML используется прежде всего для инфраструктурного описания сервисов.
Kubernetes, CI/CD, Helm и различные инструменты автоматизации создают вокруг приложения большое количество YAML-файлов.
Поэтому разработчикам и DevOps-инженерам важно уметь уверенно читать вложенные структуры и находить ошибки отступов.
YAML и GitOps
GitOps часто использует Git-репозиторий с YAML manifests как Source of Truth.
Изменение количества реплик или версии container image выполняется через Commit и Merge Request.
GitOps-система обнаруживает изменение и синхронизирует инфраструктуру с описанным состоянием.
Так YAML становится не просто конфигурацией, а частью управляемого процесса эксплуатации.
YAML и Configuration as Code
Configuration as Code означает хранение конфигурации в версионируемых текстовых файлах вместо ручной настройки через интерфейс.
YAML хорошо подходит для такого подхода благодаря читаемости и поддержке сложных вложенных структур.
Изменения можно проверять через Code Review и автоматически валидировать в CI.
Anchors в YAML
YAML поддерживает механизмы переиспользования частей данных, которые позволяют уменьшать дублирование.
Например, общую конфигурацию можно определить один раз, а затем использовать повторно.
Такие возможности полезны, но большое количество ссылок способно сделать документ сложнее для понимания.
В инфраструктурных файлах иногда проще допустить небольшое дублирование, чем создавать трудночитаемую систему наследования.
Aliases
Alias позволяет сослаться на ранее определенный узел YAML.
Вместе с Anchors это помогает повторно использовать структуры.
Однако конкретный инструмент может иметь собственные ограничения на поддержку таких возможностей.
Merge в YAML-конфигурациях
Некоторые конфигурационные сценарии используют объединение повторяющихся mappings.
Это сокращает объем файла, но создает неочевидные итоговые значения.
Перед использованием следует проверить, поддерживает ли соответствующий Parser или приложение нужную конструкцию.
Несколько документов в одном YAML-файле
YAML позволяет размещать несколько документов в одном файле.
Они могут разделяться специальным маркером.
name: first --- name: second
Такой подход, например, удобен для хранения нескольких связанных Kubernetes-ресурсов в одном файле.
Почему YAML иногда сложно читать
На небольших примерах YAML кажется очень простым. Сложности появляются в больших manifests с десятками уровней и шаблонов.
Главные источники ошибок — отступы, неочевидное определение типов, шаблонизация и слишком глубокая вложенность.
Поэтому большие конфигурации следует структурировать, валидировать и по возможности генерировать из более высокоуровневых шаблонов.
Типизация YAML
Некоторые значения могут автоматически интерпретироваться Parser как число, Boolean или другой тип.
Это удобно, но иногда приводит к неожиданностям.
Если значение обязательно должно оставаться строкой, безопаснее явно использовать кавычки.
version: "1.0" code: "00125"
Без кавычек некоторые клиенты могут интерпретировать такие значения не так, как ожидалось.
YAML и версии Parser
Важно учитывать, что приложение обрабатывает YAML через конкретную библиотеку и набор правил.
Разные реализации могут иметь отличия в поддержке отдельных возможностей.
Поэтому конфигурация должна тестироваться именно тем инструментом, который будет использовать ее в production.
Валидация YAML
Проверка должна выполняться минимум на двух уровнях.
- Синтаксис YAML должен быть корректным.
- Структура должна соответствовать требованиям конкретного приложения.
Например, Kubernetes manifest может быть корректным YAML, но содержать неизвестное поле в spec.
В таком случае YAML Parser не обнаружит проблему, зато ее должен выявить Kubernetes или Schema Validator.
YAML Schema
Для многих инструментов существуют схемы, описывающие разрешенные поля и типы.
Редактор с поддержкой Schema способен подсвечивать ошибки еще во время написания файла.
Например, если инженер ошибся в названии Kubernetes-поля, IDE может показать предупреждение до выполнения kubectl apply.
Linting YAML
Linter проверяет форматирование и типичные проблемы файла.
Он может обнаруживать некорректные отступы, слишком длинные строки или нарушения принятого стиля.
YAML lint полезно запускать автоматически в CI перед применением конфигурации.
YAML в CI
Infrastructure repository желательно проверять так же строго, как программный код.
Pipeline может запускать YAML Parser, Schema validation, Helm lint и другие проверки.
Это позволяет остановить ошибочную конфигурацию до production.
YAML и безопасность
Конфигурационные YAML-файлы могут определять критичные параметры инфраструктуры.
Ошибка или вредоносное изменение способно открыть сервис во внешний интернет, предоставить слишком широкие права или отключить защитные механизмы.
- использовать Code Review;
- ограничивать права на repository;
- не хранить секреты в открытом виде;
- валидировать конфигурацию;
- проверять изменения через CI;
- разделять production и test настройки;
- вести историю изменений.
Опасность небезопасной десериализации YAML
При обработке YAML из недоверенного источника необходимо использовать безопасные режимы Parser.
Некоторые библиотеки исторически могли поддерживать расширенные конструкции, связанные с созданием объектов или выполнением специфической логики.
Поэтому нельзя принимать произвольный YAML пользователя и без проверки передавать его в небезопасный механизм десериализации.
YAML-файл из внешнего источника следует считать недоверенными входными данными так же, как HTTP Request или загруженный файл.
YAML и пользовательский ввод
Если сервис позволяет пользователям загружать YAML, нужно ограничивать размер файла, глубину структуры и допустимые поля.
Также следует использовать безопасный Parser и проверять результат по Schema.
Синтаксически корректный YAML не означает, что содержимое безопасно или допустимо для приложения.
YAML и производительность
YAML оптимизирован прежде всего для удобства человека, а не для максимально быстрой сериализации.
Для редких операций загрузки конфигурации это обычно не имеет значения.
Для высокочастотного API-обмена JSON или бинарные форматы зачастую подходят лучше.
Большие YAML-файлы
Manifest на несколько тысяч строк становится сложным для ручного сопровождения.
Повторяющиеся блоки увеличивают риск расхождений, а глубокая вложенность усложняет Code Review.
Для таких случаев используют Helm, Kustomize, шаблонизацию, генераторы или разделение конфигурации на несколько файлов.
YAML и Kustomize
Kustomize применяется для управления вариантами Kubernetes manifests без необходимости копировать полный файл для каждого окружения.
Например, базовая конфигурация остается общей, а production изменяет количество реплик и ресурсы.
Так уменьшается дублирование YAML между окружениями.
YAML и DRY
Принцип Don’t Repeat Yourself полезен и для конфигураций, но применять его нужно умеренно.
Слишком сложная система anchors, templates и overlays иногда становится труднее, чем небольшое дублирование.
Главная цель configuration code — предсказуемость и понятность, а не минимальное количество строк.
YAML и environment variables
Часть настроек можно хранить в YAML, а значения, зависящие от окружения, передавать через Environment Variables.
Например, YAML определяет адрес сервиса по умолчанию, а production заменяет его переменной окружения.
Секреты особенно часто передаются отдельным защищенным механизмом вместо записи непосредственно в файл.
YAML и ConfigMap
В Kubernetes ConfigMap хранит некритичные конфигурационные данные.
Сам ресурс часто описывается YAML manifest.
Приложение может получать настройки через Environment Variables или файлы, смонтированные из ConfigMap.
Для секретной информации предназначены другие механизмы.
YAML и Kubernetes Secrets
Kubernetes Secret также описывается через API-объект, который часто представляется в YAML.
Важно понимать, что сама запись значения в Secret manifest не делает открытый файл безопасным для публикации в Git.
Для GitOps обычно используются дополнительные механизмы шифрования или внешние Secret Management системы.
YAML и Code Review
Изменения инфраструктуры могут быть не менее критичны, чем изменение программного кода.
Например, одна строка YAML способна уменьшить количество replicas до одного или открыть сетевой порт.
Поэтому production manifests желательно изменять через Merge Request с автоматическими проверками и Review.
YAML и Observability
Системы мониторинга и Observability также используют YAML для конфигурации.
Например, правила алертов, параметры сбора метрик или настройки агентов могут храниться в конфигурационных файлах.
Это позволяет версионировать мониторинг вместе с остальной инфраструктурой.
YAML и Prometheus
Prometheus использует конфигурационные файлы для описания параметров сбора метрик и других настроек.
В инфраструктурной практике эти файлы обычно хранятся в Git и проходят автоматическую проверку перед применением.
Ошибка конфигурации может привести к прекращению сбора важных метрик, поэтому validation особенно важна.
YAML и автоматизация бизнеса
Хотя YAML чаще ассоциируется с DevOps, он может использоваться и для конфигурации бизнес-сервисов.
Например, система автоматизации может хранить правила маршрутизации заявок, настройки интеграций или описание workflow.
При этом необходимо отделять конфигурацию от сложной бизнес-логики: слишком развитый YAML может постепенно превратиться в плохо поддерживаемый собственный язык программирования.
Преимущества YAML
- удобно читается человеком;
- поддерживает комментарии;
- компактнее многих JSON-конфигураций;
- поддерживает вложенные объекты и списки;
- широко используется DevOps-инструментами;
- удобен для хранения в Git;
- подходит для декларативных конфигураций;
- хорошо работает с Infrastructure as Code.
Недостатки YAML
- ошибки отступов меняют структуру;
- сложнее JSON для полностью машинного обмена;
- некоторые значения могут иметь неочевидную типизацию;
- большие документы трудно сопровождать;
- шаблонизация дополнительно усложняет синтаксис;
- разные Parser могут иметь особенности;
- небезопасная десериализация недоверенных файлов создает риски.
Типичные ошибки YAML
- Использовать неправильные отступы.
- Смешивать Tabs и пробелы.
- Забывать пробел после двоеточия.
- Получать неожиданный тип значения из-за отсутствия кавычек.
- Хранить пароли и токены в Git.
- Не валидировать YAML по Schema.
- Создавать слишком глубокую вложенность.
- Злоупотреблять Anchors и шаблонами.
- Применять production-конфигурацию без Code Review.
- Использовать небезопасную десериализацию внешнего YAML.
Как правильно работать с YAML
Шаг 1. Использовать единый стиль отступов
Например, два пробела на один уровень вложенности.
Шаг 2. Настроить редактор
IDE должна подсвечивать YAML, Schema и ошибки форматирования.
Шаг 3. Валидировать файл
Перед применением следует проверить синтаксис и требования конкретной системы.
Шаг 4. Хранить конфигурацию в Git
Это дает историю, Review и возможность отката.
Шаг 5. Не хранить секреты открыто
Для чувствительных значений нужен отдельный защищенный механизм.
Шаг 6. Добавить CI-проверки
Lint и Schema validation должны выполняться автоматически.
Шаг 7. Не усложнять файл без необходимости
Конфигурация должна оставаться понятной человеку, который будет поддерживать ее через несколько месяцев.
Практический пример
Команда разрабатывает приложение из Frontend, Backend и PostgreSQL.
Для локальной разработки используется Docker Compose. Все сервисы описаны в compose.yaml.
После перехода в production приложение запускается в Kubernetes. Deployment и Service также представлены YAML manifests.
Количество replicas, версия container image и resource limits хранятся в Git.
Для разных окружений используются отдельные Values Helm, а секреты не записываются в обычные YAML-файлы.
Каждый Merge Request запускает CI: YAML проходит lint, Helm templates генерируются и проверяются до применения.
После Review GitOps-система синхронизирует новые manifests с Kubernetes-кластером.
В результате YAML используется как человекочитаемое декларативное описание окружения, а изменения инфраструктуры проходят тот же управляемый процесс, что и программный код.
YAML для бизнеса
Сам по себе YAML не является бизнес-приложением, но он играет важную роль в автоматизации IT-инфраструктуры.
Хранение конфигураций в текстовом формате позволяет уменьшить количество ручных настроек и сделать изменения воспроизводимыми.
Компания получает историю инфраструктурных изменений, возможность Code Review и автоматическую проверку конфигурации.
Это особенно важно при большом количестве серверов, контейнеров и окружений, где ручная настройка быстро становится источником ошибок.
Когда использовать YAML
- конфигурацию регулярно редактирует человек;
- используется Kubernetes;
- используется Docker Compose;
- создается CI/CD Pipeline;
- применяется Ansible;
- используется GitOps;
- нужны комментарии в конфигурации;
- необходимо хранить инфраструктурные настройки в Git.
Когда YAML может быть не лучшим выбором
Для высокочастотной передачи данных между программами JSON или бинарный формат часто подходят лучше.
Для очень простого списка параметров может быть достаточно .env или другого минимального формата.
Если конфигурация становится чрезмерно сложной и содержит множество условий, возможно, задача уже требует полноценного языка или специализированного инструмента.
Формат следует выбирать по назначению данных и способу их сопровождения.
Связанные термины
| Термин | Связь с YAML |
|---|---|
| JSON | Альтернативный формат структурированных данных |
| Kubernetes | Manifests обычно описываются в YAML |
| Docker Compose | Использует YAML для описания сервисов |
| Helm | Использует YAML templates и values.yaml |
| Ansible | Playbooks обычно описываются в YAML |
| GitLab CI/CD | Pipeline может определяться YAML-конфигурацией |
| Infrastructure as Code | YAML широко применяется для декларативного описания инфраструктуры |
| GitOps | YAML manifests могут храниться в Git как Source of Truth |
| OpenAPI | API Specification можно описывать в YAML |
| ConfigMap | Kubernetes-объект конфигурации часто создается через YAML |
| Secrets | Чувствительные значения нельзя безопасно хранить просто как открытый YAML |
| Configuration as Code | Подход к управлению конфигурациями через версионируемые файлы |
Краткий итог
YAML — человекочитаемый текстовый формат для представления структурированных данных. Он использует отступы для описания вложенности и поддерживает объекты, списки, строки, числа, Boolean, null и комментарии.
YAML особенно широко применяется в DevOps: Kubernetes, Docker Compose, Helm, Ansible, CI/CD и GitOps. Его основное преимущество — удобство ручного чтения и редактирования сложных конфигураций.
При этом YAML требует аккуратности. Ошибка отступа может изменить структуру документа, а неправильная типизация — поведение приложения. Production-конфигурации желательно хранить в Git, проверять через lint и Schema validation и никогда не считать обычный YAML безопасным местом для хранения паролей и других секретов.