エンジニアいちねんせい

「エンジニアはブログを書け」という先人の教えにならってブログをはじめてみたよ

Ansible触ってみた(初期設定からansible-playbook実行まで)

参考書片手にAnsibleを触ってみたので備忘録を書きます。参考にしたのはこの本です。

book.impress.co.jp

 Ansibleとは?

Ansibleはこの頃はやりの構成管理ツール。サーバの初期設定とか運用時の自動化が捗るらしいです。特徴としてはターゲットノード(管理される側)はPythonが導入されていれば特別な設定が不要なので手軽であること、設定ファイルの書式(YAML)の可読性が高く非プログラマでも管理が容易であることが挙げられるようです。
また、Ansibleにおいては冪等性(べきとうせい)の担保が重要なキーワードの様子。冪等性は何度実行しても同じ結果を得ること。Ansibleの設定を変更しない限り、何度実行しても同じ状態を保つようにすることが重要で、冪等性のないものはAnsibleで行うべきではない、という感じ。なるほど。。(腹に落ちてない感) 

さて、今回使用する環境はこんな感じです。
・コントロールノード(管理する側):MACを使用
・ターゲットノード(管理される側):Linux(Raspbian)
両方とも同一ネットワークに接続、事前にMAC側で事前に公開鍵を作ってます。公開鍵認証は前回の記事に書いたのでそちらを参考にしていただければ。

Ansibleの導入(MAC)

まずコントロールノード側にAnsibleを導入します。
$brew update
$brew install ansible
Homebrewからansibleをインストール。

$touch $HOME/.ansible.cfg
Ansibleの設定ファイル作成。設定をここに書き足したり足さなかったり。/etc/ansible/ansible/cfgとかでも可だけどユーザーごとに設定変えたい時もあるだろうということでホームディレクトリに作成が良いらしい。

Ansible用ユーザー作成・公開鍵認証

$sudo useradd -m ansible
$sudo passwd ansible
$mkdir /home/ansible/.ssh
$touch /home/ansible/.ssh/authorized_keys

次はLinux側でAnsible用のユーザーを作成していきます。今回の環境(Raspbian)はデフォルトでPythonが入っているので初期設定は管理ユーザー作るくらい。

$ssh-copy-id  -i $HOME/.ssh/id_rsa.pub ansible@XXX.XXX.XXX.XX
そしてMAC側で上のコマンドを実行して公開鍵を渡す。前回のとは違う受け渡し方にしてます。直接authorized_keysに追加してくれるのでこっちのが楽ですね。
※この時はパスワード認証をオンにしておく。permission deniedする時は鍵を作り直して試す、authorized_keysのパーミッションを確認して一時的に666にしちゃう、とか実施。

$sudo chmod 700 /home/ansible/.ssh
$sudo chmod 600 /home/ansible/.ssh/authorized_keys
.sshとauthorized_keysのパーミッションを修正して

$ssh ansible@XXX.XXX.XXX.XX
MAC側でパスワード聞かれずにSSH接続できたらOK.これで下準備は完了!

インベントリの作成

Ansibleの参照ファイルその1、対象を指定する方のファイル(インベントリ)を作成します。
touch $HOME/test_inventory.ini
中身は以下の書式でグループ名とIPアドレスを記載。シンプル。

[servers]
XXX.XXX.XXX.XX

プレイブックの作成

ファイルその2、実行内容を記載する方のファイル(プレイブック)です。
touch $HOME/test_playbook.yml
中身はこれを記載。ansibleのホームディレクトリにtestファイルを作成する内容。

- hosts: servers
  user: ansible
  tasks:
  - name: test
    file:
       path: /home/ansible/test
       state: touch
       owner: ansible
       mode: 0777

Ansible-playbookの実行

前段で作成した2つのファイルを参照してansible-playbookコマンドを実行していきます。
$ansible-playbook -i $HOME/test_inventory.ini $HOME/test.yml --check

まずは--checkオプションを入れてチェック。構文エラーとかが出たら修正。問題なければ続行。
$ansible-playbook -i $HOME/test_inventory.ini $HOME/test.yml
--checkなしで実行。これでエラーが発生しなければファイルが作成されます。 

おわりに

本当に触りだけですがとりあえず動かしてみました。これだけだと正直でっていうなのでもうちょい触って自動化っぽいとこまでやってみたいなぁ。