IT社員3人組によるリレーブログ

某IT企業に勤める同期3人が、日常で思ったことを記録していきます (twitter: @go_mount_blog)

Ansibleとは (Ansible超入門)

どうも、ITコンサルタントのShoheiです。

今日はAnsibleについて解説していきましょう。

タイトルに記載の通り、超入門編です。以下のような人を対象にしています。

f:id:go-mount:20181211151204p:plain

Ansibleって何?

早速、定義的なものを探るために公式ページ*1をみてみましょうか。

Simple, agentless IT automation that anyone can use

 
 

Ansible is a universal language, unraveling the mystery of how work gets done. Turn tough tasks into repeatable playbooks. Roll out enterprise-wide protocols with the push of a button. Give your team the tools to automate, solve, and share.

素敵ですね。

"unraveling the mystery of how work gets done" =仕事がなされる謎を解明してくれるらしいです。

もう少し地に足ついた説明をば。

このままだと壮大すぎてわからないので、Wikipediaさん*2に聞いてみました。

Ansibleアンシブル)は、レッドハットが開発するオープンソース構成管理ツールである。サーバを立ち上げる際、あらかじめ用意した設定ファイルに従って、ソフトウェアのインストールや設定を自動的に実行する事が出来る[1]。特に大規模なコンピュータ・クラスターを構築する時に、時間の短縮やミスの削減に有用である。

なるほど、構成管理... もう少し詳しくみていきましょう。

従来の構成管理

構成管理とは、端的にいうとITシステムを構築したり管理したりすることです。ここでの管理対象にはサーバーのIPアドレスやホストから、個々のConfig, SWの設定レベルまで含まれます。

では構成管理の実態はどうでしょう。下の絵をご覧ください。結構いろんな企業で起きている状況かと思います。

 

f:id:go-mount:20181212230246p:plain



絵のようなサーバ3台程度のシステムならばまだなんとかなるかもしれません。

では、1000台程度の大規模システムになるとどうでしょう。もう人力だけに頼った管理では限界ですよね。

 

たとえエクセルシートの更新が義務付けられていたとしても、人の手で更新であれば必ずと言っていいほど抜け漏れが発生します。

自分はポータル上で構成管理していた経験が有りますが、これも同様でした。特に複数人で管理していたので、誰がどんな変更をしたかもわからず気づいたらぐちゃぐちゃ、なんてこともよく有りました。

 

構成管理が徹底できないと、システム全体像の把握困難になり、開発時の依存性調査などが正確にできなくなります。またシステム障害発生時の切り分けも難しくなります。

さらに、例えば作業ミスなどで、サーバ1台だけアプリケーションのバージョンが古く連携ができない状態になっていても、問題が起きるまで把握できません

Infrastracture as a Codeの世界へ

ではここからはAnsibleを念頭に、構成管理ツールを導入した世界を見ていきましょう。

ITの構成情報は構成管理ツールに記載します。Ansibleでは、その記載はInventoryと呼ばれるファイルに行います。

またアプリケーションをデプロイしたり状態チェックをするといった、今まで手順書に記載していた内容(タスク)も、全てコードで記載します(playbookと呼ばれます)。Ansibleの場合、これらはYAML形式で保存されます。

 

下の図のように、inventoryに記載したサーバに対して、playbookに書いてある内容を実行することで、変更作業を行うことができます。

例えばinventoryで定義したwebというグループのサーバについてだけ、playbookの内容を実行してね、というやり方もできます。

f:id:go-mount:20181212232954p:plain

Infrastructure as a Code

こうすることにより、構成情報や変更作業を全てコードで管理する世界にシフトすることができます。

これにより嬉しいことは、デプロイなどの手作業で行なっていたことが自動化できるといった点もそうですし、ソフトウェア開発で培ったベストプラクティスを構成管理(特にインフラ)にも適用できるという点も有ります。変更時のレビューや、バージョン管理などが容易にできるようになるということです。

このような、インフラの世界の管理や変更までコードでやってしまおう、という考え方のことを、Infrastracture as a Codeと言います。

 

Ansibleの強み

最後に、Ansibleの強みをいくつか紹介していきましょう。

エージェントレス

変更対象・管理対象のサーバに専用エージェントを導入する必要は有りません。

基本pythonが使えて、sshが可能であれば利用可能です。

シンプル

YAMLファイルを使うので、シンプルに記載することができます。

冪等性がある

一番重要なポイントなのでしっかり解説します。

冪等性というのは、たとえ間違えて繰り返し実行しちゃったとしても目的の状態になる、というものです。

例えばシェルスクリプトの以下のコマンドについて考えてみましょう。

$ for server in `cat LIST.txt`;do ssh server "echo "add">> test.txt; sleep 1";done

この場合、LIST.txtに書かれたサーバが持つtest.txtというファイルの最後の行に "add"という文字列を追加する、というコマンドですが、二回実行するとaddという文字列が二行追加されてしまいます。

 

一方でAnsibleでは多くのモジュールで冪等性が保証されています。

冪等性のある動作では「コマンドを実行すること」ではなく「対象を目的の状態になっているかどうか」が保証されるので、誤って二回実施してしまったとしても、また誤って手動で何か間違った変更を加えたとしても、Ansibleからplaybookを実行することで対象をあるべき状態に戻すことができます。

 

その他の構成管理ツール

他の代表的なツールとしては、Chef, Puppetなどがあります。比較記事も出てたりするので、興味があれば見てみてください。

まとめ

今日は構成管理ツール、Ansibleについて解説しました。

次回、もう少し具体的にAnsibleをいじってみましょう。