Ansible をこれからお使いの方へ

本記事は、Ansibleに多少なりとも関わる仕事をしていた中で2017年の総括としてまだお使いでいない方の参考になれればとおもい、まとめをしてみます。

# Ansible の特徴
ご存知「**Simple,Agentless,Powerful**」です。

* 学習コストが少ないオートメーションツール
* エージェント不要で、標準適なリモートアクセスプロトコルで利用可能（SSH、WinRM）
* アプリのデプロイ、各種設定、オーケストレーション等幅広く対応

## マニュアルページが手厚い
ここでは特に学習コストについてコメントすると、マニュアルページがわかりやすく、丁寧、必要な情報はだいたい載ってるということです。スタートするときは、各種書籍やWebページの有識者の記事などでも全然かまいませんが、結果行き着く一番いい参考図書は**docs.ansible.com**です。加えて、**ユーザーグループのメーリングリスト**の活用、**GitHubのISSUE**などの情報でほぼ情報収集としては完璧に近いくらいが網羅できるとおもいます。

http://docs.ansible.com/

# 2017年Ansibleの動き
ここはざっと

* Version 2.3 , 2.4 リリース
* AWS プロジェクトの公開
* Red Hat Ansible Tower 3.2リリース

# 個人向けとしてのAnsible

2014年くらいから本格的に使い始めてきましたが、はじめの感想としては「エージェントがいらない」というところにくいつきました。もともとシステムインテグレーションにおいて管理系ツールは何ががしかのエージェントを必要とするのが常でありましたので、それを入れることなく対象を操作可能と聞いたら興味がわく方も多いのではないでしょうか。
自分の場合は上記をきっかけに、使い始めたところもう後戻りはできなくなった・・・という感じです。これまで様々を手順化したり、シェルを書いたりしていたものは全部AnsibleのYAMLとして置き換えて考え使うようになりました。

## 活用シーン
昨今一番使っているシーンとしては、自分のミッションに**新しいものを評価する、デモする、共有する**みたいなものが多くあり、活用しています。特に重宝したのは、勉強会イベントをやる際、参加者のハンズオン環境を提供するプラットフォームを用意するときです。少し前（といっても200Xな時なので結構前ですが）までは、自分のPCにそれを入れて準備して、会場に持ち込み、LANを敷き詰めて参加者がそこにジョインしてハンズオンするという形式を想定していましたが、最近はやはりクラウドを使った方が便利なのでWi-Fi環境さえあればインターネット経由でアクセスしハンズオン環境を作りたいと思いました。そのときにもう、手元のPCからAnsible、1発実行してそれを作るという事に成功。当然環境は使い捨てなので、そのイベントが終わったら削除するだけです。（参考イメージ：Hands-on as a Service）
![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/75458/c9e145b4-1dd4-1990-3c6d-f2b007beb348.jpeg)
おそらくAnsibleがないときはクラウドであっても毎度構築しないといけなかったでしょうね。そして当日直前までバタバタして焦る・・・みたいな。

# エンタープライズでのAnsible
Ansibleに限りませんが、先進的な便利なOSSは企業側で多く使われてきているでしょう。
昨今、Ansibleは**ハードウェアの自動化やクラウドサービス、コンテナに関連する自動化**に対応するモジュールが多く開発されリリースされています。特にサーバ系リモート管理、ネットワーク機器、ストレージ機器などは企業が利用するエンタープライズハードウェアの上位にラインナップされるものが多くあります。これらはバージョンアップ毎に増えてきています。その他、自分が使い始めた頃とくらべると**Windows系**のモジュールもとても増えています。当初はLinuxベースのモジュールが多い中、Windows系は少なくなんだかんだで機能が足りていなかったので結局PowerShell経由で実行してしまっていたり、シンプルなモジュールでも使い勝手が悪い（例えばファイルコピーが数MBしかできなかったり）ものもあったりしましたが、今はそれらも改善され、本記事投稿時では**74ものモジュール**が確認されています。

こういった単体の状況に加えて、**Ansible Galaxy**（Role共有サイト）でも多くのロールが共有されています。こちらも**3000**を越えてます。もちろんすべてが有用なものとはかぎりませんが、少なくとも何かをこさえるときのサンプルやきっかけ、参考にはなるものも多くある考えてます。巨人の肩の上にはのっかった方が良い時もありますね。

https://galaxy.ansible.com/

他にも単体のAnsibleでは満たせない部分を補完するのに役立つものとして**AWX（Ansible Works）プロジェクト**が公開され、構成管理やGUI上での管理を可能にしています。コマンドオペレーションだと運用時に辛い場合なども対応できたのは喜ぶ人も多いと思います。

https://github.com/ansible/awx/

直接ではないですが気づいたこととして、最近の少々複雑なOSS（やあるコンポーネント）をインストールセットアップする際に、必要最低限なものだけダウンロードして実行するとバックでAnsibleが動き、プロビジョニングできてしまうといった形もちらほらみます。ユーザはあまり意識はしないこともありますが、きっとこれまでは**シェル**が代用されていた部分が少し変わってきているのだと思います。これが個人的に便利だと思ったのが、冪等性です。例えばインストールをセットアップするものの場合、途中でエラーでコケて、それを解決したら再度同じコマンドを実行したらいいので、何かロールバックするなどを自身で考えてやり直す必要はないわけです。ガシガシTry&Errorができる。

# これからのAnsible
現在、クラウドサービス、ネットワーク装置周りのモジュール開発が盛んに行われています。**Powerful**部分はどんどん強くなっていくのだとは思います。2015年にRed Hat社に買収されてからはエンタープライズもターゲットにしながら改良されてきたように感じます。あくまでも自動化を行う手段の１つではありますし、もちろんいろいろなシーンで完璧ではありません、今後も完璧にこれだけですべてを満たすということはないとおもいます。ただ、便利なツールであることは間違いなく、スタートダッシュし易い管理ツールとしてはよいOSSだと改めて思います。足らないところは、他のツールなどの組み合わせで補完できます。それがOSSをうまく扱う、付き合っていくコツでもあります。

数ある同種のツールの中で、**もし今からはじめるのであれば、最適なOSSである**、ということは結構伝えています。ここではすべてを伝えきれていませんが、興味が出た方はAnsibleから自動化のドアを叩いていただければとおもいます。

なお、具体的なロードマップは適時示されているので細かいところを気になった方はご参照ください。（ここはなまけさせていただく・・・）

https://github.com/ansible/ansible/blob/devel/ROADMAP.rst

少しだけご紹介すると、Ansibleを補完する派生のツールも結構あります。

* Ansible-Container（コンテナ特化）
* AnsibleSpec（Serverspecと一緒に使うときに便利）
* Ansible Semaphore（シンプルなGUI）
* Ansible-Report（実行結果をGUIで確認）

などなど、自分の他の記事にも載せてあるのもあるのでご興味アレば見ていただければと。

# おわりに
かなり自分視点でのところなので、あまり網羅的なまとめではないかもしれませんがまとめてみました。
*Google Trends*にて改めて他のOSSと比較してみると、まだまだ勢いは止まらずのようです。

* <font color=blue>**青**</font>：Ansible
* <font color=red>**赤**</font>：Chef
* <font color=orange>**黄**</font>：Puppet
* <font color=green>**緑**</font>：SaltStack

![キャプチャ.JPG](https://qiita-image-store.s3.amazonaws.com/0/75458/e503e40f-631f-2f36-7eb7-05cafb57e296.jpeg)
*Google Trendsより*

これからでもまだ遅くないです。やたら手をかけてやっている作業なんかをこの年末に見直してみて、自動化をはじめてみませんか！？