キーワードで検索

今日を知り、明日を変えるシステム運用メディア

ansible-galaxyコマンドでRolesを作成しPlaybookに組み込む方法を徹底解説

ansible-galaxyコマンドでRolesを作成しPlaybookに組み込む方法を徹底解説

Red Hatが開発したオープンソースのIT自動化ツール「Ansible(アンシブル)」は、インフラ構築、構成管理、アプリケーションのデプロイ、オーケストレーションなど、様々なITプロセスを自動化するために使用されます。

AnsibleのRoles機能は、Playbookをモジュール化し、再利用性や構造化を大幅に向上させます。

本記事では、Rolesを効率的に作成・管理するためのansible-galaxyコマンドを活用した方法を解説します。また、Rolesを使った設定の適用例も紹介し、Ansible運用の効率化に繋げます。

Rolesのディレクトリ構造やテンプレート利用の手法にも触れ、実践的な活用法を学びましょう。

ansible-galaxyコマンドとは?

ansible-galaxyコマンドは、AnsibleのRolesやコレクションを作成・管理するためのツールです。主に以下の2つの機能を提供します。

  • Rolesの作成と管理
    ansible-galaxy initコマンドで必要なディレクトリ構造を自動生成し、Roles作成を効率化します。
  • コレクションの取得と管理
    モジュールやRolesがパッケージ化されたコレクションをインストールして利用できます(例:AWSリソース管理用のamazon.awsコレクション)

コレクションはAnsibleを拡張する仕組みで、以下のように簡単にインストール可能です。

ansible-galaxy collection install amazon.aws

Rolesとは?

AnsibleのPlaybookのRoles

Rolesは、AnsibleのPlaybookをモジュール化して構造化するための仕組みです。複雑なタスクを分割し、タスク、変数、テンプレートなどをディレクトリごとに整理することで、再利用性と保守性を向上させます。

Rolesは以下のようなディレクトリ構造で構成されます。

roles/
└── webserver/                # Roleの名前
    ├── tasks/                  # タスクの定義を格納
    │   └── main.yml            # タスクを記述する主要ファイル
    ├── templates/            # Jinja2テンプレートを格納
    │   └── index.html.j2     # 動的に生成されるテンプレート
    ├── vars/                   # 変数を定義
    │   └── main.yml            # Role専用の変数定義ファイル
    ├── handlers/               # ハンドラー(サービスの再起動など)を定義
    │   └── main.yml            # ハンドラーを記述する主要ファイル
    ├── defaults/               # デフォルト変数を定義
    │   └── main.yml            # デフォルト変数を記述する主要ファイル
    ├── files/                  # 静的ファイルを格納
    │   └── custom.conf   # 配置する静的ファイル
    └── meta/                   # Roleのメタデータ(依存関係など)を定義
        └── main.yml            # メタデータを記述する主要ファイル

テンプレートの説明

Roles内のtemplates/ディレクトリには、Jinja2形式のテンプレートを配置します。これにより、変数を使用して動的に設定ファイルやHTMLを生成することができます。

Playbookとは?

画像:https://www.shutterstock.com/ja/image-photo/file-folder-icons-concept-saving-files-2544170161
Playbookは、Ansibleの中核を担うYAML形式のファイルで、対象ノードに対してタスクを自動実行する指示書です。複数のタスクやRolesを記述することで、構成管理やアプリケーションのデプロイを効率化します。

Playbookの主な構成要素

  • hosts: 対象ノード(例:allや特定のグループ名)を指定。
  • tasks: 実行するタスクのリスト。
  • vars: タスク内で使用する変数の定義。
  • roles: RolesをPlaybookに組み込む指定。

詳細な解説については、以下の記事をご覧ください。Ansibleとはなにか?基本概念とコマンドを紹介 | 主要コンポーネントや代表的な特徴を詳しく解説

ansible-galaxyコマンドでRoles作成と利用する流れ

ここから先の手順では、関連記事「Ansibleをコントロールノードにインストールする手順と、自動構築の基本操作を徹底解説」で構築した環境を再利用して実践します。

事前準備

  • コントロールノードにAnsibleをインストール
  • 秘密鍵を配置(ターゲットノードにSSH接続可能な状態)
  • ansible_projectディレクトリの作成
  • inventoryの作成
  • rolesディレクトリの作成

完成後のディレクトリ構造

ansible_project/            # プロジェクトのルートディレクトリ
├── inventory/              # インベントリファイルを格納
│   └── inventory.ini       # インベントリファイル(ホスト情報)
├── roles/                  # Rolesを格納
│   └── webserver/        # Role名(例: webserver)
│       ├── tasks/          # タスク定義ディレクトリ
│       │   └── main.yml    # タスク定義ファイル
│       ├── templates/    # テンプレートファイル
│       │   └── index.html.j2
│       ├── vars/           # Role用変数定義ディレクトリ
│       │   └── main.yml
│       ├── handlers/       # ハンドラー定義ディレクトリ
│       │   └── main.yml
│       ├── defaults/       # デフォルト変数ディレクトリ
│       │   └── main.yml
│       ├── files/          # 静的ファイルディレクトリ
│       └── meta/           # メタデータ定義ディレクトリ
│           └── main.yml
├── vars/                   # 追加の変数定義ディレクトリ
│   └── common.yml    # 共通変数を定義
├── site.yml                # Playbookファイル(プロジェクトのルートに配置)

