Cấu hình YAML (.yaml)

YAML Tiêu chuẩn

YAML Ain't Markup Language (YAML) là định dạng tuần tự hóa dữ liệu chiếm ưu thế cho DevOps hiện đại, cơ sở hạ tầng đám mây (Kubernetes, Docker Compose) và tự động hóa CI/CD, nhấn mạnh tính dễ đọc của con người thông qua thụt lề bằng khoảng trắng rõ ràng.

Chuyển đổi YAML sang JSON

Trình chuyển đổi từ YAML sang JSON miễn phí trên trình duyệt. Chuyển đổi tệp ngay lập tức trên thiết bị của bạn.

Kiểm tra & Siêu dữ liệu

Các hệ điều hành và trình phân tích tệp nhận dạng tệp YAML bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:

Chọn hoặc thả tệp vào đây

Riêng tư - tệp không bao giờ rời khỏi thiết bị của bạn

Hoặc dán Ctrl+V
Cam kết bảo vệ quyền riêng tư, không truyền dữ liệu qua mạng: 0 byte được tải lên máy chủ bên ngoài. Toàn bộ quá trình xử lý diễn ra cục bộ trong hộp cát trình duyệt của bạn.

Chữ ký ở đầu tệp (mẫu byte nhận diện)

Các hệ điều hành và trình phân tích tệp nhận dạng tệp YAML bằng cách kiểm tra chuỗi byte nhị phân đầu tệp:

CHỮ KÝ HEX (OFFSET 0):

2D 2D 2D 0A

BIỂU DIỄN ASCII: ---\n

Tiêu chuẩn hóa: YAML 1.2.2 Specification

Thông số kỹ thuật

