Ubuntu18.04にAnsibleをインストールして構成する方法
序章
構成管理システムは、管理者および運用チームのために、多数のサーバーを制御するプロセスを合理化するように設計されています。 これらを使用すると、1つの中央の場所から自動化された方法で多くの異なるシステムを制御できます。
Linuxシステムで利用できるChefやPuppetなど、多くの一般的な構成管理ツールがありますが、これらは多くの場合、多くの人が望んでいる、または必要としているよりも複雑です。 Ansible は、SSHを使用して自動化タスクを実行し、YAMLファイルを使用してプロビジョニングの詳細を定義する、ノードに特別なソフトウェアをインストールする必要がないシンプルなアーキテクチャを提供するため、これらのオプションの優れた代替手段です。
このガイドでは、Ubuntu 18.04サーバーにAnsibleをインストールする方法について説明し、このソフトウェアの使用方法の基本について説明します。
Ansibleはどのように機能しますか?
Ansibleは、管理対象ノードと呼ばれるクライアントマシンを、Ansibleコンポーネントがインストールおよび構成されているコンピューターから構成することで機能します。このコンピューターは、Ansible制御ノードと呼ばれます。
通常のSSHチャネルを介して通信し、リモートシステムから情報を取得し、コマンドを発行し、ファイルをコピーします。 このため、Ansibleシステムでは、クライアントコンピューターに追加のソフトウェアをインストールする必要はありません。
これは、Ansibleがサーバーの管理を簡素化する1つの方法です。 SSHポートが公開されているサーバーは、ライフサイクルのどの段階にあるかに関係なく、Ansibleの構成の傘下に置くことができます。 つまり、SSHを介して管理できるすべてのコンピューターは、Ansibleを介して管理することもできます。
Ansibleはモジュラーアプローチを採用しており、特定のシナリオに対処するためにメインシステムの機能を拡張できます。 モジュールは任意の言語で記述でき、標準のJSONで通信できます。
構成ファイルは、その表現力と一般的なマークアップ言語との類似性から、主にYAMLデータシリアル化形式で記述されています。 Ansibleは、コマンドラインツールまたはPlaybookと呼ばれるその構成スクリプトを介してホストと対話できます。
前提条件
このチュートリアルに従うには、次のものが必要です。
-
1つのAnsibleコントロールノード:Ansibleコントロールノードは、SSH経由でAnsibleホストに接続して制御するために使用するマシンです。 Ansibleコントロールノードは、ローカルマシンまたはAnsibleの実行専用のサーバーのいずれかですが、このガイドでは、コントロールノードがUbuntu18.04システムであると想定しています。 制御ノードに次のものがあることを確認してください。
- sudo権限を持つroot以外のユーザー。 これを設定するには、 Ubuntu18.04の初期サーバーセットアップガイドのステップ2および3に従うことができます。 ただし、Ansibleコントロールノードとしてリモートサーバーを使用している場合は、このガイドのすべての手順に従う必要があることに注意してください。 そうすることで、サーバー上にファイアウォールを構成します。
ufw
root以外のユーザープロファイルへの外部アクセスを有効にします。どちらもリモートサーバーを安全に保つのに役立ちます。 - このユーザーに関連付けられているSSHキーペア。 これを設定するには、 Ubuntu18.04でSSHキーを設定する方法に関するガイドのステップ1に従うことができます。
- sudo権限を持つroot以外のユーザー。 これを設定するには、 Ubuntu18.04の初期サーバーセットアップガイドのステップ2および3に従うことができます。 ただし、Ansibleコントロールノードとしてリモートサーバーを使用している場合は、このガイドのすべての手順に従う必要があることに注意してください。 そうすることで、サーバー上にファイアウォールを構成します。
-
1つ以上のAnsibleホスト:Ansibleホストは、Ansibleコントロールノードが自動化するように構成されている任意のマシンです。 このガイドでは、AnsibleホストがリモートUbuntu18.04サーバーであることを前提としています。 各Ansibleホストに次のものがあることを確認してください。
- AnsibleコントロールノードのSSH公開鍵がに追加されました
authorized_keys
システムユーザーの。 このユーザーは、rootまたはsudo権限を持つ通常のユーザーのいずれかです。 これを設定するには、 Ubuntu18.04でSSHキーを設定する方法のステップ2に従うことができます。
- AnsibleコントロールノードのSSH公開鍵がに追加されました
ステップ1—Ansibleをインストールする
サーバーインフラストラクチャを管理する手段としてAnsibleの使用を開始するには、Ansibleコントロールノードとして機能するマシンにAnsibleソフトウェアをインストールする必要があります。
コントロールノードから次のコマンドを実行して、システムのソースのリストに公式プロジェクトのPPA(パーソナルパッケージアーカイブ)を含めます。
- sudo apt-add-repository ppa:ansible/ansible
プレス ENTER
PPAの追加を受け入れるように求められたとき。
次に、システムのパッケージインデックスを更新して、新しく追加されたPPAで使用可能なパッケージを認識できるようにします。
- sudo apt update
このアップデートに続いて、Ansibleソフトウェアを次のコマンドでインストールできます。
- sudo apt install ansible
これで、Ansibleコントロールノードに、ホストの管理に必要なすべてのソフトウェアが含まれるようになりました。 次に、ホストを制御できるように、ホストを制御ノードのインベントリファイルに追加する方法について説明します。
ステップ2—インベントリファイルの設定
インベントリファイルには、Ansibleで管理するホストに関する情報が含まれています。 インベントリファイルには1台から数百台のサーバーを含めることができ、ホストはグループとサブグループに編成できます。 インベントリファイルは、プレイブックやテンプレート内で使用するために、特定のホストまたはグループに対してのみ有効な変数を設定するためにもよく使用されます。 一部の変数は、プレイブックの実行方法にも影響を与える可能性があります。 ansible_python_interpreter
すぐに表示される変数。
デフォルトのAnsibleインベントリの内容を編集するには、 /etc/ansible/hosts
Ansibleコントロールノードで、選択したテキストエディタを使用してファイルを作成します。
- sudo nano /etc/ansible/hosts
注:一部のAnsibleインストールでは、デフォルトのインベントリファイルが作成されません。 ファイルがシステムに存在しない場合は、次の場所で新しいファイルを作成できます。 /etc/ansible/hosts
または、を使用してカスタムインベントリパスを提供します -i
コマンドとプレイブックを実行するときのパラメータ。
Ansibleインストールによって提供されるデフォルトのインベントリファイルには、インベントリを設定するための参照として使用できるいくつかの例が含まれています。 次の例では、 [servers]
3つの異なるサーバーがあり、それぞれがカスタムエイリアス server1 、 server2 、およびserver3で識別されます。 強調表示されたIPをAnsibleホストのIPアドレスに置き換えてください。
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
The all:vars
サブグループは ansible_python_interpreter
このインベントリに含まれるすべてのホストに有効なホストパラメータ。 このパラメータは、リモートサーバーが /usr/bin/python3
代わりにPython3実行可能ファイル /usr/bin/python
(Python 2.7)、これは最近のUbuntuバージョンにはありません。
終了したら、を押してファイルを保存して閉じます CTRL+X
それから Y
と ENTER
変更を確認します。
在庫を確認したいときはいつでも、以下を実行できます。
- ansible-inventory --list -y
これと同様の出力が表示されますが、インベントリファイルで定義されている独自のサーバーインフラストラクチャが含まれています。
Outputall:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
インベントリファイルを構成したので、Ansibleホストへの接続をテストするために必要なものがすべて揃っています。
ステップ3—接続のテスト
サーバーを含めるようにインベントリファイルを設定したら、Ansibleがこれらのサーバーに接続してSSH経由でコマンドを実行できるかどうかを確認します。
このガイドでは、Ubuntu root アカウントを使用します。これは、通常、新しく作成されたサーバーでデフォルトで使用できる唯一のアカウントであるためです。 Ansibleホストで既に通常のsudoユーザーが作成されている場合は、代わりにそのアカウントを使用することをお勧めします。
あなたは使用することができます -u
リモートシステムユーザーを指定する引数。 提供されていない場合、Ansibleはコントロールノードで現在のシステムユーザーとして接続を試みます。
ローカルマシンまたはAnsibleコントロールノードから、次のコマンドを実行します。
- ansible all -m ping -u root
このコマンドは、Ansibleの組み込みの pingモジュールを使用して、 root として接続し、デフォルトのインベントリからすべてのノードで接続テストを実行します。 The ping
モジュールはテストします:
- ホストにアクセスできる場合。
- 有効なSSHクレデンシャルがある場合。
- ホストがPythonを使用してAnsibleモジュールを実行できるかどうか。
次のような出力が得られるはずです。
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
SSH経由でこれらのサーバーに接続するのが初めての場合は、Ansible経由で接続しているホストの信頼性を確認するように求められます。 プロンプトが表示されたら、次のように入力します yes
そしてヒット ENTER
確認するために。
あなたが得ると "pong"
ホストから返信します。これは、そのサーバーでAnsibleコマンドとプレイブックを実行する準備ができていることを意味します。
注:サーバーから正常な応答を返すことができない場合は、 Ansibleチートシートガイドで、さまざまな接続オプションを使用してAnsibleコマンドを実行する方法の詳細を確認してください。
ステップ4—アドホックコマンドの実行(オプション)
Ansibleコントロールノードがホストと通信できることを確認したら、サーバーでアドホックコマンドとプレイブックの実行を開始できます。
SSH経由でリモートサーバーで通常実行するコマンドは、インベントリファイルで指定されたサーバーでAnsibleを使用して実行できます。 例として、次の方法ですべてのサーバーのディスク使用量を確認できます。
- ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
強調表示されたコマンド df -h
任意のコマンドに置き換えることができます。
以前に行ったのと同様に、アドホックコマンドを介してAnsibleモジュールを実行することもできます。 ping
接続をテストするためのモジュール。 たとえば、次のように使用できます apt
最新バージョンをインストールするモジュール vim
インベントリ内のすべてのサーバー:
- ansible all -m apt -a "name=vim state=latest" -u root
Ansibleコマンドを実行するときに、個々のホストだけでなく、グループやサブグループもターゲットにすることができます。 たとえば、これはあなたがチェックする方法です uptime
のすべてのホストの servers
グループ:
- ansible servers -a "uptime" -u root
複数のホストをコロンで区切ることで指定できます。
- ansible server1:server2 -m ping -u root
プレイブックを実行してサーバーのセットアップを自動化する方法など、Ansibleの使用方法の詳細については、Ansibleリファレンスガイドを確認してください。
結論
このガイドでは、Ansibleをインストールし、Ansibleコントロールノードからアドホックコマンドを実行するためのインベントリファイルを設定しました。
中央のAnsibleコントローラーマシンからインフラストラクチャに接続して制御できることを確認したら、それらのホストで任意のコマンドまたはプレイブックを実行できます。 新しいサーバーの場合、初期サーバーセットアップコミュニティプレイブックが出発点として適しています。 また、ガイド Configuration Management 101:AnsiblePlaybooksを使用して独自のプレイブックを作成する方法を学ぶこともできます。
Ansibleの使用方法の詳細については、Ansibleチートシートガイドをご覧ください。