システム管理タスクのためのAnsibleモジュールの使用方法 - パート6
このパート6では、Ansibleシリーズの一環として、過去のトピックでいくつかのAnsibleモジュールを取り上げましたが、今回はさらに深く掘り下げ、システム管理タスクの実行に役立つ追加のモジュールを発見します。
各モジュールの基本的なアイデアを得て、特定のタスクを達成するために利用できるオプションを見ていきます。
このページでは:
- Ansibleにおけるソフトウェアパッケージとリポジトリの管理
- Ansibleを使用したサービス管理
- Ansibleを使用したファイアウォールの管理
- Ansibleを使用したファイルまたはフォルダーのアーカイブ
- Ansibleを使用してタスクをスケジュールする
- Ansibleでユーザーとグループを管理する
- Ansibleを使用してファイルとディレクトリを作成する
- Ansibleを使用したストレージ管理
- 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の特定の組み込みモジュールによって実行できるさまざまなシステム管理タスクを取り上げてきました。




