Red Hat による無料のオープンソース Python ベースのプロジェクトである Ansible は、人気のある構成管理および IT 自動化プラットフォームです。
マルチプラットフォームであり、Linux、Windows、Mac など、ほとんどの最新のオペレーティング システムで動作します。システム構成を記述するために、 YAML
またはYAML Ain't Markup Language
で書かれた宣言言語をサポートします。
Ansible は、他の最新の構成管理プラットフォームとともに、IT 自動化と業界標準に革命をもたらしました。構成管理ツールは DevOps ツールセットの一部となっており、最新の IT プロセスのライフサイクルにとって切り離せない部分となっています。これは、オンプレミス環境、ハイブリッド環境、またはクラウド環境に構築されているかどうかに関係なく、あらゆる最新のインフラストラクチャ環境に適用できます。 DevOps だけでなく、Ansible は、システム管理者が行う多くの日常タスクの自動化にも役立ちます。
Ansible を使用する利点の 1 つは、エージェントレスであり、ターゲット マシンへの SSH アクセスと、最新のオペレーティング システムのほとんどにデフォルトですでにインストールされているサポートされているバージョンの Python への SSH アクセス以外に、開始するのに多くの準備が必要ないことです。また、軽量なツールであるため、従来のシステムから革新的なシステムまで導入して使用できます。
Ansible の使用法
オーケストレーション
Ansible は、さまざまなシステム管理および導入タスクを調整するために最適なツールです。 Playbook を使用すると、異なるプロジェクト間で同じオーケストレーション ワークフローを使用できるようになり、 YAML
ベースの構成データを使用すると、インフラストラクチャを Git リポジトリまたはサポートされているバージョン管理プラットフォームに保存してバージョン管理できるようになります。
アプリケーションの展開
単純な数行のコード アプリケーションであっても、多層の重量のあるデプロイメントであっても、Ansible を使用すると、エンドツーエンドのアプリケーション デプロイメント ライフサイクルを自動化できます。
セキュリティとコンプライアンス
Ansible は、組織のガイドラインに従ってシステムが保護され、業界標準に準拠していることを確認するのにも役立ちます。数千台のサーバーにわたって実行し、監査を生成し、それらのセキュリティ ホールを修正できるため、管理者は環境を完全に制御できます。
次に、Ansible で自動化できる一般的なシステム管理タスクのいくつかを見てみましょう。
ローカルまたはリモート システムからファイルをコピーする
システム管理者は、あるディレクトリから別のディレクトリにファイルをコピーするのが一般的です。多くの場合、構成ファイルはリモート サーバーにコピーする必要があり、場合によってはファイルをあるリモートの場所から別の場所に移動する必要があります。
Ansible copy
モジュールは、Playbook でこれらのタスクを実行するのに役立ちます。
システム管理者にとって、管理対象サーバーのステータスを把握し、組織のポリシーに従って事前定義されたアクションを実行することは日常的なタスクです。そのようなタスクの 1 つは、サーバーの稼働時間を知ることです。 Ansible を使用すると、稼働時間の値を簡単に取得して一緒に出力できます。 copy
モジュールを使用してntp
設定をローカル サーバーからリモート サーバーにコピーする例を以下に示します。
---
- hosts: all
gather_facts: no
become: yes
tasks:
- name: Copy a new ntp configuration file and back up the original, if it differs
copy:
src: ./ntp.conf
dest: /etc/ntp.conf
owner: root
group: root
mode: '0644'
backup: yes
追加の cron ジョブを構成する
定期的なタスクを実行するためにスケジュールされたジョブを設定することは、サーバーの管理の一部です。自動バックアップ、パッチ適用、監査などを 1 日または月の特定の時間帯に自動的にスケジュールし、生産的な時間を利用できるようにすることができます。
cron
、スケジュール設定をサポートする Linux のツールの 1 つであり、Ansible はこれらのジョブの追加または変更に役立ちます。例として、以下のプレイブックは、Ansible を使用して、一部またはすべてのサーバー上でroot
としてrsync
ジョブを簡単に設定する方法を示しています。
---
- hosts: all
gather_facts: no
become: yes
tasks:
- name: Deploy cron job
cron:
name: "Set rsync job"
user: root
minute: "5"
hour: "4"
job: "rsync -avz /path/to/folder1 /path/to/folder1 2>&1"
ディスクとファイルシステムを管理する
Ansible を使用すると、ディスク、パーティション レイアウト、ファイル システム、Linux サーバー上の/etc/fstab
などのマウントを管理できます。別の Ansible モジュールによりこれが可能になります。以下は、 100GB
ディスク上にパーティションを作成し、 ext4
ファイルシステムでフォーマットし、パーティションをマウントするための新しいディレクトリを作成し、最後に指定されたディレクトリにマウントする例です。 /etc/fstab
内のエントリは、モジュール オプションに応じて一時的または永続的なマウントによっても作成されます。
---
- hosts: all
gather_facts: no
become: yes
tasks:
- name: Create a partition
parted:
device: /dev/sdb
number: 1
part_end: "100%"
state: present
- name: Format new partition
filesystem:
fstype: ext4
dev: /dev/sdb1
- name: Create mount directory
file:
path: /data
state: directory
- name: Mount partition
mount:
path: /data
src: /dev/sdb1
fstype: ext4
state: mounted
サーバーログを収集する
ログを便利な場所に保管することは、セキュリティ、監査、分析にとって不可欠な場合があります。 Ansible を使用すると、エンタープライズ環境内のさまざまなサーバーからログを収集し、定義した場所に簡単に保存できます。これを実現するためのプレイブックは次のとおりです。
---
- hosts: all
gather_facts: no
become: yes
tasks:
- name: Find logs
find:
paths: /var/log/
patterns: '*.log'
recurse: yes
register: _logs
- name: Fetch logs
fetch:
src: "{{ item.path }}"
dest: /tmp/logs
with_items: "{{ _logs.files }}"
パッケージとソフトウェアのインストールまたは削除
多くの場合、パッケージはユーザーの要求に応じて、または初期サーバー構築の一部としてインストールする必要があります。また、不要になったパッケージや重大なバグがある特定のパッケージを削除する必要がある場合もあります。Ansible を使用すると、各サーバーに移動して手動コマンドを実行する手間をかけずに、パッケージを簡単にインストールまたは削除できます。ここでは、Ubuntu サーバーと RHEL/CentOS ベースの Linux サーバーに対してそれぞれ 1 つのパッケージをインストールおよび削除する例を示します。
---
- hosts: ubuntu
gather_facts: no
tasks:
- name: Install lsof utility
apt:
pkg: lsof
state: latest
sudo: yes
- name: Remove ARP Scan utility
apt:
pkg: arp-scan
state: absent
sudo: yes
---
- hosts: centos
gather_facts: no
tasks:
- name: Install lsof utility
yum:
pkg: lsof
state: latest
sudo: yes
- name: Remove ARP Scan utility
yum:
pkg: arp-scan
state: absent
sudo: yes
ユーザーの管理
ユーザーとグループは、Unix/Linux ベースのシステムがアクセスと権限を管理するための基本構造を形成します。大規模な組織では、環境をサポートするための自動化にもかかわらず、ユーザーとグループの管理が大きな課題になる可能性があります。
Ansible を使用すると、システム管理者は、OS でサポートされているさまざまな機能を使用してユーザーとグループを作成、変更、削除するための優れたツールを利用できます。
以下は、Ansible を使用したユーザーとグループの作成と削除を示す簡単な例です。このプレイブックを実行すると、ターゲット サーバーには指定された GID でgroupA
とgroupB
が作成され、 user1
存在する場合は削除されます。シェルを持たない新しいユーザーは、指定された UID、割り当てられたグループ、およびロックされたパスワードを持つuser2
として作成されます。
---
- hosts: all
gather_facts: no
become: yes
tasks:
- group:
gid: 12310
name: groupA
state: present
- group:
gid: 12311
name: groupB
state: present
- user:
name: user1
state: absent
- user:
name: user2
uid: 12427
shell: /bin/false
password_lock: yes
groups: groupA, groupB
サービスの管理
サービスはバックグラウンドで実行され、SSH 接続を提供するsshd
などのサービスを提供するプロセス デーモンです。Ansible を使用すると、システム サービスやユーザー サービスの開始、停止、再起動などを管理できます。これを示すサンプル プレイブックは次のとおりです。
---
- hosts: all
gather_facts: no
become: yes
tasks:
- name: Restart ssh daemon
service:
name: ssh
state: restarted
- name: Restart sssd daemon
service:
name: sssd
state: stopped
- name: Restart httpd daemon
service:
name: httpd
state: started
上記の例では、次に SSSD サービスを停止しながら、SSH サービスが再起動されます。 httpd
デーモンは最後のほうで開始されます。 Ansible は冪等であるため、既に開始または停止されているサービスは変更されませんが、再起動すると常にサービスの状態が変化します。 Linux ディストリビューションが異なると、 ssh
やsshd
などの同じサービスでも別の名前が使用されるため、サービス名を必ず確認してください。
概要 👨💻
Ansible を使用すると、繰り返し行われる時間のかかるタスクを自動化された方法で実行できるようになり、人的エラーと労力が削減されるため、システム管理者の作業が楽になります。さらに、構成データを Git などの中央コード リポジトリに保存できるようになり、複数のユーザーが協力して各アクティビティを確認できるようになります。
Ansible とその広範なモジュール セットの詳細については、そのドキュメントを参照してください。