DSS技術ブログへようこそ!
突然ですが、みなさんは Ansible (アンシブル) という構成管理ツールをご存知でしょうか?
これから何回かに分けて1 Ansible の紹介記事を書いていきたいと思います。
新しいツールについて学ぶとき、実際に手を動かすことは理解の助けになります。
この連載では、主に構成管理ツールや Ansible をまだ使ったことのない方たちに向けて
ストーリー と チュートリアル で追体験ができるような内容をお届けすることを
目指しています。
今回はその一回目。いわゆるイントロダクションです。
不思議の国のAnsible2
第1章 インフラの落とし穴にはまって
なぜ Ansible を使うのか
都内某所のWeb系企業、オフィスの片隅で REALFORCE3 の静電容量無接点方式キーボードを
小気味よく奏でて複数のターミナルを縦横に操り Linux サーバ4を管理している彼女の名は
有渋 瑠子(ありしぶ るこ)。 小さい頃からあだ名はずっとアリスなんだとか。
社会人2年目の彼女は、インフラエンジニアとしてシステムの安定稼働や新技術習得のために
日夜奮闘している。今流行の『インフラ女子』だ。
そんな彼女も今日は休日。
昼下がり、陽気に誘われ眠りに落ちてしまった彼女は不思議な夢を見る。
物語は、その夢の中の奇妙な出会いで幕を開ける。
なんだか、すごい所に来てしまったのね…… |
彼女がそう呟くのも無理はない。
まるでどこか別の惑星にいるかのような錯覚にアリスは捕らわれていた。
地平線の彼方まで果てなく続く荒野。土の匂い。
疲れきって小さなオアシスで佇んでいると、草むらから時折ニシキヘビが顔を出す。
目に映る風景が自分の空虚な心を映し出しているようにも感じて、一抹の寂しさが不意に彼女を包む。
ここにいるのは私だけなのかしら。 |
そう思った矢先、背後から人の声が聞こえた。
ようこそ、アリス! Infrastructure as Code (インフラストラクチャー・アズ・コード) の世界へ! |
アリスはびっくりして振り返る。
するとそこにはチェック柄のベストを着飾った一匹のウサギの姿があった。
ひょっとして、今しゃべったのは、あなた? |
アリスはウサギに向かって話しかけた。
……ここは、君がつくる世界。 |
ウサギは構わず語り続ける。
アリスの予想が確信に変わる。
この世界は、君の言葉でできている。 君が望むものは、全て君自身で手に入れることができる。 |
……ねぇねぇ、ウサギさん? ここはどこなのかしら? |
コマンドを……コマンドを強く念じればいい。 |
『コマンド』。そう言われたアリスは、無意識のうちに使い慣れている Linuxコマンドをいくつか
思い浮かべた。
w ……uname -a ……ps aux ……pwd ……
|
すると、アリスの脳裏に矢継ぎ早に情報が流れ込んでくる。
アリスは今自分が置かれている状況を悟った。
ひょっとして、ここはサーバの中? |
ご名答。僕の名前はわかる? |
who コマンドを使って……あ、出てきた。
|
まあ本名はベキトーセイ・オジサン・ボブっていうんだけど 略してボブ(BOB)で構わない。 |
ベキトセイ? 変わったお名前ね…… 私は有渋です。よろしくお願いします。 |
こちらこそ。よろしく。 |
そう言ってボブはペコリと頭を下げた。
ところで、さっきまでなんだか浮かない顔をしてたよね? |
えっ!? そ、そうですか? |
何かあったの? |
何ってほどじゃないんですけど、昨日仕事でミスをしてしまって…… |
そうなんだ、その話、もしよかったら聞かせてくれないかな? |
アリスにとって、なぜかボブが会って間もない他人とは思えなかった。
この人(ウサギ?)になら全部話してもいいような気がしていたから。
本番環境の /etc/hosts ファイルを書き換えただけなんです。そしたら突然サービスが動かなくなっちゃって。 |
本番サービスダウンか。穏やかじゃないね。 |
そのファイルをコピーしただけなんですよ。 |
うんうん、それで原因は何だったの? |
数日前に先輩が /etc/hosts ファイルを書き換えていたんです。データベースの参照先が変わっていたらしいんですけど 私は全っ然、聞いていませんでした。 |
それで、その部分が先祖返り5してしまった、と。 |
でも、私のスキルが足りないせいで……はぁ。 |
たしかにもう少し確認手順を増やせばトラブルは回避できたかもしれない。 でも作業ミスやコミュニケーション・ミスは誰にでも起こりうる。 誰かが悪いってことは絶対にないよ。 |
……ありがとうございます。ちょっと気持ち、楽になりました。 |
ところで、構成管理ツールは使っていないのかな? |
OSやミドルウェアのバージョンなんかは、Excelで台帳作って管理してます。 |
現時点で主要な構成管理ツールを比較するとこんな感じになる。6 |
主要な構成管理ツールの比較
開発元 | Puppet Labs | Opscode | SaltStack | AnsibleWorks |
登場 | 2005年 | 2009年 | 2011年 | 2012年 |
プログラミング言語 | Ruby | Ruby (クライアント) Erlang (サーバ) | Python | Python |
導入実績 | ◎ | ◎ | △ | ○ |
情報量 | ○ | ◎ | △ | ○ |
スケーラビリティ | ◎ | ◎ | ◎ | ○ |
共有リポジトリ | ○ Puppet Forge | ○ Opscode Community | − | △ Ansible Galaxy 2014年5月時点ではまだベータ版 |
Web UI | ◎ | ◎ | ○ | ○ Ansible Tower |
定義ファイル | 独自DSL | 独自DSL (Rubyベース) | YAML 独自DSL (Pythonベース) | YAML |
エージェントのインストール | 要 | 要 | 要 | 不要 |
シンプルさ (学習・運用コストの低さ) | △ | △ | △ | ◎ |
でも新しいツールを導入するとなると、メンバーみんなが使いこなせるか 心配です。 |
Ansible はエージェントのインストールが要らないし、何よりそのシンプルさの おかげで、使いはじめるまでのコストがほとんどかからない。 |
エージェントというのは? |
エージェントというのは、『管理される側』のサーバ上で動く常駐プロセス、と 考えればいいよ。 |
ちなみに、実績や情報量では Chef のほうが優れているんですか? |
それでも近年、Ansible のシンプルさに共鳴した人たちが世界中で急速に増えている7のも事実。 あの Demand Side Science も標準の構成管理ツールとして採用しているんだよ。 |
へぇ、DSSも Ansible 使ってるんだ…… |
特に、管理するサーバ台数がそこそこ多くて、それに携わるエンジニアが少ない場合に適しているかな。 100〜200台程度のサーバ環境を、1人か2人で管理してるって話もよく聞くなぁ。 |
なんだか面白そう! どこかに試せる環境があるといいんだけど…… |
実は、もう環境を用意しておいたんだ! |
Ansible のインストール
アリスと一緒に、実際に手を動かしてAnsibleの世界を体験しましょう!
こちらのドキュメントに VirtualBox を使って検証用の仮想マシン
(CentOS 6.5) を立ち上げる手順を記載しました。
ぜひセットアップを行い、アリスと同じ目線に立ってみてください。
次回以降の連載でも、この環境を引き続き使っていく予定です。
あの向こう、ヤシの木の間に、大きなドアがあるのが見えるかい? |
あ……はい。扉に 192.168.100.12 って書いてありますね。
|
あの扉の先の世界を、僕らは Ansible で作りたい。 便宜的に、僕らが今いるサーバを |
この世界 (an11) の中から Ansible を使って、扉の向こう (an12) を管理するんですね。 |
扉の前で、 ssh コマンドを念じるんだ。IPアドレスを直接指定してね。ちなみにあらかじめ、鍵は開けておいてある。 |
はい。わかりました。 |
1 2 3 4 5 6 |
[alice@an11 ~]$ ssh 192.168.100.12 The authenticity of host '192.168.100.12 (192.168.100.12)' can't be established. RSA key fingerprint is 80:c6:61:a0:ec:2d:1f:68:d5:35:29:86:ad:41:7f:2c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.100.12' (RSA) to the list of known hosts. [alice@an12 ~]$ |
known_hosts に追加して……と、an12 に入れました。 |
アリスには sudo 権限も付けている。試してみて。 |
1 2 |
[alice@an12 ~]$ sudo id uid=0(root) gid=0(root) 所属グループ=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 |
OKです! |
君はこの世界を作り替える力を持っているってこと、わかったかな? よし、それでは一旦 an11 に帰ろう。 |
1 2 3 4 |
[alice@an12 ~]$ exit logout Connection to 192.168.100.12 closed. [alice@an11 ~]$ |
Ansible のインストールの方法はいくつかある8けど、今回はEPELリポジトリのRPMを yum コマンドでインストールすることにするよ。 |
はいっ! EPELの追加はやったことがあります。 |
1 2 3 4 5 |
[alice@an11 ~]$ sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm を取得中 警告: /var/tmp/rpm-tmp.IsqxTi: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY 準備中... ########################################### [100%] 1:epel-release ########################################### [100%] |
パーフェクト! その調子で ansible をインストールしてみよう。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
[alice@an11 ~]$ sudo yum install ansible (略) Dependencies Resolved ============================================================================================================================================== Package Arch Version Repository Size ============================================================================================================================================== Installing: ansible noarch 1.5.5-1.el6 epel 685 k Installing for dependencies: PyYAML x86_64 3.10-3.el6 epel 157 k libyaml x86_64 0.1.6-1.el6 epel 52 k python-babel noarch 0.9.4-5.1.el6 base 1.4 M python-crypto x86_64 2.0.1-22.el6 base 159 k python-crypto2.6 x86_64 2.6.1-1.el6 epel 530 k python-httplib2 noarch 0.7.7-1.el6 epel 70 k python-jinja2 x86_64 2.2.1-1.el6 base 465 k python-keyczar noarch 0.71c-1.el6 epel 219 k python-paramiko noarch 1.7.5-2.1.el6 base 728 k python-pyasn1 noarch 0.0.12a-1.el6 base 70 k python-setuptools noarch 0.6.10-3.el6 base 336 k Transaction Summary ============================================================================================================================================== Install 12 Package(s) Total download size: 4.8 M Installed size: 24 M Is this ok [y/N]: y (略) 警告: rpmts_HdrFromFdno: ヘッダ V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 Importing GPG key 0xC105B9DE: Userid : CentOS-6 Key (CentOS 6 Official Signing Key) <centos-6-key@centos.org> Package: centos-release-6-5.el6.centos.11.1.x86_64 (@anaconda-CentOS-201311272149.x86_64/6.5) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 Is this ok [y/N]: y warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 Importing GPG key 0x0608B895: Userid : EPEL (6) <epel@fedoraproject.org> Package: epel-release-6-8.noarch (installed) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 Is this ok [y/N]: y (略) Installed: ansible.noarch 0:1.5.5-1.el6 Dependency Installed: PyYAML.x86_64 0:3.10-3.el6 libyaml.x86_64 0:0.1.6-1.el6 python-babel.noarch 0:0.9.4-5.1.el6 python-crypto.x86_64 0:2.0.1-22.el6 python-crypto2.6.x86_64 0:2.6.1-1.el6 python-httplib2.noarch 0:0.7.7-1.el6 python-jinja2.x86_64 0:2.2.1-1.el6 python-keyczar.noarch 0:0.71c-1.el6 python-paramiko.noarch 0:1.7.5-2.1.el6 python-pyasn1.noarch 0:0.0.12a-1.el6 python-setuptools.noarch 0:0.6.10-3.el6 Complete! |
終わりました。 |
よし! これで Ansible の実行に必要な準備は整った。 |
えっ? an12 側での作業はもう必要ないんですか? |
SSH でログインできる環境であれば、ただそれだけで構成管理の対象にすることができる9んだ。 |
あ、そうでした! たしかにこれは楽ですね。 |
パンパカパ〜ン!
突如、辺りにファンファーレが鳴り響く。
アリスは レベルが上がった!
コマンド ansible
を手に入れた!
コマンド ansible-doc
を手に入れた!
モジュール ping
をおぼえた!
えっ? えっ!? これは… |
この世界ではこうやって Ansible の経験を積むごとにレベルが上がっていくんだ。 そのたびに、新しいコマンドやスキルを手に入れることができるよ。 |
そうなんですか……はぁ、びっくりしました。 |
それじゃ、手に入れたコマンドをさっそく使ってみよう! |
次回へつづく
最後までお読みいただき、どうもありがとうございました。
- 完全な見切り発車です……この先どうなるかは筆者自身もわかりません [↩]
- 画像素材 http://kage-design.com/wp/ [↩]
- 筆者愛用のキーボード http://www.topre.co.jp/products/elec/keyboards/ [↩]
- 職場ではRedHat系を扱うことが多いみたい [↩]
- データ更新の際に、何らかの理由で古いデータに巻き戻ってしまうこと [↩]
- 出典:
http://www.infoworld.com/d/data-center/review-puppet-vs-chef-vs-ansible-vs-salt-231308
http://www.slideshare.net/TakeshiKomiya/python-26185953/18 [↩] - Ansible のトップページには、錚々たるグローバル企業のロゴが勢揃い [↩]
- 詳細は公式ドキュメント参照 [↩]
- 正確には、SSHの他に Python の実行環境があることも条件。使用するモジュールによっては、追加ライブラリのインストールも必要となる [↩]