Rolesを作成する

Rolesを作成するには、ansible-galaxy initコマンドを使用します。

ansible-galaxy init webserver

出力例

– Role webserver was created successfully

これにより、以下のディレクトリ構造が自動生成されます。

roles/
└── webserver/
    ├── tasks/                  # タスクの定義
    │   └── main.yml
    ├── templates/            # テンプレートファイル
    ├── vars/                   # Role専用の変数
    │   └── main.yml
    ├── handlers/               # ハンドラー(通知先の処理)
    │   └── main.yml
    ├── defaults/               # デフォルト変数
    │   └── main.yml
    ├── files/                  # 静的ファイル
    └── meta/                   # メタデータ
        └── main.yml

Tasksの定義

Rolesの中心となるtasks/main.ymlに、実行するタスクを記述します。以下は、Apacheをインストールし起動する例です。


# tasks/main.yml
– name: Install Apache
  yum:
    name: httpd
    state: present

– name: Start and enable Apache
  service:
    name: httpd
    state: started
    enabled: yes

記載例

ポイント

  • yumモジュール
    Apache(httpd)をインストールします。
  • serviceモジュール
    Apacheサービスを起動し、再起動後も自動的に起動するよう設定します。

Roles内でテンプレートを追加する

テンプレートを使用して、Apacheの設定ファイルやHTMLページを動的に生成します。templates/index.html.j2 を作成します。

touch templates/index.html.j2

以下の内容を記述します。

<html>
  <head><title>{{ server_name }}</title></head>
  <body>
    <h1>Welcome to {{ server_name }}</h1>
  </body>
</html>

次に、テンプレートを適用するタスクをtasks/main.ymlに追加します。

– name: Deploy index.html
  template:
    src: index.html.j2
    dest: /var/www/html/index.html
    mode: ‘0644’

例:追加したtask/main.yml

変数を定義する

次に、テンプレートで使用する変数を定義しましょう。
vars/main.yml に以下の内容を記述します。

server_name: “Ansible Managed Server”

記述例

これにより、テンプレート内の {{ server_name }} が Ansible Managed Server に置き換えられます。

Rolesを利用するPlaybookの作成

Rolesを利用するには、Playbookで呼び出す必要があります。まずは、ansible_project/ 配下にsite.yml という名前でPlaybookを作成します。

cd ~/ansible_project
touch site.yml

以下の内容を記述します。


– name: Apply Roles to target node
  hosts: target
  become: yes
  roles:
    – webserver
  • hosts
    対象ノードのグループ(例: target)
  • become: yes
    管理者権限でコマンドを実行
  • roles
    使用するRolesを指定

Playbookの実行

以下のコマンドでPlaybookを実行します。

ansible-playbook -i inventory.ini site.yml

実行結果の確認

Playbookが正常に実行されると、以下のような出力が得られます。

PLAY [Apply Roles to target node] *******************************************

TASK [webserver : Install Apache] *******************************************
changed: [10.0.1.100]

TASK [webserver : Start and enable Apache] ***********************************
changed: [10.0.1.100]

TASK [webserver : Deploy index.html] *****************************************
changed: [10.0.1.100]

PLAY RECAP *******************************************************************
10.0.1.100               : ok=3    changed=3    unreachable=0    failed=0

問題なくタスクが実行されましたら、ブラウザからターゲットノードのパブリックIPアドレスにアクセスし、templates/index.html.j2の内容が表示されることが確認できます。

※学習終了後はリソースを削除してください。

terraform destroy

まとめ

この記事では、AnsibleのRoles機能を活用してPlaybookを構造化し、再利用性を高める方法を解説しました。特に、ansible-galaxyコマンドを使用したRolesの作成から、Playbookでの利用方法までを実践的に学びました。

  • ansible-galaxyコマンドの活用
    Rolesのディレクトリ構造を自動生成し、効率的に作成・管理。
    webserverなどを管理するコレクションも簡単にインストール可能。
  • Rolesの仕組みと活用
    Playbookをモジュール化し、タスクや変数、テンプレートをディレクトリ単位で整理。
    メンテナンス性が向上し、再利用性が高まる。

次の記事ではローカルPCのAnsibleを活用し、AWS環境の自動構築を実践を交えて解説する予定です。ぜひご覧ください。

現在クラウドエンジニアとして勤務。AWS(SAP、DOP)とAzure(AZ-305)の資格を保有しており、ネットワークやセキュリティに関する業務を主に行っています。

最新情報をお届けします!

最新のITトレンドやセキュリティ対策の情報を、メルマガでいち早く受け取りませんか?ぜひご登録ください

メルマガ登録

最新情報をお届けします!

最新のITトレンドやセキュリティ対策の情報を、メルマガでいち早く受け取りませんか?ぜひご登録ください

メルマガ登録