概要
Ansible® Role は、Ansible Automation の可搬性のある自己完結ユニットです。関連するタスクと関連する変数、ファイル、ハンドラー、その他のアセットを既知のファイル構造でグループ化するための推奨される手法として機能します。自動化タスクは Ansible Playbook にのみ記述できますが、Ansible Role を使用すると、1 つまたは複数の play で実行できる自動化コンテンツのバンドルを作成でき、Playbook 間で再利用したり、コレクションで他のユーザーと共有したりできます。
Ansible Role の仕組み
Ansible Role は YAML で記述されます。YAML は設定ファイルの作成に使用される、人間が読めるデータシリアライズ言語です。タスクや play にロールが含まれる場合、Ansible は 8 つの標準ロールディレクトリのうち少なくとも 1 つにある main.yml ファイルを探します。これらのディレクトリ (解説コメントとともに以下に記載) には、ロールタスク、ハンドラー、モジュール、デフォルト、変数、ファイル、テンプレート、メタが含まれます。
roles/ common/ # this hierarchy represents a "role" tasks/ # main.yml # <-- tasks file can include smaller files if warranted handlers/ # main.yml # <-- handlers file templates/ # <-- files for use with the template resource ntp.conf.j2 # <------- templates end in .j2 files/ # bar.txt # <-- files for use with the copy resource foo.sh # <-- script files for use with the script resource vars/ # main.yml # <-- variables associated with this role defaults/ # main.yml # <-- default lower priority variables for this role meta/ # main.yml # <-- role dependencies library/ # roles can also include custom modules module_utils/ # roles can also include custom module_utils lookup_plugins/ # or other types of plugins, like lookup in this case webtier/ # same kind of structure as "common" was above, done for the webtier role monitoring/ # "" fooapp/ # ""
Ansible Role は、Playbook で呼び出すことで使用できます。呼び出すには、roles オプションでリストするか、include_role コマンドまたは import_role コマンドでロールタスクセクションに追加します。roles オプションでリストされたロール、または import_role で追加されたロールは、play の他のどのタスクよりも先に実行され、include_role で追加されたロールはタスクリスト内で定義された順に実行されます。
Red Hat のリソース
Ansible Playbook の代わりに Ansible Role を使用する理由
Ansible Role と Ansible Playbook は、どちらも自動化タスクを整理して実行するためのツールですが、それぞれの目的は異なります。Ansible Role を作成するか、すべてのタスクを Ansible Playbook に記述するかは、ユースケースと Ansible の経験値によって決まります。
ほとんどの自動化開発者とシステム管理者は、単体の Playbook で自動化コンテンツを作成するところから始めます。Playbook は定義されたインベントリーに対して実行される自動化タスクのリストです。タスクは play (特定のホストにマッピングされ、順番に実行される 1 つ以上のタスクのグループ) に編成できます。Playbook には 1 つ以上の play を含めることができ、1 つのファイルで Ansible Automation を実行するための柔軟なメカニズムを提供します。
Playbook は Ansible で自動化するための強力な方法ですが、すべてのタスクを Playbook で記述することが必ずしも最善の方法とは限りません。スコープと変数が複雑で、再利用性が有用な場合、自動化コンテンツのほとんどを Ansible Role で作成し、Playbook 内で呼び出す方が適切な選択である場合もあります。
次の例は、Playbook 内で linux-systemr-roles.timesync というロールを使用する例です。この場合、この 1 つのロールで達成していることを実現するためには、4 つ以上のタスクが必要となります。
- name: Manage timesync with 3 servers hosts: targets vars: timesync_ntp_servers: - hostname: foo.example.com iburst: true - hostname: bar.example.com iburst: true - hostname: baz.example.com iburst: true roles: - linux-system-roles.timesync
自動化コンテンツのすべてを単一の Playbook に記述する代わりに、Ansible Role を使用することにはいくつかのメリットがあります。
再利用性と共有
ロールは自動化の再利用可能なユニットとして設計されています。ロールは、1 つの play または Playbook のコンテキストから自動化タスクの論理的なグループ化を分離するのに役立つため、複数の play または Playbook 全体で再利用したり、共有して他のプロジェクトで再利用したりすることができます。
モジュール式
ロールを使用することで、自動化において、各ロールがそれぞれ 1 つの機能を担うモジュール式のアプローチが促進されます。このアプローチにより、自動化コードの理解、保守、トラブルシューティングが容易になります。
整理
Ansible Role を活用すると、構造化された方法でタスク、テンプレート、ファイル、変数を整理できます。この構造により、特定のロールに関連するすべてがそのディレクトリに含まれるため、複雑な自動化の設定の管理が容易になります。
パラメーター化
ロールには、ロールが Ansible Playbook で使用される際にオーバーライドできるデフォルト変数を定義できます。これにより、ロール自体を変更することなく、ロールの動作を異なる環境やユースケースに合わせることが容易になります。
バージョン管理と依存関係管理
ロールはバージョン管理でき、ロール内の meta/main.yml ファイルでロールの依存関係を指定できます。その結果、バージョンと依存関係を明示的に管理し、異なる環境間での安定性と一貫性を確保できます。
テスト
ロールの構造により、テスト手法の適用が容易になります。より大規模な Playbook に統合する前に、ロールに特化したテストを作成し、期待通りに稼働するかを確認できます。
シンプルさ
より大規模なプロジェクトや複雑なプロジェクトでは、ロールにより Ansible Playbook の使用が単純化されます。すべてのタスク、ハンドラー、テンプレートを含む大規模な Playbook ではなく、人が読みやすく理解しやすい、より簡潔な Playbook を作成できます。これにより、新しいプロジェクトで再利用するロールの特定も容易になり、自動化コンテンツの作成にかかる時間が短縮され、ワークフローが単純化されます。
Ansible Role の作成
新しいロールは、ansible-galaxy role init role_name コマンドで作成できます。これにより、標準のロールディレクトリ構造に従ったディレクトリが構築されます。ディレクトリを確認したら、タスク、デフォルト変数、その他のコンポーネントを定義することができます。ロールが機能するためには必須ではありませんが、README.md ファイルと meta/main.yml にドキュメントを追加することもできます。
新しいロールを作成するには、Ansible の高度な経験が必要になる場合があり、自動化コンテンツの構築方法をまだ習得中のチームにとっては簡単ではない可能性があります。経験豊富な自動化開発者もそうでない開発者も、コンテンツの作成を容易にするため、Red Hat® Ansible Lightspeed (および IBM watsonx Code Assistant) を活用できます。これは、Ansible のベストプラクティスに基づいた推奨コードを提供する生成 AI サービスです。自然言語プロンプトを使用して達成したい自動化を記述し、watsonx Code Assistant を使用して、Ansible Lightspeed からシングルタスクおよびマルチタスクのコンテンツ候補の提示を受けることができます。生成されたタスクは、Ansible Role や playbook に含めることができます。
Ansible Lightspeed (および watsonx Code Assistant) は、Ansible コードの作成、保守、品質向上に必要な労力を削減し、生産性の向上と導入期間の短縮を実現します。
Ansible Role の共有
Ansible Role は簡単に共有することができ、メンテナンスが行き届いたテスト済みのロールを自動化に組み込むことができます。次のリポジトリを使用してロールを共有できます。
- Ansible Galaxy - ロールやその他の Ansible コンテンツを、より大きな Ansible コミュニティと共有するための無料のリポジトリです。ロールはコマンドライン (CLI) から Ansible Galaxy にアップロードでき、コレクションは Web インタフェースから共有できます。Ansible Galaxy はコミュニティサイトであるため、コンテンツは Red Hat の精査、認定、サポートを受けていません。
- Ansible Automation Hub - Red Hat Ansible Automation Platform サブスクリプションに含まれる Ansible Automation Hub は、Ansible Content Collections を検索、ダウンロード、共有するための中央リポジトリです。Ansible Automation Hub は Red Hat によってホストされており、Red Hat および独立系ソフトウェアベンダー (ISV) パートナーによる認定および検証済みのコンテンツが登録されています。
- プライベート Automation Hub - プライベート Automation Hub はオンプレミスのリポジトリで、組織内だけでコンテンツの管理、共有、キュレーションを行うことができます。企業内でロールやその他の自動化コンテンツを共有できるため、チームはワークフローを単純化し、自動化を加速できます。
Red Hat を選ぶ理由
Red Hat Ansible Automation Platform は、組織の自動化による加速化、オーケストレーション、イノベーションを支援するように設計された統合プラットフォームです。Red Hat サブスクリプションでは、Ansible Automation Hub で利用可能な Red Hat 認定コンテンツコレクションおよび Ansible 認定コンテンツにアクセスできます。
また、サブスクリプションに含まれる Red Hat Ansible Lightspeed (および IBM watsonx Code Assistant) を使うと、Ansible Role に含まれるタスクの記述と改善のプロセスが効率化され、自動化チームがコンテンツをより効率的に作成できます。Ansible Lightspeed は Visual Studio Code に完全に統合されており、自動化開発者のニーズに応え、開発者が開発環境を切り替えることなく、ベストプラクティスに沿った Ansible Role と Playbook を作成できるようにします。
Ansible Lightspeed はコンテンツソースのマッチング機能も提供しており、提供される提案に対してソーストレーニングデータを確認できるため、ユーザーのロールを作成する際により適切な判断を下すことができます。Ansible Lightspeed は、Ansible コミュニティからの何千ものロールと、Red Hat が提供するデータポイントでトレーニングされたモデルにより、正確で透明性の高い Ansible コードの作成と改善を支援し、組織の要求に応えて導入の迅速化を実現できるようにします。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。