記事公開日
最終更新日
Ansibleで運用・管理の効率化を!②

みなさん、こんにちは!
システムソリューション営業本部(略称「SSS」)の杉本です。
前回はAnsibleとはそもそも何なのか?ということについて記載をしました。
今回は実際にAnsible環境の構築、簡単なコマンドの実行までをご紹介していきます。
lubuntuというあまり聞かないディストリビューションを選択しています。
弊社仮想環境ではリッチなGUIを動かせないので、軽いX Windowsシステムを採用しているディストリビューションを選択しています。(実際は筆者の趣味です。)
UbuntuでもRedHatでも大きな違いはありませんのでお好きなディストリビューションを使用してください。
事前にOSのインストールとネットワーク周りの設定でインターネットに接続できる状況を作成しておいてください。
他のアプリケーションは手順の中またはOSにアドオンされています。
インストール直後はパッケージのアップグレードを行います。
環境によりますが、SSHサーバーが入っていなければインストールします。
ansibleの実行ユーザーを作成します。ansibleユーザーを作成します。
以上で事前準備は完了です。
Pythonはデフォルトでインストールされているものですが、最近のディストリビューションはPython3がインストールされているものが多い印象です。
バージョンを確認して問題なければOKです!
Ansibleは通常/etc/ansibleディレクトリの配下に設定ファイルをまとめて管理することが推奨されています。ベストプラクティスもあるので興味のある方はこちらを参照ください。
今回はテスト環境を整えるということでansibleユーザーのHomeディレクトリに管理用のディレクトリを作成していきます。
これでテスト環境に使用するディレクトリとファイルが一通り完成しました。
次にインベントリファイルを修正します。このインベントリファイルは対象のサーバーを指定するために使用します。それ以外にも利用できますが、今回はサーバーの指定だけです。
テストの準備が整いました!
はい、失敗です。
AnsibleはSSHを使用して対象サーバーに接続をしに行くのですが、接続ユーザーはデフォルトでAnsibleコントローラー側の実行ユーザー(この場合はansibleユーザー)になります。SSHで接続するユーザーを簡単に指定する方法はいくつかあります。
今回は動作テストなので難しいことはせず、実行時のオプションで指定したいと思います。対象サーバーのユーザーはtest01です。
はい、これも失敗です。パスワードを聞かれていないので接続に失敗します。次はパスワードも入力できるオプションを追加します。
。。。Ansibleは簡単だといった。あれは嘘だ!!
冗談はさて置いて、メッセージからパスワード入力するならsshpassのプログラムを入れてほしいと書いてあります。
では、入れましょう。
再実行です。
これで対象サーバーの情報が取得できています。内容は時間のある時に読んでみてください。
ここまでで、Ansibleを使った運用・管理の自動化を行うための基盤が整いました。
テスト環境で触る分には今回紹介した手順で十分だと思います。
ただし、本番環境で使用する場合は管理対象が多くなる、認証がパスワードでは弱い等の問題が発生します。
それらのことは基本的に/etc/ansible/ansible.confの内容を変更するか各playbookまたはインベントリファイルに記述することで解消できます。
ただし、ansible.confはansibleの根本設定なので影響が全体に及びます。可能であれば他の設定ファイルで対応してansible.confの修正は最後に検討してください。
次回はplaybookを使用して対象サーバーに自動的にWebサーバーをインストールします。
※Ansibleは、米国Red Hat, Inc. の米国およびその他の国における登録商標もしくは商標です。
システムソリューション営業本部(略称「SSS」)の杉本です。
前回はAnsibleとはそもそも何なのか?ということについて記載をしました。
今回は実際にAnsible環境の構築、簡単なコマンドの実行までをご紹介していきます。
0.環境説明
今回作成する環境は以下の環境を前提としています。【環境】
基本情報 | Ansible Controller | Ansible Target |
---|---|---|
ホスト名 | master | target01 |
IPアドレス | 10.19.19.102 | 10.19.19.110 |
OS | lubuntu 20.04 LTS | lubuntu 20.04 LTS |
ansible ver. | ansible 2.9.6 | ansible 2.9.6 |
python ver. | python 3.8.2 | python 3.8.2 |
ユーザーアカウント | master/ansible | test01 |
lubuntuというあまり聞かないディストリビューションを選択しています。
弊社仮想環境ではリッチなGUIを動かせないので、軽いX Windowsシステムを採用しているディストリビューションを選択しています。(実際は筆者の趣味です。)
UbuntuでもRedHatでも大きな違いはありませんのでお好きなディストリビューションを使用してください。
事前にOSのインストールとネットワーク周りの設定でインターネットに接続できる状況を作成しておいてください。
他のアプリケーションは手順の中またはOSにアドオンされています。
1.事前準備
インストール直後はパッケージのアップグレードを行います。
$ sudo apt update $ sudo apt upgrade
環境によりますが、SSHサーバーが入っていなければインストールします。
$ sudo apt install -y openssh-server $ sudo systemctl enable ssh $ sudo systemctl restart ssh
ansibleの実行ユーザーを作成します。ansibleユーザーを作成します。
$ sudo adduser ansible $ sudo gpasswd -a ansible sudo
以上で事前準備は完了です。
2.Ansibleのインストール
いよいよAnsibleのインストールです。以下のような手順で進めていきます。①apt最新化
②Ansibleをインストールするためのリポジトリの追加
③Ansibleのインストール
apt最新化
Ansibleのインストールですのでansibleユーザーにスイッチしてから実施します。$ sudo su - ansible $ sudo apt update $ sudo apt upgrade
リポジトリの追加
Ansibleをインストールするために、1つのパッケージとAnsibleの最新版が置いてあるリポジトリを追加します。$ sudo apt install software-properties-common $ apt-add-repository --yes --update ppa:ansible/ansible
Ansibleのインストール
最後にAnsibleをインストールします。コマンドはシンプルですね。$ sudo apt install ansible
インストール確認
インストールしたAnsibleとPythonのバージョンを確認します。Pythonはデフォルトでインストールされているものですが、最近のディストリビューションはPython3がインストールされているものが多い印象です。
$ sudo apt install software-properties-common $ apt-add-repository --yes --update ppa:ansible/ansible
バージョンを確認して問題なければOKです!
3.テスト環境の整備
Ansibleは通常/etc/ansibleディレクトリの配下に設定ファイルをまとめて管理することが推奨されています。ベストプラクティスもあるので興味のある方はこちらを参照ください。
今回はテスト環境を整えるということでansibleユーザーのHomeディレクトリに管理用のディレクトリを作成していきます。
$ cd ~ $ mkdir -p practice/{inventory,{group,host}_vars,roles,playbooks} $ touch practice/{inventory/inventory.ini,group_vars/all.yml}
これでテスト環境に使用するディレクトリとファイルが一通り完成しました。
次にインベントリファイルを修正します。このインベントリファイルは対象のサーバーを指定するために使用します。それ以外にも利用できますが、今回はサーバーの指定だけです。
$ vi ~/practice/inventory/inventory.ini # Inventory.iniの内容です [practice_servers] target01 ansible_host=10.19.19.110 #Target Node
テストの準備が整いました!
4.動作確認
先ほど作成したインベントリファイルを使用して対象サーバーの情報を取得してみましょう。$ cd practice $ ansble target01 -i inventory/inventory.ini -m setup The authenticity of host '10.19.19.110 (10.19.19.110)' can't be established. ECDSA key fingerprint is SHA256:k5KfqrR/sq1rZNWIHQGqHOZKaIvgKCnuSqXFp9KQ42k. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes target01 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: Warning: Permanently added '10.19.19.110' (ECDSA) to the list of known hosts.\r\nansible@10.19.19.110: Permission denied (publickey,password).", "unreachable": true }
はい、失敗です。
AnsibleはSSHを使用して対象サーバーに接続をしに行くのですが、接続ユーザーはデフォルトでAnsibleコントローラー側の実行ユーザー(この場合はansibleユーザー)になります。SSHで接続するユーザーを簡単に指定する方法はいくつかあります。
- 実行時に「-u」オプションを使う
- インベントリファイルにユーザーを書き込む
- playbook.yamlの中で指定
今回は動作テストなので難しいことはせず、実行時のオプションで指定したいと思います。対象サーバーのユーザーはtest01です。
$ ansble target01 -i inventory/inventory.ini -m setup -u test01 target01 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh: test01@10.19.19.110: Permission denied (publickey,password).", "unreachable": true }
はい、これも失敗です。パスワードを聞かれていないので接続に失敗します。次はパスワードも入力できるオプションを追加します。
$ ansble target01 -i inventory/inventory.ini -m setup -u test01 --ask-pass --ask-become-pass SSH password: BECOME password[defaults to SSH password]: target01 | FAILED! => { "msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program" }
。。。Ansibleは簡単だといった。あれは嘘だ!!
冗談はさて置いて、メッセージからパスワード入力するならsshpassのプログラムを入れてほしいと書いてあります。
では、入れましょう。
$ sudo apt install sshpass
再実行です。
$ ansble target01 -i inventory/inventory.ini -m setup -u test01 --ask-pass --ask-become-pass SSH password: BECOME password[defaults to SSH password]: target01 | SUCCESS => { "ansible_facts": { "ansible_all_ipv4_addresses": [ "10.19.19.110" ], "ansible_all_ipv6_addresses": [ "fe80::5c3b:ff20:d642:bf84" ], "ansible_apparmor": { "status": "enabled" }, "ansible_architecture": "x86_64", "ansible_bios_date": "04/05/2016", "ansible_bios_version": "6.00", "ansible_cmdline": { "BOOT_IMAGE": "/boot/vmlinuz-5.4.0-37-generic", ~~以下省略~~
これで対象サーバーの情報が取得できています。内容は時間のある時に読んでみてください。
4.まとめ
いかがでしたでしょうか?ここまでで、Ansibleを使った運用・管理の自動化を行うための基盤が整いました。
テスト環境で触る分には今回紹介した手順で十分だと思います。
ただし、本番環境で使用する場合は管理対象が多くなる、認証がパスワードでは弱い等の問題が発生します。
それらのことは基本的に/etc/ansible/ansible.confの内容を変更するか各playbookまたはインベントリファイルに記述することで解消できます。
ただし、ansible.confはansibleの根本設定なので影響が全体に及びます。可能であれば他の設定ファイルで対応してansible.confの修正は最後に検討してください。
次回はplaybookを使用して対象サーバーに自動的にWebサーバーをインストールします。
※Ansibleは、米国Red Hat, Inc. の米国およびその他の国における登録商標もしくは商標です。