不思議の国のAnsible – 第2話


 
logo


不思議の国のAnsible1

第2話 忠実な兵士たち

 

前回より続く

 

はじめての Ansible コマンド


アリスは レベルが上がった!

コマンド ansible を手に入れた!
コマンド ansible-doc を手に入れた!
モジュール ping をおぼえた!

icon_bob01おめでとうアリス!
新しいコマンドとモジュールを手に入れたみたいだね。
icon_alice01コマンドは、OS から実行可能なコマンドという意味ですよね?
モジュールっていうのは、コマンドとは違うんですか?
icon_bob01モジュールっていうのは、Ansible の言葉なんだけど
管理対象サーバ上でどんな仕事をするのか、その命令の種類だと考えればいい。

Ansible では標準で 200以上のモジュールが用意されているし、
必要であれば2自由に拡張することもできる。

icon_alice01よく使う手順のパターンがまとまっている感じですかね。
icon_bob01その通り。ではまず手始めに ping というモジュールを使ってみよう。
icon_alice01ネットワークコマンドの ping とは別物なんですね。
icon_bob01うん、これはネットワークの疎通だけではなくて、Ansible のサービス階層で
対象サーバが利用可能な状態にあるかどうかをチェックできるんだ。
icon_alice01使い方を教えてください!
icon_bob01ansible というコマンドで、実際に管理対象サーバに命令を送ることができる。
書式は ansible 対象サーバのIPアドレス -m ping だよ。

アリスは、この不思議な世界でコマンドを頭に思い浮かべる。
するとどこからともなく奇妙な兵士が現れた。トランプの胴体にハート型の槍を携えている。

icon_alice01コマンド実行!

アリスがコマンドを唱えると、トランプ兵はそそくさとどこかへ帰ってしまった。

icon_alice01あれ? なんだかうまくいっていないみたいです。
icon_bob01あ、そうだった。Ansible では安全のため、あらかじめ指定したサーバ以外には
接続しないようになっている。
それを管理しているのが /etc/ansible/hosts というファイル3なんだけど、
このように、接続先の 192.168.100.12 という1行に書き換えてごらん。

元々書かれている内容は、全部削除して構わないよ。

icon_alice01できました。それでは気を取り直して……

またまた、どこかからトランプ兵が現れる。
今度は管理対象サーバへ繋がる扉の前4まで一目散へ駆け出していった。
ところが押しても引いてもドアが開かず、結局諦めて帰っていった。

icon_alice01あらら、まだダメみたいですね。
icon_bob01今度は SSH の認証に失敗したようだ。
君の秘密鍵は、実はココ (~/.ssh/alice.pem) に隠してある。
それを指定してみよう。
ansible コマンドに –private-key というオプションを付け加えるよ。

三たび現れたトランプ兵は、今度はアリスの目の前に駆けつける。
アリスがトランプ兵に扉の鍵を渡すと、うやうやしく敬礼して扉のもとへ。
今回は無事、扉を開けられたようだ。
程なく戻ってきたトランプ兵はアリスの元へ駆け寄り、「pong」と叫んで報告する。

icon_alice01うまくいきました!
icon_bob01Ansible の出力は、だいたいこんな感じになる。
FAILED の部分が success に変わって、付随する情報が出力されているね。

ちなみに、毎回秘密鍵を指定するのが面倒なら、こんな風に ssh-agent に登録しておくといいよ。

icon_alice01こっちのほうが後々楽になりそうです。
icon_bob01それと、IPアドレスの代わりに all と指定すれば
/etc/ansible/hosts ファイルに書かれた全てのサーバに対して
処理が実行される。
今はまだ管理対象サーバが1つしかないから、挙動は変わらないけどね。

icon_alice01all ですね。覚えておきます。

ドキュメントの参照

 

icon_alice01ところで、ansible-doc ってコマンドもありましたけど、使ってみていいですか?
icon_bob01もちろんだよ!
これはヘルプ用のコマンドで、ansible-doc モジュール名 と実行すれば説明や
使用例をすぐに参照できる。

icon_alice01英語ですけど、なんとなくわかるような、わからないような……
でも使用例が載っているのはありがたいですね。
モジュールの使い方を忘れてしまった時なんかに重宝しそうです。
icon_bob01もちろん、Ansible 公式ドキュメント も素晴らしく充実していて使いやすいよ。

さまざまな実行オプション

 

icon_bob01ansible コマンドの方にもまだまだ色んなオプションがあって……
そうだな、例えば-a オプションを使えば、管理されるサーバ側で
好きなコマンドを実行することができる。

