ウェブサイト検索

システム管理タスクのためのAnsibleモジュールの使用方法 - パート6


このパート6では、Ansibleシリーズの一環として、過去のトピックでいくつかのAnsibleモジュールを取り上げましたが、今回はさらに深く掘り下げ、システム管理タスクの実行に役立つ追加のモジュールを発見します。

各モジュールの基本的なアイデアを得て、特定のタスクを達成するために利用できるオプションを見ていきます。

このページでは:
  1. Ansibleにおけるソフトウェアパッケージとリポジトリの管理
  2. Ansibleを使用したサービス管理
  3. Ansibleを使用したファイアウォールの管理
  4. Ansibleを使用したファイルまたはフォルダーのアーカイブ
  5. Ansibleを使用してタスクをスケジュールする
  6. Ansibleでユーザーとグループを管理する
  7. Ansibleを使用してファイルとディレクトリを作成する
  8. Ansibleを使用したストレージ管理
  9. Ansibleを使用したファイルシステムの管理

1. Ansibleにおけるソフトウェアパッケージとリポジトリの管理

Linuxシステムにパッケージをインストールする際、異なるディストリビューションには異なるパッケージマネージャーがあります。RedHat系のディストリビューションではyumとdnfがあり、Debian系のディストリビューションではaptがあります。

Ansibleにはpackageというモジュールがあり、異なるシステムに対して異なるパッケージマネージャを使用する必要がなくなります。それは自動的にホストシステムの対応するパッケージマネージャを使用し、作業を簡素化します。

ソフトウェアパッケージをインストールする

例えば、DebianとRedHatのディストリビューションを含むホストのグループにhtopをインストールするには、以下のinstall_htop.ymlプレイブックに示されているようにpackageモジュールを使用します。

---
- name: Install htop on Ubuntu and CentOS
  hosts: all
  tasks:

- package:
         name: htop
         state: installed

注意: パッケージ名はオペレーティングシステムによって異なる場合があります。例えば、Redhatディストリビューションではhttpdがあり、Debian/UbuntuシステムではApache2がありますが、これらはすべてApacheウェブサーバーを指します。したがって、これらのパッケージを渡す際には特に注意が必要です。通常、変数や条件文を使用するのが最善です。

2. Ansibleを使用したサービスの管理

次に、サービスモジュールがあります。これはLinuxシステム上でサービスを管理するために使用されます。サービスの開始、停止、または再起動に使用されます。また、システムが起動する際にサービスを自動的に開始するようにサービスを有効にするためにも使用できます。

サービスを開始して有効にする

例えば、RHEL 8 で Apache ウェブサーバーを起動および有効にするには、以下のようにサービスを使用します。

---
- name: Start and enable httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: started
	    enabled: yes

サービスを停止する

httpd サービスを停止するには、stopped 属性を渡してください。

---
- name: Stop httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: stopped

サービスを再起動する

httpd サービスを再起動するには、restarted 属性を渡してください。

---
- name: Restart httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: restarted

3. Ansibleによるファイアウォールの管理

システム管理者が行うもう一つの重要なタスクは、ファイアウォールの管理です。Ansibleのプレイブックでは、firewalldおよびufwモジュールを使用することで、これが非常に簡単になりました。ファイアウォールを構成して、ポートやサービス、さらにはソースアドレスを許可またはブロックすることができます。

さあ、いくつかの例を見てみましょう:

firewalldでポート80を開放/ブロックする

---
- name: Allow port 80 
  hosts: webservers
  tasks: 
   
   -firewalld:
	port: 80/tcp
     permanent: yes
     state: enabled

上記のプレイブックでは、ポート80がファイアウォールを通過することが許可されています。

オプション permanent: yes はファイアウォールルールを強制し、再起動後も持続させます。ただし、このルールは即座には適用されません。再起動後にのみ有効になります。ルールを即座に適用するには、オプション immediate: yes を使用してください。

許可されているアドレスを指定するには、source:0.0.0.0/0 ステートメントを使用してください。

- firewalld:
    source: 192.168.0.0/24
    zone: public
    state: enabled

ポートオプションを使用するために許可されるポートの範囲を指定するには、以下のようにします:

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

ポートをブロックするには、状態オプションを無効に変更します。

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

firewalldでサービスを追加/ブロックする

ポートの追加/ブロックに加えて、サービスにも同じルールを適用できます。そして、非常に簡単です。serviceモジュールを使用し、追加するサービスを追加し、状態オプションがenabledに設定されていることを確認するだけです。

- firewalld:
    service: https
    permanent: true
    state: enabled

サービスをブロックするには、stateオプションをdisabledに設定してください。

- firewalld:
    service: https
    permanent: true
    state: disabled

4. Ansibleを使用したファイルまたはフォルダーのアーカイブ

アーカイブとは、ファイルやフォルダーを簡単に持ち運べる小さいサイズの形式に圧縮することを指します。Ansibleにはarchiveと呼ばれるモジュールが付属しています。ファイルを圧縮するのは非常に簡単です。必要なのは、ファイルのソースパスと圧縮されたファイルの宛先を指定するだけです。

ディレクトリを圧縮する

以下のプレイブック compress.yml を考慮してください。

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

上記のプレイブックは、/opt/data/webディレクトリを圧縮し、/tmp/web.gzに保存します。

フォーマットでディレクトリを圧縮する

デフォルトの圧縮形式は.gzですが、これはフォーマット属性を使用して指定できます。次のプレイブックをサンプリングしてください。

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

