キーワードで検索

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

Ansibleのモジュールについて徹底解説 | 現場でよく用いられるモジュールと実践的な活用例を紹介

Ansibleのモジュールについて徹底解説 | 現場でよく用いられるモジュールと実践的な活用例を紹介

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

Ansibleのモジュールは、サーバー構成やアプリケーションデプロイの自動化を実現するための基本要素です。モジュールを活用することで、パッケージ管理、ファイル操作、設定変更などを効率的に行えます。

本記事では、Ansibleのモジュールの基本から、よく使われるモジュールの具体的な使い方、実践的な活用例まで詳しく解説します。AnsibleのPlaybookをより効果的に記述し、自動化をスムーズに進めるために、各モジュールの役割と使い方を理解しましょう。

Ansibleのモジュールとは?

Ansibleのモジュールとは、特定のタスクを実行するためのスクリプトのようなものです。サーバー設定、パッケージ管理、ユーザー管理、ファイル操作など、さまざまな用途に対応するモジュールが用意されています。AnsibleのPlaybookでは、各タスクにモジュールを指定し、パラメータを設定することで、目的の処理を実行します。

利用可能なモジュールの一覧は、レッドハット社 Ansibl公式のドキュメント内「Module Docs」を参照してください。

基本構文

以下のように、モジュール名とオプションを指定してタスクを定義します。

– name: モジュールの基本構文
  module_name:
    option1: value1
    option2: value2

例:copyモジュール

– name: ファイルをコピーする
  copy:
    src: /local/path/file.txt
    dest: /remote/path/file.txt

この例では、copyモジュールを使用してローカルのfile.txtをリモートサーバーにコピーしています。モジュールを活用することで、簡潔かつ再現性の高い構成管理が可能になります。

主要コンポーネントとモジュールの関係

Ansibleでは、モジュールが「タスク」の実行エンジンとして機能し、各タスクを処理する役割を持ちます。Playbook内で定義されたタスクは、モジュールによって実行され、リモートホストの状態を変更または維持することが可能です。

ここでは、Red HatのAnsibleモジュールの仕組みを参考に、以下の主要コンポーネントについて解説します。

タスク

タスクは、Ansible Playbook内で実行される個々の操作のことを指します。

各タスクはモジュールを使用して、パッケージのインストールや設定変更などを実行します。

play(プレイ)

Playとは、特定のホストに対して実行される一連のタスクの集合です。Playごとに対象ホストを定義し、適用する設定や処理を指定します。

例えば、Webサーバーのセットアップを1つのPlayとして記述し、別のPlayでデータベースの設定を行うといった分割が可能です。これにより、異なる環境への適用や管理が容易になります。

Ansible Playbook

Playbookは、複数のPlayやタスクをまとめたYAML形式のファイルで、サーバー構成の自動化やデプロイに利用されます。Playbookを使用すると、一貫性のある設定を適用でき、複雑な作業を簡素化できます。

また、再利用性が高いため、異なる環境(開発・本番)で同じ設定を適用する際にも有効です。

Ansible Role

Roleは、Playbookの構成を整理し、再利用可能な形で管理する仕組みです。変数、タスク、テンプレート、ハンドラーなどを分けて管理することで、可読性が向上し、保守がしやすくなります。

例えば、Webサーバーの設定をRole化すると、異なるプロジェクトでも簡単に再利用でき、管理の効率化が図れます。

コレクション

コレクションは、モジュール、プラグイン、ロールをまとめたパッケージで、特定の用途やベンダー向けの拡張機能を提供します。

例えば、AWSやDocker向けの専用コレクションが用意されており、特定のクラウド環境やサービスを管理するためのモジュールやプラグインを一括で導入できるようになっています。

プラグイン

プラグインは、Ansibleの機能を拡張するためのコンポーネントで、コネクション管理やログ処理、通知の送信などを制御します。

例えば、SSH接続を最適化するコネクションプラグインや、Slackに通知を送るアクションプラグインなどがあります。これにより、より柔軟な自動化環境を構築できます。

パッケージ管理モジュールの使い方

Ansibleでは、サーバのパッケージ管理を自動化するために、OSに応じたパッケージ管理モジュールを使用します。

RHEL系ではyum、Debian系ではaptモジュールを活用し、ソフトウェアのインストールや更新を簡単に実行できます。

yum モジュール(RHEL系)

yumモジュールは、RHEL(Red Hat Enterprise Linux)系のディストリビューション(CentOS、AlmaLinux、Rocky Linuxなど)でパッケージのインストール、更新、削除を行うために使用されます。

基本的な使い方

以下の例では、httpd(Apache)をインストールします。

– name: Install Apache using yum
  yum:
    name: httpd
    state: present