Kiến trúc ContainerĐịnh dạng tuần tự hóa dữ liệu dễ đọc, dựa trên thụt lề, là tập mở rộng của JSON và hỗ trợ neo cùng bí danh
NénLuồng văn bản không nén
Thứ tự byteLuồng văn bản UTF-8 / Unicode
Không gian màuKhông áp dụng (tuần tự hóa dữ liệu)
Kênh & Cấu trúcÁnh xạ (từ điển khóa-giá trị), chuỗi (danh sách), giá trị vô hướng (chuỗi, số, boolean) và neo (&ref/*ref)
Kích thước tối đaKích thước tài liệu không giới hạn (hỗ trợ luồng nhiều tài liệu ngăn cách bằng '---')
Độ trong suốtKhông có
Truyền phát & Tăng dầnLuồng nhiều tài liệu cho phép xử lý tuần tự từng tài liệu

Ma trận so sánh kỹ thuật: YAML so với các đối thủ

Thuộc tính kỹ thuậtYAML (Hiện tại)JSONTOMLXML
Kiểu cú phápPhân cấp bằng thụt lềDấu ngoặc vuông và dấu ngoặc kép nghiêm ngặtBảng và cặp khóa=giá trịThẻ mở/đóng dài dòng
Hỗ trợ chú thíchNguyên bản (chú thích #)Không cho phép chú thíchNguyên bản (chú thích #)<!-- chú thích -->
Áp dụng trong DevOpsKhả năng hỗ trợ tùy theo phần mềm.Khả năng hỗ trợ tùy theo phần mềm.Cấu hình gói Rust/PythonCấu hình kế thừa doanh nghiệp
Tái sử dụng dữ liệuMỏ neo nguyên bản (&) & Bí danh (*)Không có (trùng lặp thủ công)Không có (trùng lặp thủ công)Thực thể XML

Các dạng hỏng thường gặp và hướng dẫn khôi phục bằng mã hex

Lỗi trình phân tích cú pháp: 'mapping values are not allowed here' hoặc lỗi thụt lề.

Nguyên nhân gốc rễ: Trộn lẫn dấu tab với khoảng trắng hoặc các cấp độ thụt lề không đồng đều.

Khắc phục: Chuyển đổi dấu tab thành khoảng trắng và xác thực cú pháp bằng Công cụ định dạng YAML của File2File.app.

Phân tích bảo mật và các đường tấn công nhằm vào bộ phân tích cú pháp

Các trình phân tích cú pháp YAML hỗ trợ các thẻ kiểu tùy chỉnh (như 'yaml.load()' của PyYAML) trong lịch sử đã cho phép thực thi mã từ xa thông qua việc khởi tạo đối tượng tùy ý.

Các véc-tơ tấn công đã biết

  • Thực thi mã tùy ý thông qua các thẻ giải tuần tự hóa đối tượng không an toàn (ví dụ: '!!python/object/apply').
  • Tấn công bùng nổ mở rộng (tương đương “Billion Laughs”, sử dụng anchor và alias của YAML).
  • Các lỗ nhầm lẫn kiểu do phân tích cú pháp boolean và dấu thời gian ngầm định.

Biện pháp phòng thủ tốt nhất: Luôn sử dụng các trình phân tích cú pháp YAML an toàn ('yaml.safe_load()' trong Python) và áp dụng các giới hạn độ sâu mở rộng neo.

Nguồn gốc lịch sử và các cột mốc

2021Bản sửa đổi YAML 1.2.2 được xuất bản, tinh chỉnh khả năng tương thích JSON và các định nghĩa ngữ pháp chính thức.
2009YAML 1.2 chuẩn hóa YAML như một siêu tập chặt chẽ của JSON, nghĩa là mọi JSON hợp lệ đều là YAML hợp lệ.
2001Clark Evans, Ingy döt Net và Oren Ben-Kiki tạo ra YAML như một sự thay thế thân thiện với con người cho XML.

Ưu điểm & Lợi ích chính

  • YAML được dùng phổ biến trong công cụ hạ tầng, nhưng khả năng hỗ trợ và hành vi tùy thuộc vào cách triển khai.
  • Cú pháp sạch sẽ, dễ đọc: loại bỏ sự lộn xộn của dấu ngoặc nhọn, dấu ngoặc vuông và dấu ngoặc kép thông qua việc thụt lề trực quan.
  • Hỗ trợ các tham chiếu và mỏ neo (&anchor / *anchor) để tái sử dụng các khối cấu hình được lặp lại mà không bị trùng lặp.

Hạn chế & Nhược điểm kỹ thuật

  • Nhạy cảm với khoảng trắng: một dấu tab vô tình hoặc một khoảng trắng thừa duy nhất có thể làm hỏng phân cấp tài liệu hoặc gây ra lỗi phân tích cú pháp.
  • Các lỗi chuyển đổi kiểu khét tiếng: các từ không có trong dấu ngoặc kép như 'no', 'on', 'yes' hoặc mã quốc gia ('NO' cho Na Uy) có thể âm thầm trở thành boolean.
  • Tốc độ phân tích cú pháp chậm hơn đáng kể so với các định dạng nhị phân hoặc JSON nghiêm ngặt.

Thông tin kỹ thuật thú vị

  • YAML ban đầu là viết tắt của 'Yet Another Markup Language', nhưng đã được đổi tên một cách hài hước thành từ viết tắt đệ quy 'YAML Ain't Markup Language' để nhấn mạnh việc tuần tự hóa dữ liệu.
  • Cái gọi là 'Vấn đề Na Uy' (Norway Problem) là một lỗi lập trình nổi tiếng trong đó mã quốc gia 'NO' trong tệp YAML được phân tích cú pháp thành giá trị boolean 'false'.
  • Mọi tệp JSON hợp lệ trên thế giới đồng thời cũng là một tệp YAML hợp lệ 100%.

Các câu hỏi kỹ thuật thường gặp

YAML dùng để làm gì?

YAML là ngôn ngữ cấu hình chính cho điện toán đám mây, việc triển khai cụm Kubernetes, các tệp Docker Compose, quy trình làm việc của GitHub Actions và cài đặt phần mềm.

Tôi có thể sử dụng ký tự tab trong tệp YAML không?

Không. Đặc tả YAML chính thức nghiêm cấm việc sử dụng các ký tự tab để thụt lề; bạn phải luôn sử dụng khoảng trắng (thường là 2 khoảng trắng cho mỗi cấp độ).

Làm thế nào để chuyển đổi YAML sang JSON?

Bạn có thể chuyển đổi các tệp YAML thành JSON sạch sẽ, đã được kiểm tra tính hợp lệ chỉ bằng một cú nhấp chuột bằng cách sử dụng File2File.app trực tiếp trong trình duyệt web của bạn với tính bảo mật hoàn toàn.