icon_bob01--sudo オプションを使えば、管理対象サーバで root 権限が必要な作業もお手のものさ。

icon_alice01コマンド一つでいろんな事ができるんですね。すごい!
icon_bob01まだまだ、こんなのは序の口。でも雰囲気は掴めたんじゃないかな。
icon_alice01はい。おかげさまで。
私が指示したとおりに、忠実に働いてくれるんですね。
icon_bob01そこが Ansible を使う価値さ。
icon_alice01でもこうやってコマンドを実行できるのは確かに便利ですけど、
手で作業するのとあんまり変わらないような気もします……
icon_bob01うん、実はサーバの構築や運用にあたって ansible コマンドを直接実行
する場面はほとんどない。
Ansible では あるべき状態をファイルに記述して、それを実行するという
スタイルが普通なんだ。

それは、この世界では playbook と呼ばれている。
少し休憩したら、次はその話をしようか。

 

次回へつづく

 
最後までお読みいただき、どうもありがとうございました。


  1. 画像素材 http://kage-design.com/wp/ []
  2. ほとんどの場合は独自のモジュールを作らなくても事足りる []
  3. 正確に言えば、デフォルトの参照先の1つ []
  4. 第1章を参照 []

不思議の国のAnsible – 第1話


DSS技術ブログへようこそ!

突然ですが、みなさんは Ansible (アンシブル) という構成管理ツールをご存知でしょうか?
これから何回かに分けて1 Ansible の紹介記事を書いていきたいと思います。

 

新しいツールについて学ぶとき、実際に手を動かすことは理解の助けになります。

この連載では、主に構成管理ツールや Ansible をまだ使ったことのない方たちに向けて
ストーリーチュートリアル で追体験ができるような内容をお届けすることを
目指しています。

今回はその一回目。いわゆるイントロダクションです。

 

 

logo


不思議の国のAnsible2

第1話 インフラの落とし穴にはまって

 

なぜ Ansible を使うのか

 

都内某所のWeb系企業、オフィスの片隅で REALFORCE3 の静電容量無接点方式キーボードを
小気味よく奏でて複数のターミナルを縦横に操り Linux サーバ4を管理している彼女の名は
有渋 瑠子(ありしぶ るこ)。 小さい頃からあだ名はずっとアリスなんだとか。

社会人2年目の彼女は、インフラエンジニアとしてシステムの安定稼働や新技術習得のために
日夜奮闘している。今流行の『インフラ女子』だ。

そんな彼女も今日は休日。
昼下がり、陽気に誘われ眠りに落ちてしまった彼女は不思議な夢を見る。
物語は、その夢の中の奇妙な出会いで幕を開ける。

 

icon_alice_01
なんだか、すごい所に来てしまったのね……

彼女がそう呟くのも無理はない。
まるでどこか別の惑星にいるかのような錯覚にアリスは捕らわれていた。

地平線の彼方まで果てなく続く荒野。土の匂い。
疲れきって小さなオアシスで佇んでいると、草むらから時折ニシキヘビが顔を出す。

目に映る風景が自分の空虚な心を映し出しているようにも感じて、一抹の寂しさが不意に彼女を包む。

icon_alice_01
ここにいるのは私だけなのかしら。

そう思った矢先、背後から人の声が聞こえた。

icon_bob_00
ようこそ、アリス!
Infrastructure as Code (インフラストラクチャー・アズ・コード) の世界へ!

アリスはびっくりして振り返る。
するとそこにはチェック柄のベストを着飾った一匹のウサギの姿があった。

icon_alice_01
ひょっとして、今しゃべったのは、あなた?

アリスはウサギに向かって話しかけた。

icon_bob_02
……ここは、君がつくる世界。

ウサギは構わず語り続ける。
アリスの予想が確信に変わる。

icon_bob_02
この世界は、君の言葉でできている。
君が望むものは、全て君自身で手に入れることができる。
icon_alice_01
……ねぇねぇ、ウサギさん? ここはどこなのかしら?
icon_bob_02
コマンドを……コマンドを強く念じればいい。

『コマンド』。そう言われたアリスは、無意識のうちに使い慣れている Linuxコマンドをいくつか
思い浮かべた。

icon_alice_01
w……uname -a……ps aux……pwd……

すると、アリスの脳裏に矢継ぎ早に情報が流れ込んでくる。
アリスは今自分が置かれている状況を悟った。

icon_alice_01
ひょっとして、ここはサーバの中?
icon_bob_02
ご名答。僕の名前はわかる?
icon_alice_01えっと、こういう時はwhoコマンドを使って……あ、出てきた。

