概要
Ansible® モジュールは、ローカルマシン、アプリケーション・プログラミング・インタフェース (API)、リモートホスト上でアクションを実行する、小さなプログラムです。モジュールは通常 Python のコードとして表現され、いつどこで特定の自動化タスクを実行し、どのユーザーが実行できるかを定義するメタデータを含んでいます。Ansible Automation Hub や Ansible Galaxy などのリポジトリに登録されている数千もの Ansible モジュールをダウンロードして使用でき、また、カスタムモジュールを自分で作成して、組織内の他の Ansible ユーザーやより規模の大きい Ansible コミュニティと共有することもできます。
モジュールの仕組み
モジュールは、ネットワーク、プロビジョニング、セキュリティ、クラウド管理、ユーザー管理、構成管理、通信など、さまざまなユースケースに対する IT 機能を実行できます。Ansible モジュールがこれらをはじめとするユースケースの自動化にどのように役立つかを理解するには、タスク、play、Playbook、ロールなどの Ansible 自動化のその他の主要コンポーネントとモジュールの関係を理解することが重要です。
- タスク:マネージドホストに適用されるアクションを定義しますが、適用先のホストは指定しません。ホスト上で実行するタスク内からモジュールを起動できますが、このホストはタスク外の play レベルで定義されます。
- play:Ansible 実行のコアユニットであり、タスクのリストが含まれています。このリストを特定のマネージドホストにマッピングします。play には変数も含まれ、より複雑なユースケースではロールが含まれることもあります。
- Ansible Playbook:1 つまたは複数の play を含みます。Playbook は YAML で記述され、人間が読める形式で、共有が容易です。
- Ansible Role:タスク、ハンドラー、変数、プラグイン、テンプレート、ファイルなど、play 内部で使用する Ansible コンテンツをパッケージします。Ansible Role は play にインポートして、他の play や playbook で再利用したり、他の自動化ユーザーが使用するために共有したりすることができます。
- コレクション:自動化開発者の業務の迅速化と生産性向上をサポートするために設計された、Ansible コンテンツのバンドル。コレクションはモジュールのパッケージ化と共有に推奨される手段です。
- プラグイン:Ansible のコア機能をベースに構築され、通常はコントロールノード上で実行されるピース。モジュールはプラグインの一種ですが、一般にはタスクをコントロールノード上ではなくターゲット上で実行します。
次のように考えてみましょう。タスクが完了すべきジョブならば、モジュールはこのジョブを実際に完了するために必要なツールです。タスクは実行する必要があるアクションを定義し、モジュールはマネージドホスト上で実行されてこのアクションを達成し、終了時に戻り値を JSON 形式で収集します。
モジュールは通常 Playbook のライブラリに保存され、Playbook が関連付けられたタスクで実行されるときに実行されます。ただし、ロールやコレクション内に含められる場合もあります。Ansible Role が Playbook にインポートされると、ロールディレクトリ内のモジュールがこのロール内に含まれる 1 つまたは複数のタスクを実行します。1 つの play で記述されたモジュールが使用されるのは 1 回だけですが、ロール内部に含まれるモジュールはロールが Playbook 内で呼び出されるたびに実行されます。
以下の 3 つのサンプルモジュールは Ansible Core に付属し、すべての Ansible インストールに含まれています。
dnf モジュール (ansible.builtin.dnf):Fedora のデフォルトのソフトウェア・パッケージ・マネージャーである dnf パッケージマネージャーで、パッケージとグループをインストール、アップグレード、削除します。
service モジュール (ansible.builtin.service):リモートホスト上のサービスを管理します。アクション例として、サービスの開始、停止、再起動などがあります。
command モジュール (ansible.builtin.command):ターゲット上でコマンドを実行します。
Red Hat のリソース
Ansible モジュールの作成と共有
既存の Ansible モジュールでは自動化ユースケースに不十分な場合、独自のモジュールを作成して特定のジョブを達成することができます。モジュールを作成するプロセスは目的とする自動化タスクの複雑性に応じて異なりますが、次の手順で独自のモジュールを開発できます。
- リポジトリ内にライブラリディレクトリを作成する
- Python または好みのプログラミング言語を使用してライブラリディレクトリ内にモジュールファイルを作成する
- ライブラリディレクトリでテスト Playbook を開発する
- Playbook を実行してモジュールをテストする
モジュールは簡潔にし、極めて限定的な問題の解決を目的とします。こうすることで、テスト、使用、再利用、共有が容易になります。モジュールは、引数を受け取る定義されたインタフェースを提供するものとし、冪等性を持たせます。冪等性とは、現在のノードの状態が目的の最終状態と一致すると検出した場合、何も変更を行わないということです。
Ansible コンテンツ開発に乗り出したばかりのユーザーや、モジュール作成プロセスを効率化したいユーザーは、Content Builder などのコミュニティツールを使用できます。このツールは、ネットワーク、セキュリティ、クラウドコンテンツなどのユースケース向けのモジュールやその他の Ansible プラグインを生成します。
その他のタイプの Ansible コンテンツと同様に、Ansible モジュールは共有できるように設計されています。Red Hat® Ansible Automation Platform サブスクリプションにより、モジュールをコレクションにパッケージして、Ansible Automation Hub にアップロードしたり、プライベート Automation Hub で組織全体に共有したりすることができます。Ansible Galaxy 上でモジュールを配布することもできます。Ansible Galaxy は Ansible コンテンツをコミュニティユーザーと共有するための、無料のリポジトリです。
イベント駆動型の自動化でモジュールを使用する
モジュールは Playbook 実行において重要な役割を果たしますが、イベント駆動型の自動化による IT 管理に対してより高度でプロアクティブなアプローチの採用を求めている組織にとっても価値があります。
イベント駆動型の自動化は IT イベントからのデータを自動化されたアクションに接続し、チームが手作業で対応したり修復したりする必要性を削減します。イベントとは、サービスの提供または IT インフラストラクチャの管理に影響を与える、あらゆる事象が該当します。
Red Hat Ansible Automation Platform の機能であり、イベント駆動型の自動化からメリットを得ようとする自動化チーム向けの包括的なソリューションである Event-Driven Ansible は Ansible Rulebook を使用して、定義された適切なアクションでイベントに応答します。これには Playbook、ロール、テンプレート、モジュールの実行が含まれます。ルールブックは「この条件の場合は、この動作をする」という条件付き命令を使用して、停止時に修復 Playbook を実行するなど、ルーチンタスクの自動化を支援します。
イベントソースから得たデータがルールブックに定義された条件を満たす場合、Ansible Automation Platform は定義したアクションをトリガーします。このアクションには、Playbook 全体の実行や、1 つのモジュールの実行による極めて限定的なアクションの実行などが含まれます。応答は、イベントが発生したときに実行させたいことと、ルールブックに定義した内容に完全に依存します。
以下のサンプルは、Webhook ソースから発生したイベントがルールブックに定義された条件を満たす場合に、デバッグモジュールがトリガーされる様子を示しています。
rulebook.yml:
--- - name: Listen for events on a webhook hosts: all ## Define our source for events sources: - ansible.eda.webhook: host: 0.0.0.0 port: 5000 ## Define the conditions we are looking for rules: - name: Say Hello condition: event.payload.message == "Ansible is super cool" ## Define the action we should take should the condition be met action: run_playbook: name: say-what.yml
Playbook say-what.yml:
- hosts: localhost connection: local tasks: - debug: msg: "Thank you, my friend!"
この場合、ルールブックでは、定義された条件が満たされた場合に say-what.yml Playbook を実行するように指定されています。デバッグモジュールが say-what.yml Playbook に含まれているため、Playbook が実行されるたびに実行されます。
Red Hat を選ぶ理由
Ansible Automation Platform の一部である Event-Driven Ansible は、すばやく効率的に IT サービスを提供するために必要なイベント処理機能を提供し、手作業を行うことなくタスクを完了できます。このため、組織はより価値の高いプロジェクトに専念するために時間を使えます。
イベント駆動型自動化はサードパーティの監視ツールを利用してイベントの発生時点を特定することが多いため、すでに使用しているプラットフォームとツールと統合される Ansible コンテンツを使用すると、より効率的で自動化されたワークフローへの移行が容易になります。Red Hat Ansible Automation Platform サブスクリプションにより、Ansible Content Collections という形で、数千ものバンドルされたモジュール、ロール、プラグイン、ドキュメントにアクセスできます。これには Red Hat Ansible Certified Content と Red Hat およびそのパートナーの Ansible 検証済みコンテンツの両方が含まれ、すべてを Ansible Automation Hub からダウンロードできます。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。