1. システムとオフィスの融合
  2. media
  3. 仕事効率化
  4. Ansibleで運用・管理の効率化を!②

QESブログ

Ansibleで運用・管理の効率化を!②

  • LINEで送る
  • このエントリーをはてなブックマークに追加
みなさん、こんにちは!
システムソリューション営業本部(略称「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. の米国およびその他の国における登録商標もしくは商標です。
  • LINEで送る
  • このエントリーをはてなブックマークに追加

お気軽にお問い合わせください。

ページのトップへ