bob     pts/0     2014-05-15 01:23 (1.1.1.1)……
もしかすると……ボブ……さん?

icon_bob_01素晴らしい!
まあ本名はベキトーセイ・オジサン・ボブっていうんだけど
略してボブ(BOB)で構わない。
icon_alice_01
ベキトセイ? 変わったお名前ね……
私は有渋です。よろしくお願いします。
icon_bob_01
こちらこそ。よろしく。

そう言ってボブはペコリと頭を下げた。

icon_bob_01
ところで、さっきまでなんだか浮かない顔をしてたよね?
icon_alice_01
えっ!? そ、そうですか?
icon_bob_01
何かあったの?
icon_alice_01
何ってほどじゃないんですけど、昨日仕事でミスをしてしまって……
icon_bob_01
そうなんだ、その話、もしよかったら聞かせてくれないかな?

アリスにとって、なぜかボブが会って間もない他人とは思えなかった。
この人(ウサギ?)になら全部話してもいいような気がしていたから。

icon_alice_01私はただ、会社のアプリ部門からの依頼を受けて
本番環境の/etc/hostsファイルを書き換えただけなんです。
そしたら突然サービスが動かなくなっちゃって。
icon_bob_01
本番サービスダウンか。穏やかじゃないね。
icon_alice_01私は指示通り、前回作業した時のファイルに新しいホストを追加して、
そのファイルをコピーしただけなんですよ。
icon_bob_01
うんうん、それで原因は何だったの?
icon_alice_01後になって分かったんですが、
数日前に先輩が/etc/hostsファイルを書き換えていたんです。
データベースの参照先が変わっていたらしいんですけど
私は全っ然、聞いていませんでした。

icon_bob_01
それで、その部分が先祖返り5してしまった、と。
icon_alice_01はい、幸いすぐ気づいた先輩が直してくれましたけど。
でも、私のスキルが足りないせいで……はぁ。
icon_bob_01はは……
たしかにもう少し確認手順を増やせばトラブルは回避できたかもしれない。
でも作業ミスやコミュニケーション・ミスは誰にでも起こりうる。
誰かが悪いってことは絶対にないよ。
icon_alice_01
……ありがとうございます。ちょっと気持ち、楽になりました。
icon_bob_01
ところで、構成管理ツールは使っていないのかな?
icon_alice_01構成管理? たとえば、どういうものですか?
OSやミドルウェアのバージョンなんかは、Excelで台帳作って管理してます。
icon_bob_01構成管理ツール……Configuration Manager とか Orchestrator とか言ったりもするけど、これらは、サーバのOSやミドルウェアに対して、あるべき姿を定義したり定例的な作業を登録しておくことで作業を効率化・短時間化したり、人的ミスが起きるリスクを減らしたりすることを目的としたツールの総称なんだ。

現時点で主要な構成管理ツールを比較するとこんな感じになる。6

主要な構成管理ツールの比較

 
開発元Puppet LabsOpscodeSaltStackAnsibleWorks
登場2005年2009年2011年2012年
プログラミング言語RubyRuby (クライアント)
Erlang (サーバ)
PythonPython
導入実績
情報量
スケーラビリティ
共有リポジトリ
Puppet Forge

Opscode Community

Ansible Galaxy
2014年5月時点ではまだベータ版
Web UI
Ansible Tower
定義ファイル独自DSL独自DSL (Rubyベース)YAML
独自DSL (Pythonベース)
YAML
エージェントのインストール不要
シンプルさ
(学習・運用コストの低さ)
icon_alice_01色々あるんですね。
でも新しいツールを導入するとなると、メンバーみんなが使いこなせるか
心配です。

icon_bob_01そこでオススメしたいのが Ansible なんだ。
Ansible はエージェントのインストールが要らないし、何よりそのシンプルさの
おかげで、使いはじめるまでのコストがほとんどかからない。
icon_alice_01
エージェントというのは?
icon_bob_01このような構成管理ツールは、大抵『管理する側』と『管理される側』の 2種類のコンポーネントから成り立っている。
エージェントというのは、『管理される側』のサーバ上で動く常駐プロセス、と
考えればいいよ。
icon_alice_01なるほどー。
ちなみに、実績や情報量では Chef のほうが優れているんですか?
icon_bob_01Puppet や Chef は何年も前から使われているし、膨大なノウハウが溜まっているのは確かだね。
それでも近年、Ansible のシンプルさに共鳴した人たちが世界中で急速に増えている7のも事実。

あの Demand Side Science も標準の構成管理ツールとして採用しているんだよ。