上記のプレイブックは /opt/data/web ディレクトリを /tmp/web.zip に圧縮します。

ファイルを解凍する

unarchive 属性を使用して、圧縮ファイルを解凍することもできます。以下のプレイブックを考えてみてください。

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

上記のプレイブックは、Ansible コントローラーの /opt に /opt/data/web.gz ファイルを解凍します。

リモートノード上のファイルを解凍する

リモートソースシステムを指定するには、remote_src=yesオプションを使用します。

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.bz2 to/opt on remote host
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/
     remote_src=yes 

上記のプレイブックは、リモートノードの /tmp/web.bz2 ファイルを /opt/ ディレクトリに展開します。

5. Ansibleでタスクをスケジュールする

cron モジュールは、Ansible Playbooks でジョブをスケジュールするのに役立ちます。

タスクをスケジュールする

以下のプレイブックを考慮してください。

---
- hosts: webservers
  tasks:

 - name: Create a scheduled task
   cron:
     name: Run employee attendance
     job: sh /opt/scripts/attendace.sh
      
     month: 4
     day: 5
     hour: 17
     minute: 00

プレイブックは4月5日の午後5時に出席スクリプトを実行します。

特定の日にスクリプトをスケジュールする

このスクリプトを4月の5日が月曜日の場合のみ実行するようにスケジュールしたい場合は、weekday: 1 属性を使用してください。0は日曜日、6は土曜日を表します。

month: 4
day: 5
hour: 17
minute: 00
weekday: 1

これらのフィールドのいずれかにアスタリスク (*)がある場合、任意の値を示します。

日付でジョブを実行する

曜日に関係なく、4月5日の午後5時にジョブを実行するには、以下のように時間パラメータを使用してください。

month: 4
day: 5
hour: 17
minute: 00
weekday: *

毎月特定の日にジョブを実行する

毎月5日の午後5時にcronジョブを実行するには、以下の設定を使用してください。

month: *
day: 5
hour: 17
minute: 00
weekday: *

毎日ジョブを実行する

毎日午後5時にcronジョブを実行するには、時間設定を以下のように設定します:

month: *
day: *
hour: 17
minute: 00
weekday: *

5時間ごとにジョブを実行する

cronジョブを5時間ごとに実行するには、次のようにステップ値*/5を使用します。

month: *
day: *
hour: */5
minute: *
weekday: *

6. Ansibleを使用してユーザーとグループを管理する

Ansibleプレイブック内でユーザーやグループを非常に簡単に管理することもできます。

新しいユーザーを作成する

新しいユーザーを作成するには、以下のようにuserモジュールを使用します。

---
- hosts: webservers
  tasks:

 - name: Create a new user
   user: 
     name: Jack

UIDやグループなどの追加オプションも追加できます。

- name: Create a new user
   user: 
      name: Jack
      comment: Jack Peters
          uid:   1002
      group: administrators
      shell:  /bin/bash

ユーザーを削除する

ユーザーを削除するには、remove: yes ステートメントを使用してください。

- name: Remove the user 'Jack'
  user:
    name: Jack
    state: absent
    remove: yes

新しいグループを作成する

新しいグループを作成するには、groupモジュールを使用してください。

- name: Create a group
  group:
    name: developers

7. Ansibleを使ってファイルとディレクトリを作成する

ディレクトリのファイルを作成するには、file モジュールを使用します。

新しいディレクトリを作成する

例えば、新しいディレクトリを作成するために。

---
- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/app
     state: directory

オーナー、グループ、ファイルの権限など、他の属性を追加できます。

- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/web
     state: directory
     owner: www-data
     group: www-data
     mode: 0644

さらに、recurse: yesステートメントを使用して、ディレクトリを再帰的に作成することができます。

---
- hosts: webservers
  tasks:

  - name: Create directories recursively
    file: 
     path: /opt/web/app
     state: directory
     owner: www-data
     group: www-data
     mode: 0644
recurse: yes

ファイルを作成する

ファイルを作成するには、state: touchオプションを使用してください。

---
- hosts: webservers
  tasks:

  - name: Create a new file
    file: 
     path: /opt/web/index.html
     state: touch
owner: www-data
     group: www-data
     mode: 0644

8. Ansibleによるストレージの管理

lvgモジュールは、LVMボリュームとグループを設定するために使用されます。

LVMボリュームグループを作成する

以下のプレイブックを考慮してください:

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

これは、物理エクステントサイズが32 MBの/dev/sda1パーティションの上にボリュームグループを作成します。

作成されたら、lvol モジュールを使用して、次のように論理ボリュームを作成します。

論理ボリュームを作成する

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

9. Ansibleを使用したファイルシステムの管理

ブロックデバイスにファイルシステムを作成するには、filesystemモジュールを使用してください。

ファイルシステムを作成する

以下のプレイブックは、ブロックボリュームにxfsのファイルシステムタイプを作成します。

---
    - hosts: webservers
      tasks: 

       - name: Create a filesystem
         filesystem:
         
           fstype: xfs
           dev: /dev/vg1/lvol1

ファイルシステムをマウントする

次に、以下のプレイブックに示されているように、mount モジュールを使用してブロックボリュームをマウントできます:

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted
結論

これでトピックは終了します。Ansible Playbooksの特定の組み込みモジュールによって実行できるさまざまなシステム管理タスクを取り上げてきました。

関連記事: