Ansibleは、多層IT環境でITタスクを簡単に自動化できるオープンソースの構成管理およびオーケストレーションツールです。 1つのコマンドで、各サーバーにログインして自分で構成を行うことなく、複数のサーバーを構成してアプリケーションを展開できます。そうすることで、Ansibleは、そうでなければ時間と手間がかかるタスクを簡素化します。
さまざまな自動化タスクを実行するプレイブックファイルの数が増えると、状況は少し複雑になる可能性があります。そこで、Ansibleの役割が登場します。
Ansibleの役割とは何ですか?
Ansibleの役割は、イベントではなくアイデアを扱うAnsible内の概念です。基本的に、役割は、プレイブックファイルの記述方法を簡素化するために使用される抽象化のレベルです。ロールは、Playbookファイルにロードできる変数、モジュール、タスク、ファクトなどの再利用可能なコンポーネントのスケルトンを提供します。
実用的なアプリケーション
ロールがどのように使用されるかをよりよく理解するために、2つのリモートノードで8つのタスクを実行するシナリオを考えてみましょう。 1つのアプローチは、リモートホストで実行されるすべてのタスクを単一のプレイブックファイルに定義することです。ただし、これは面倒であり、プレイブックの複雑さが増す可能性があります。より良いアプローチは、8つの別々の役割を作成することです。これにより、各役割は1つのタスクを実行し、後でansible-playbookファイルでこれらの役割を呼び出します。
ロールを使用する最大の利点の1つは、各ロールが互いに独立していることです。ある役割の実行は、別の役割の実行に依存しません。また、役割を変更して再利用できるため、Playbookファイルの演劇やタスクを書き直す必要がありません。
したがって、DebianサーバーにLAMPスタックをインストールするためのプレイブックファイルを作成するとします。これを行うためのより良い方法は、それぞれがリモートホストにApache、MariaDB、およびPHPをそれぞれインストールする3つの別々の役割を作成することから始めることです。次に、プレイブックを作成し、プレイブックファイル内のロールを呼び出します。 DrupalCMSをインストールする必要がある2番目のDebianサーバーがあるとします。役割を書き直す代わりに、前に作成した3つの役割を再利用し、Drupalをインストールするために他の役割を追加するだけです。
ドリフトが発生しますか?
それでは、Ansibleの役割を作成する方法を見てみましょう。
Ansibleロールを作成する方法
ansibleロールを最初から作成するには、ansible galaxyコマンドを実行します。例を以下に示します:
$ansible-galaxyinitロール名
たとえば、my-roleというロールを作成するには、コマンドを呼び出します。
$ ansible-galaxy init my-role
上の画面から、コマンドはmy-roleディレクトリを作成します。このロールディレクトリには、デフォルトで次のディレクトリまたはフォルダが含まれています。
- 「defaults」フォルダ–これには、ロールによって使用されるデフォルトの変数が含まれています。
- 「ファイル」フォルダ–ロールによって展開できるファイルが含まれています。
- 「handlers」フォルダー–この役割で使用できるハンドラーを格納します。
- 「メタ」フォルダ–役割の依存関係を確立するファイルが含まれています。
- 「tasks」フォルダー–ロール自体のタスクを詳しく説明するYAMLファイルが含まれています。通常、これはmain.ymlファイルです。
- 「templates」フォルダ–変更してプロビジョニング対象のリモートホストに割り当てることができるテンプレートファイルが含まれています。
- 「tests」フォルダー–テストをAnsibleプレイブックファイルと統合します。
- 「vars」フォルダー–ロールによって使用される変数が含まれています。プレイブックファイルで定義できますが、このディレクトリで定義することをお勧めします。
ロールディレクトリ構造を表示するには、treeコマンドを実行してからロール名を実行します。
$ tree <role-name>
ここで、デモンストレーションのために、次の3つのAnsibleロールを作成します。
- 前提条件の役割–gitをインストールします
- mongodbの役割–MongoDBデータベースエンジンをインストールします
- Apacheの役割–ApacheWebサーバーをインストールします
したがって、前に使用したのと同じ構文を使用して、次のようにロールを作成します。
$ sudo ansible-galaxy init prerequisites $ sudo ansible-galaxy init mongodb $ sudo ansible-galaxy init apache
次のステップは、作成した各ロールを定義することです。これを実現するには、各役割の「tasks」フォルダーにあるmain.ymlファイルを編集する必要があります。
役割—>タスク—> main.yml
たとえば、前提条件の役割を編集するには、次のようにナビゲートします。
$ cd prerequisites/tasks/
次に、main.ymlファイルを編集します。
$ sudo vim main.yml
gitをインストールするための役割は次のように定義されています:
- name: Install git apt: name: git state: present update_cache: yes
MongoDBの場合、2つのタスクがあります。 MongoDBをインストールしてMongodデーモンを起動します。
- name: Install MongoDB apt: name: mongodb state: present update_cache: yes - name: Start Mongod daemon shell: "mongod &"
そして最後に、Apache Webサーバーの場合:
- name: install Apache web server apt: name=apache2 state=present update_cache=yes
最後に、stack.ymlというプレイブックファイルを作成し、図のようにロールを呼び出します。
--- - hosts: all become: yes roles: - prerequisites - mongodb - apache
ご覧のとおり、プレイブックファイルは、ホストの各タスクを定義するのに比べて非常に単純に見えます。
私たちの役割が期待どおりに機能していることを確認するには、図のようにansibleプレイブックファイルを実行します。
$ sudo ansible-playbook /etc/ansible/stack.yml
プレイブックは、示されているようにすべての役割を実行します。
パッケージが正常にインストールされたことを確認するために、次のようにバージョンを確認します。
$ mongod --version $ apachectl -v $ git --version
上記の出力は、実際にロールが正常に実行され、パッケージがインストールされたことを確認します。完璧です!
まとめ:
Ansibleロールは、特に複数のホスト間で実行される複数のタスクがある場合に、プレイブックファイルを簡素化します。さらに、プレイブックファイルを変更することなく、複数のホストの役割を再利用できます。このガイドが役に立ったと思ったら、私たちに一言送って、友達と共有してください。