icon_alice_01
へぇ、DSSも Ansible 使ってるんだ……
icon_bob_01後発の強みもあるし、動作は非常に安定している。信頼できるツールだと思うよ。
特に、管理するサーバ台数がそこそこ多くて、それに携わるエンジニアが少ない場合に適しているかな。
100〜200台程度のサーバ環境を、1人か2人で管理してるって話もよく聞くなぁ。
icon_alice_01
なんだか面白そう! どこかに試せる環境があるといいんだけど……
icon_bob_01その言葉を待っていたよ、アリス!
実は、もう環境を用意しておいたんだ!

 

Ansible のインストール

 

アリスと一緒に、実際に手を動かしてAnsibleの世界を体験しましょう!

こちらのドキュメントに VirtualBox を使って検証用の仮想マシン
(CentOS 6.5) を立ち上げる手順を記載しました。
ぜひセットアップを行い、アリスと同じ目線に立ってみてください。
次回以降の連載でも、この環境を引き続き使っていく予定です。

icon_bob_01
あの向こう、ヤシの木の間に、大きなドアがあるのが見えるかい?
icon_alice_01
あ……はい。扉に 192.168.100.12 って書いてありますね。
icon_bob_01あそこが僕らの目指す場所さ。
あの扉の先の世界を、僕らは Ansible で作りたい。

便宜的に、僕らが今いるサーバを an11
Ansible の管理対象とするサーバを an12 と呼ぶと
僕らを取り巻く環境はこんな感じになっているはずだ。

ネットワーク構成図

icon_alice_01
この世界 (an11) の中から Ansible を使って、扉の向こう (an12) を管理するんですね。
icon_bob_01その通り。でもその前に、まずは an12 にログインできるか確認してみよう。
扉の前で、sshコマンドを念じるんだ。IPアドレスを直接指定してね。
ちなみにあらかじめ、鍵は開けておいてある。
icon_alice_01
はい。わかりました。

icon_alice_01
known_hosts に追加して……と、an12 に入れました。
icon_bob_01
アリスには sudo 権限も付けている。試してみて。

icon_alice_01
OKです!
icon_bob_01
君はこの世界を作り替える力を持っているってこと、わかったかな?
よし、それでは一旦 an11 に帰ろう。

icon_bob_01
Ansible のインストールの方法はいくつかある8けど、今回はEPELリポジトリのRPMを yum コマンドでインストールすることにするよ。
icon_alice_01
はいっ! EPELの追加はやったことがあります。

icon_bob_01
パーフェクト! その調子で ansible をインストールしてみよう。

icon_alice_01
終わりました。
icon_bob_01
よし! これで Ansible の実行に必要な準備は整った。
icon_alice_01
えっ? an12 側での作業はもう必要ないんですか?
icon_bob_01最初に話したとおり、Ansible はエージェントインストールの必要がない。
SSH でログインできる環境であれば、ただそれだけで構成管理の対象にすることができる9んだ。
icon_alice_01
あ、そうでした! たしかにこれは楽ですね。

パンパカパ〜ン!
突如、辺りにファンファーレが鳴り響く。

アリスは レベルが上がった!

コマンド ansible を手に入れた!
コマンド ansible-doc を手に入れた!
モジュール ping をおぼえた!

icon_alice_01
えっ? えっ!? これは…
icon_bob_01おめでとうアリス!
この世界ではこうやって Ansible の経験を積むごとにレベルが上がっていくんだ。
そのたびに、新しいコマンドやスキルを手に入れることができるよ。
icon_alice_01
そうなんですか……はぁ、びっくりしました。
icon_bob_01
それじゃ、手に入れたコマンドをさっそく使ってみよう!

 

次回へつづく

 

最後までお読みいただき、どうもありがとうございました。


  1. 完全な見切り発車です……この先どうなるかは筆者自身もわかりません []
  2. 画像素材 http://kage-design.com/wp/ []
  3. 筆者愛用のキーボード http://www.topre.co.jp/products/elec/keyboards/ []
  4. 職場ではRedHat系を扱うことが多いみたい []
  5. データ更新の際に、何らかの理由で古いデータに巻き戻ってしまうこと []
  6. 出典:
    http://www.infoworld.com/d/data-center/review-puppet-vs-chef-vs-ansible-vs-salt-231308
    http://www.slideshare.net/TakeshiKomiya/python-26185953/18 []
  7. Ansible のトップページには、錚々たるグローバル企業のロゴが勢揃い []
  8. 詳細は公式ドキュメント参照 []
  9. 正確には、SSHの他に Python の実行環境があることも条件。使用するモジュールによっては、追加ライブラリのインストールも必要となる []