KAROUSHI -Japanese Engineer Blog-

コボルドからドラゴンへ -Kobold to Dragon-

システムエンジニアのブログです。サイト名は「雑魚キャラからボスキャラへレベルアップしたい!」という思いを込めて命名しました。自分はやっとリザードマンになったくらいです。

Amazon LinuxでAnsibleを簡単インストール~ping送信まで

今までLinux構築手順書を書いて、そこからコピー&ペーストして実行。。。というのを繰り返していました。それがChefやAnsibleなどの構成管理ツールの登場により従来のテキストエディタやエクセルで手順書を作成するというものから、構成管理ツールで手順を作成、実行。完成したらあとは配布すれば全く同じ環境ができるので楽です。
日本では多少歴史の長いChefが圧倒的シェアを誇っているようですが、使っている技術者に聞くとかなり学習コストが高いとのこと。どちらがよいか調べてみると後発のAnsibleがChefの悪いところが改善されてだいぶ使いやすくなり、学習コストも低いとこのことなので試しに使ってみました。
今回はAWS EC2のAmazon Linux上でAnsibleをインストールし、簡単なサンプルを動作させるところまで説明します。
これを読んでAnsibleに興味を持ってもったらぜひ現場で使いましょう!そして面倒で手間のかかる手順書作成やレビュー作業を止めて、作業時間を減らして少しでも早く帰りましょう!

目次

Ansibleをインストールする。

Amazon Linuxにはpipが初めから入っているのでそれでインストールします。
Amazon Linux以外の自前の環境でpipが入ってない場合は、easy_installでpipを入れてください。(え?easy_installも入ってないだって!?)

$ sudo pip install ansible

一応バージョンを確認してみると、2.2.0.0が入ってる模様。

$ ansible --version
ansible 2.2.0.0
  config file = 
  configured module search path = Default w/o overrides

ちゃんと応答が返ってきました。これでインストール完了です。
わーすっごい簡単!

localhostや他サーバへpingを打つ!

まずは初歩です。自分自身にpingを打ってみましょう。

$ ansible localhost -m ping
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

WARNINGが出ていますが最初は気にしないでください。
今回はSUCCESSの文字が出ているのでlocalhost(自分自身)に対してpingが通っていることが分かります。

次はでたらめなIPに対してpingが通るか確認してみましょう。すると。。。

$ ansible 10.20.30.40 -m ping
 [WARNING]: Host file not found: /etc/ansible/hosts

 [WARNING]: provided hosts list is empty, only localhost is available

 [WARNING]: No hosts matched, nothing to do

とWARNINGが表示され、"ホスト名がマッチしなかったから何もしないよ"と表示されてしまいます。
えーじゃぁ自分以外のところにはどうやったらpingを送信できるんだ!
答えは/etc/ansible/hostsに書きます。
ですが現時点で存在しないので、まずはディレクトリとファイルを作成します。

$ sudo mkdir -p /etc/ansible/
$ sudo vim /etc/ansible/hosts
[test]
172.10.1.1

わざと存在しないサーバのIPアドレス(172.10.1.1)にしました。
ではtestに対してpingを送信してみましょう。

$ ansible test -m ping                                                                                                  172.10.1.1 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: connect to host 172.10.1.1 port 22: Connection timed out\r\n", 
    "unreachable": true
}

ちゃんと172.10.1.1にpingが送信されています。ただ、存在しないサーバなので"UNREACHABLE"(未到達)と表示されました。これは想定通りの動作なので問題ありません。
もしも複数サーバにpingを送信したい場合は先ほどのhostファイルにIPアドレスを追加すればOKです。

【例1】
[test]
172.10.1.1
172.10.1.2

【例2】
[test1]
172.10.1.1
172.10.1.2

[test2]
172.10.2.1

まとめ

本日やったことのまとめです。

  1. pipでansibleをインストールする
  2. ansible <ホスト名> -m pingpingを送信する
  3. ホスト名は/etc/ansible/hostsに記載する。