運用時の Ansible の使い方(一例)
- 2015.12.11
- インフラ
こんにちは。15年度入社の新卒、大澤です。
私はインフラエンジニアとして Aiming に入社し、ほぼ毎日新しい技術やサービスに触れています( Git, Jenkins, Ansible, などなど… )。その中でも今回は、私が最近覚えた運用時に使う Ansible の一例を紹介したいと思います。
Ansible shell module を用いて、複数サーバへコマンドを実行
同じコマンドを実行したいサーバが複数台ある場合( Slave DB2台に “show slave status\G” とか、Web Server 5台のアクセスログを見るとか…)、私のような未熟者だと「一台ずつ入ってコマンドを実行しよう!」と考えがちですが、そのやり方だと非効率だと叱咤を受けます。そこで、 Ansible の shell module を使用します。
例えば、下記のような inventory file を用意して…
[web-server] webserver01 webserver02 webserver03 [slave-server] slave01 slave02
以下のコマンドを実行します。
ansible -i hosts web-server -m shell -s -a "tail -2 access.log" | less
(オプションの説明)
-i <inventory_file> <group>: inventory file を指定する。group 名を指定しないとエラー。
-m <module>: 実行する module を指定する。
-s: sudo で実行する。
-a <command>: 実行する command を書く。
すると、 web-server group に書かれている server(webserver01~ 03) 全てに “tail -2 access.log” が実行され、サーバごとの結果が less に渡されて表示されます。上記のコマンドだと、access.log の中身が末尾2行ずつ表示されます。結果をパイプで渡すことも出来ますし、実行するコマンド内でもパイプは使用できます。
↓ access.log を見ている様子(見えてはいけない部分は隠しています。)
もちろん、for 文でも同じことができますが、inventory file の group 分けが便利だと感じます(上記の例でいうと、 web-server と slave-server )。-i hosts all とすると、inventory file に書かれている全てのサーバに実行されます(重複はしない)。もちろん1つのサーバを指定することもできます。
以上、私が最近覚えた運用時の Ansible の使い方の一例でした。
来年の新卒にきちんと教えられるよう今後も Aiming で頑張りたいと思います。
-
前の記事
「関西ゲーム勉強会 2015冬」に参加させて頂きました! 2015.12.08
-
次の記事
jenkins と ghprb,github commit status を使った仕事が楽になる 10 の設定 2015.12.22