state: presentは、指定したパッケージがインストールされていない場合にインストールを実行するオプションです。

複数パッケージのインストール

複数のパッケージを一括で管理することも可能です。

– name: Install multiple packages
  yum:
    name:
      – httpd
      – vim
      – git
    state: present

パッケージの更新と削除

– name: Update all packages
  yum:
    name: ‘*’
    state: latest

– name: Remove a package
  yum:
    name: httpd
    state: absent

state: latestは、パッケージを最新バージョンに更新し、state: absentは削除を意味します。

apt モジュール(Debian/Ubuntu系)

aptモジュールは、Debian系(Ubuntu、Debian、Linux Mintなど)でパッケージの管理を行うために使用されます。yumと同様に、パッケージのインストール、更新、削除を自動化できます。

基本的な使い方

以下の例では、nginxをインストールします。

– name: Install Nginx using apt
  apt:
    name: nginx
    state: present
    update_cache: yes

update_cache: yesを指定すると、事前にapt updateを実行してパッケージリストを更新します。

複数パッケージのインストール

– name: Install multiple packages
  apt:
    name:
      – nginx
      – curl
      – unzip
    state: present

パッケージの更新と削除

– name: Upgrade all packages
  apt:
    upgrade: yes

– name: Remove a package
  apt:
    name: nginx
    state: absent

upgrade: yesを指定すると、apt upgradeを実行してシステム内の全パッケージを更新できます。

ファイル操作モジュールの使い方

Ansibleでは、リモートサーバー上のファイル管理を自動化するために、copyやtemplateなどのファイル操作モジュールを使用します。

これらを活用すると、設定ファイルの配置やテンプレートの適用を効率的に行えます。

copy モジュール(ファイル/ディレクトリのコピー)

copyモジュールは、ローカルマシンからリモートサーバーへファイルやディレクトリを転送する際に使用します。設定ファイルやスクリプトのデプロイに便利です。

基本的な使い方

以下の例では、index.htmlをリモートサーバーの/var/www/html/にコピーします。

– name: Copy index.html to remote server
  copy:
    src: files/index.html  # ローカルのファイル
    dest: /var/www/html/index.html  # リモートの保存先
    owner: Ops-Today-data
    group: Ops-Today–data
    mode: ‘0644’

ownerやmodeを指定すると、所有者やパーミッションの設定も可能です。

ディレクトリのコピー

– name: Copy entire directory
  copy:
    src: files/config/  # ローカルのディレクトリ
    dest: /etc/myapp/  # リモートの保存先
    owner: root
    group: root
    mode: ‘0755’

srcにディレクトリを指定すると、中のファイルごと転送されます。

コンテンツの直接指定

ファイルの内容をPlaybook内で指定することも可能です。

– name: Create a configuration file
  copy:
    content: “server_name example.com;\nlisten 80;”
    dest: /etc/nginx/conf.d/example.conf
    mode: ‘0644’

以上のように、copyモジュールを使うことで、簡単にファイルの転送や作成が可能です。

template モジュール(Jinja2テンプレートを利用)

templateモジュールは、Jinja2テンプレートを使用して、動的な内容を持つファイルを生成するために使用します。環境ごとに異なる設定ファイルを適用する際に役立ちます。

基本的な使い方

nginx.conf.j2というテンプレートファイルを作成します。

server {
    listen 80;
    server_name {{ domain }};
    root {{ document_root }};
}

このテンプレートを基に、リモートサーバー用の設定ファイルを生成するPlaybookを作成します。

– name: Deploy Nginx configuration from template
  template:
    src: templates/nginx.conf.j2  # ローカルのテンプレートファイル
    dest: /etc/nginx/nginx.conf  # リモートの保存先
    owner: root
    group: root
    mode: ‘0644’
  vars:
    domain: example.com
    document_root: /var/www/html

変数domainやdocument_rootを指定することで、環境に応じた設定ファイルを動的に生成できます。

環境ごとに異なる設定を適用

group_varsやhost_varsを活用すると、環境ごとに異なる設定を適用可能です。

– name: Generate environment-specific config
  template:
    src: templates/app.conf.j2
    dest: /etc/myapp/config.conf
  vars_files:
    – vars/{{ ansible_env }}.yml  # 環境ごとに異なる変数ファイルを適用

このようにtemplateモジュールを活用すると、環境ごとのカスタマイズを柔軟に行えます。

設定ファイル編集モジュールの使い方

Ansibleには、設定ファイルを自動編集するためのモジュールが用意されています。

lineinfileモジュールは特定の1行を編集し、blockinfileモジュールは複数行を一括で追加・変更できます。

lineinfile モジュール(設定ファイルの1行を編集)

lineinfileモジュールは、設定ファイルの特定の1行を編集するために使用します。既存の行を変更したり、存在しない場合は追加することが可能です。

