概要
YAML は人間が判読できるデータシリアライズ言語で、設定ファイルの記述によく使用されます。YAML は Yet Another Markup Language の略語であると言う人もいれば、 YAML Ain't Markup Language (再帰的頭字語) であると言う人もいますが、これは YAML が文章ではなくデータを扱うためのものであるということを強く示しています。
YAML は、読みやすく理解しやすいように設計されている言語のため、人気のあるプログラミング言語です。また、他のプログラミング言語と組み合わせて使用することも可能です。柔軟性と使いやすさを兼ね備えた YAML は、Ansible Playbook の形式で自動化プロセスを作成する Ansible® によって使用されます。
YAML 構文
YAML ファイルは拡張子が .yml または .yaml で、特定の構文ルールがあります。
YAML は、Perl、C、XML、HTML などのプログラミング言語に由来する機能を備えています。YAML は JSON の上位集合でもあるので、JSON ファイルは YAML でもそのまま使えます。
中括弧、角括弧、閉じタグ、引用符などの通常の書式記号はありません。また、YAML ファイルでは Python のようにインデントを使用して構造を決定し、ネストを示すので、読みやすくなっています。システム間での可搬性を維持するために、タブ文字は設計上許可されていないため、代わりに空白文字 (リテラルスペース文字) を使用します。
コメントは番号記号/ハッシュ記号 (#) で識別します。コメントはコードの意図を説明するものなので、コメントの使用は常に推奨されます。YAML は複数行のコメントには対応しないため、各行の冒頭にハッシュ記号を付ける必要があります。
YAML 初心者によくある質問は「3 つのダッシュは何を意味するのか」ですが、3 つのダッシュ (---) はドキュメントの開始を示すために使用し、各ドキュメントの終了を示すには 3 つのドット (...) を使用します。
以下が YAML ファイルの非常に基本的な例です。
#Comment: This is a supermarket list using YAML #Note that - character represents the list --- food: - vegetables: tomatoes #first list item - fruits: #second list item citrics: oranges tropical: bananas nuts: peanuts sweets: raisins
YAML ファイルの構造はマップやリストであり、インデントとキー値の定義方法に応じて階層化されていることに注目してください。マップでは、key-value ペアを関連付けることができます。それぞれのキーは一意でなければならず、順番は関係ありません。Python の辞書や Bash スクリプトの変数割り当てのように考えると良いでしょう。
YAML のマップはクローズする前に解決する必要があり、その後に新しいマップを作成でます。新しいマップは、インデントレベルを上げるか、前のマップを解決して隣接マップを開始することで作成できます。
リストには特定の順序で列挙された値を含めることができ、必要に応じて任意の数の項目を含めることが可能です。リストの並びは、ダッシュ (-) とスペースで始め、インデントで親と区別します。シーケンスは、Python のリストや、Bash または Perl の配列と同じように考えることができます。リストをマップに埋め込むこともできます。
上記の例では、「vegetables」と「fruits」は「food」という名前のリストに含まれる項目です。
YAML にはスカラー値も含めることができます。スカラー値とは、文字列、整数、日付、数値、ブール値などの値として使用できる任意のデータ (Unicode でエンコードされている) です。
YAML ファイルを作成する際には、これらの構文ルールに従い、ファイルが有効であることを確認する必要があります。そのために、ファイルの構文を検証するアプリケーションであるリンターを使用することができます。yamllint コマンドは、アプリケーションに引き渡す前に、その YAML ファイルが有効であるかどうかを確認するのに役立ちます。
YAML の構文例
以下は、構文ルールに従って学生レコードを記述したシンプルな YAML ファイルの例です。
#Comment: Student record #Describes some characteristics and preferences --- name: Martin D'vloper #key-value age: 26 hobbies: - painting #first list item - playing_music #second list item - cooking #third list item programming_languages: java: Intermediate python: Advanced javascript: Beginner favorite_food: - vegetables: tomatoes - fruits: citrics: oranges tropical: bananas nuts: peanuts sweets: raisins
このファイルを PyYAML ライブラリを使用して Python に変換すると、次のようなデータ構造になります。
[ { "name": "Martin D'vloper", "age": 26, "hobbies": ["painting", "playing_music", "cooking"], "programming_languages": { "java": "Intermediate", "python": "Advanced", "javascript": "Beginner", }, "favorite_food": [ {"vegetables": "tomatoes"}, { "fruits": { "citrics": "oranges", "tropical": "bananas", "nuts": "peanuts", "sweets": "raisins", } }, ], } ]
YAML の用途
YAML の最も一般的な用途の 1 つは、設定ファイルの作成です。設定ファイルは JSON ではなく YAML で記述することが推奨されています。ほとんどの場合において両者は同じように使うことができますが、YAML の方が読みやすく、ユーザーフレンドリーであるためです。
YAML は Ansible での使用に加えて、Kubernetes のリソースとデプロイメントに使用されます。
YAML ファイルを Github などのソースコントロールに追加することで、変更の追跡と監査が可能になるというのが、YAML を使用するメリットの 1 つです。
Ansible と Red Hat® Ansible Automation Platform の違いとは
Ansible における YAML
Ansible Playbook は、IT プロセスをオーケストレーションするために使用されます。Playbook は、1 つ以上の play を含む YAML ファイルで、システムの望ましい状態を定義するために使用されます。
各 play は 1 つ以上のタスクを実行することができ、各タスクは Ansible モジュールを起動します。モジュールは、Ansible で自動化タスクを実行するために使用されます。Ansible モジュールは、Ruby、Python、bash など、JSON を返すことができる任意の言語で記述できます。
Ansible Playbook は、マップとリストで構成されています。Playbook を作成するには、play を指名する YAML リストを開始し、タスクを順番にリストアップします。インデントは論理的な継承を示すものではありません。各行を YAML のデータタイプ (リストやマップ) と考えると良いでしょう。
YAML テンプレートを使用することで、Ansible ユーザーは高度なプログラミング言語を習得しなくても、繰り返しタスクを自動的に実行するようにプログラミングすることができます。さらに、開発者は ansible-lint コマンド、つまり Ansible Playbook の YAML リンターを使って、エラーが操作の重要な段階で発生しないようにミスを特定することができます。
生成 AI サービスである Ansible Lightspeed with IBM watsonx Code Assistant を導入することにより、開発者は Ansible 自動化コンテンツをより効率的に作成できます。ユーザーは平易な英語でタスクリクエストを入力でき、Ansible Playbook の作成に使用される自動化タスク用のクリーンでコンプライアンスに準拠した YAML コードの推奨情報を取得できます。
Kubernetes のための YAML
Kubernetes は、定義された状態と実際の状態に基づいて機能します。Kubernetes オブジェクトはクラスタの状態を表し、ワークロードをどのように見せたいかを Kubernetes に伝えます。Pod、オブジェクト、デプロイメントなどの Kubernetes リソースは、YAML ファイルを使って作成することができます。
Kubernetes のオブジェクトを作成する際には、オブジェクトの望ましい状態を定義するための仕様を含める必要があります。Kubernetes API はオブジェクトの作成にも使用できます。API へのリクエストにはオブジェクトの仕様が JSON で含まれていますが、ほとんどの場合、必要な情報を YAML ファイルとして kubectl に提供します。Kubectl は、API リクエストを行う際にこのファイルを YAML に変換してくれます。
オブジェクトが作成および定義されると、Kubernetes はそのオブジェクトが常に存在することを確認します。
開発者やシステム管理者は、Kubernetes API に送信する YAML または JSON ファイルを使用して、定義された状態を指定します。Kubernetes はコントローラーを使用して、新しく定義された状態とクラスタ内の実際の状態の違いを分析します。
Red Hat を選ぶ理由
Red Hat Ansible Automation Platform の判読可能な YAML 自動化言語により、組織全体のユーザーが自動化コンテンツを共有し、吟味し、管理することができます。このプラットフォームには、Playbook、分析機能など、企業全体での自動化の導入に必要なツールがすべて揃っています。ビジュアル・ダッシュボードやロールベースのアクセス制御などにより IT インフラストラクチャを一元的に制御し、運用の複雑さを低減できます。
Red Hat サブスクリプションを使うことで、認定コンテンツ、堅牢なパートナーエコシステム、ホストされた管理サービスへのアクセス、チームが組織全体で自動化を作成、管理、拡張するためのライフサイクル・テクニカルサポートを利用できます。また、数千ものお客様を支援することで蓄積された Red Hat の専門知識を活用できます。
Red Hat OpenShift は、企業向けの Kubernetes です。Kubernetes を企業向けに強化するためのさまざまなテクノロジーを提供します。これには、レジストリ、ネットワーキング、テレメトリー、セキュリティ、自動化、サービスが含まれます。
Red Hat OpenShift を活用することで、開発者はコンテナ化された新しいアプリを作り、ホストし、クラウドでデプロイできるようになります。さらに、スケーラビリティ、制御性、オーケストレーションを提供することで、優れたアイデアが迅速かつ簡単にビジネスにつながるのを助けます。
自動化によって節約できる時間をご存じですか?
組織全体で Ansible Automation Platform を使用すれば、どのくらいの時間を節約できるでしょうか。短い質問に答えて確認してください。