Лев Корольков
Руководитель IT-департамента EFSOL Oblako
Время чтения: 18 мин

YAML

Читаемый формат конфигураций

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 способен представлять основные типы структурированных данных.

ТипПример
Stringproduction
Number8080
Booleantrue
Nullnull
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 решают похожую задачу — представление структурированных данных.

YAMLJSON
Ориентирован на удобство чтения человекомПростой и строгий машинный формат
Использует отступыИспользует скобки и запятые
Поддерживает комментарииСтандартный 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

Проверка должна выполняться минимум на двух уровнях.

  1. Синтаксис YAML должен быть корректным.
  2. Структура должна соответствовать требованиям конкретного приложения.

Например, 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

  1. Использовать неправильные отступы.
  2. Смешивать Tabs и пробелы.
  3. Забывать пробел после двоеточия.
  4. Получать неожиданный тип значения из-за отсутствия кавычек.
  5. Хранить пароли и токены в Git.
  6. Не валидировать YAML по Schema.
  7. Создавать слишком глубокую вложенность.
  8. Злоупотреблять Anchors и шаблонами.
  9. Применять production-конфигурацию без Code Review.
  10. Использовать небезопасную десериализацию внешнего 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Альтернативный формат структурированных данных
KubernetesManifests обычно описываются в YAML
Docker ComposeИспользует YAML для описания сервисов
HelmИспользует YAML templates и values.yaml
AnsiblePlaybooks обычно описываются в YAML
GitLab CI/CDPipeline может определяться YAML-конфигурацией
Infrastructure as CodeYAML широко применяется для декларативного описания инфраструктуры
GitOpsYAML manifests могут храниться в Git как Source of Truth
OpenAPIAPI Specification можно описывать в YAML
ConfigMapKubernetes-объект конфигурации часто создается через 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 безопасным местом для хранения паролей и других секретов.

Частые вопросы

6 вопросов
Что такое YAML?

YAML — текстовый формат представления структурированных данных, ориентированный на удобство чтения человеком. Он особенно часто используется для конфигураций Kubernetes, Docker Compose, CI/CD, Ansible и других DevOps-инструментов.

Чем YAML отличается от JSON?

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

Почему в YAML важны отступы?

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

Где используется YAML?

YAML широко применяется в Kubernetes manifests, Docker Compose, Helm, Ansible Playbooks, CI/CD Pipelines, GitOps, OpenAPI и различных конфигурационных файлах приложений.

Можно ли хранить пароли в YAML?

Технически записать пароль в YAML можно, но сам формат никак его не защищает. Секреты не следует хранить в открытых YAML-файлах внутри Git. Для них используют Secret Management системы и другие защищенные механизмы.

Что лучше использовать для API — YAML или JSON?

Для обычного обмена данными через веб-API чаще используется JSON благодаря более строгому и простому для машинной обработки синтаксису. YAML обычно удобнее для конфигурационных файлов, которые регулярно читают и изменяют люди.

Была ли статья полезна?
Документ обновляется командой EFSOL. Свяжитесь с нами, если нашли неточность.
Нужна консультация?

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

Ответим в течение часа в рабочее время
Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.

Заказать звонок

Оставьте свои данные для того, чтобы специалист с вами связался.