例えば、/etc/ssh/sshd_config内でPermitRootLoginの設定を変更する場合、以下のPlaybookを使用します。

使用例:SSH設定の変更

– name: Enable root login via SSH
  hosts: all
  tasks:
    – name: Modify PermitRootLogin setting
      ansible.builtin.lineinfile:
        path: /etc/ssh/sshd_config
        regexp: ‘^PermitRootLogin’
        line: ‘PermitRootLogin yes’
        backup: yes  # 変更前にバックアップを作成

このタスクでは、PermitRootLoginの設定をyesに変更し、該当行がない場合は追加されます。

regexpを使用することで、既存のエントリを確実に変更できます。

blockinfile モジュール(複数行の編集)

blockinfileモジュールは、設定ファイル内に複数行のブロックを追加・変更する際に使用します。

例えば、/etc/motd(ログイン時のメッセージファイル)にカスタムメッセージを追加する場合、以下のPlaybookを記述します。

使用例:ログインメッセージの追加

– name: Add custom login message
  hosts: all
  tasks:
    – name: Insert message block into /etc/motd
      ansible.builtin.blockinfile:
        path: /etc/motd
        block: |
          #######################################
          #  Welcome to our server!            #
          #  Unauthorized access is prohibited #
          #######################################
        marker: “# {mark} ANSIBLE MANAGED BLOCK”

このタスクでは、指定したメッセージブロックを/etc/motdに挿入します。

markerを指定すると、Ansibleが管理するブロックであることが明示され、手動編集による影響を抑えられます。

モジュールの活用例

Ansibleのモジュールを活用することで、サーバー構築やセキュリティ設定の自動化が可能になります。ここでは、代表的なユースケースとして「Webサーバーの構築」と「SSHのセキュリティ強化」を実践例とともに紹介します。

モジュールを用いたWebサーバーの構築

Webサーバーを手動でセットアップするには、パッケージのインストール、設定ファイルの調整、サービスの起動など、複数の手順が必要です。

Ansibleを活用すれば、これらの作業を自動化し、一貫した環境を迅速に構築できます。

Apacheをインストールし、サービスを起動するPlaybook

– name: Set up Apache web server
  hosts: web_servers
  become: yes
  tasks:
    – name: Install Apache
      ansible.builtin.yum:
        name: httpd
        state: present

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

    – name: Deploy index.html
      ansible.builtin.copy:
        content: “<h1>Welcome to Ansible-managed Web Server</h1>”
        dest: /var/www/html/index.html
  • yumモジュールを使用してApacheをインストール
  • serviceモジュールでApacheを起動し、サーバー再起動後も自動的に起動するよう設定
  • copyモジュールを用いて、シンプルなindex.htmlファイルを配置

SSHのセキュリティ強化

SSHのセキュリティ設定を適切に管理することで、サーバーへの不正アクセスを防ぐことができます。Ansibleのlineinfileモジュールを活用すれば、SSH設定を一括変更し、より安全な構成を実現できます。

SSHのポート変更とRootログイン無効化

以下のPlaybookでは、SSHのポートを2222に変更し、rootユーザーのログインを禁止する設定を適用します。

– name: Secure SSH configuration
  hosts: all
  become: yes
  tasks:
    – name: Change SSH port
      ansible.builtin.lineinfile:
        path: /etc/ssh/sshd_config
        regexp: ‘^#?Port ‘
        line: ‘Port 2222’
        backup: yes

    – name: Disable root login
      ansible.builtin.lineinfile:
        path: /etc/ssh/sshd_config
        regexp: ‘^#?PermitRootLogin ‘
        line: ‘PermitRootLogin no’
        backup: yes

    – name: Restart SSH service
      ansible.builtin.service:
        name: sshd
        state: restarted
  • lineinfileモジュールを使い、SSHのポートをデフォルトの22から2222へ変更
  • PermitRootLogin noを設定し、rootユーザーの直接ログインを無効化
  • backup: yesを指定することで、変更前のファイルをバックアップ
  • 設定変更後、serviceモジュールでSSHサービスを再起動

まとめ

Ansibleのモジュールを活用することで、サーバー構成の自動化や運用の効率化を実現できます。

本記事では、パッケージ管理(yum、apt)、ファイル操作(copy、template)、設定変更(lineinfile、blockinfile)などの主要モジュールについて解説しました。

Webサーバーの構築やSSHのセキュリティ強化で行ったように、適切なモジュールを活用すれば、手作業のミスを削減し、一貫性のある環境構築が可能になります。Ansibleのモジュールを理解し、インフラ管理を効率化することで、運用の自動化をさらに進めていきましょう。

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

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

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

メルマガ登録

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

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

メルマガ登録