Ansibleを理解する上で
Infrastructure as Code(IaC)への理解
IaCとは自動実行可能なコードの形でインフラの状態を記述し、インフラ構築を自動化するプロセスを指します。
IaCの目的
・作業の省人化と効率化によるコスト削減
・オペレーションミスの発生可能性を低減
・手順書のコード化による高度な品質保証
また、目的別に使用するツールが分けられており、インフラ構築を3つに分類すると以下のようになります。
Orchestration | Configuration | Bootstraping |
---|---|---|
Capistrano | Chef | AWS |
fabnc | Ansible | Docker |
Puppet | VAGRANT |
Ansibleはそのツール群の中にある「OS、ミドルウェアの設定」を自動化していくConfiguration部分になります。
Ansibleとは
レッドハットが開発するオープンソースの構成管理ツールのこと。
Simple、Powerful、Agentlessという3つの特徴を掲げるPython製のインフラ構築自動化ツールです。
◼️構成管理ツールとは
「機器のあるべき姿(構成)をファイルで管理する」ためのツール
機器のマシン名やIPアドレスなどを予めファイルに定義しておくことで、
その定義内容と差分があるときは、全てあるべきマシンやIPアドレスへと設定(変更)してくれます。
こういった何度行っても、同じ状態(品質)を担保できることを冪等性と言い、
構成管理ツールは「冪等性」を担保するために「何を実行するのか」ではなく、
「どういう状態があるべき姿なのか」を記述していきます。
Simple、Powerful、Agentlessという3つの特徴
Simple
「Playbook」と呼ばれるファイルへ環境構築に関する設定情報をYAMLにより定義する。
Playbook
どの部分に対してどうあるべきなのかを定義する際にAnsibleで用いるのはPlaybookとなります。
別の構成管理ツールとしてあるChefはRubyで記述していきますが、
Ansibleの場合はYAML形式として読みやすい、書きやすい、わかりやすいということを特徴として書かれます。
言語の指定などは特になく、**「どこに」「何をするのか」**を明記していく形になります
例えば、
・インデントを使ってデータの階層構造を表すため、人間にとって非常に読みやすい。
・終了タグが必要ないので、人間にとって非常に書きやすい。
・データを「配列」「ハッシュ」「スカラー (数値や文字列や真偽値)」だけで表すため、人間にとって非常に理解しやすく、プログラミングも容易。など
▼YAML構文に関してはこちらが理解しやすいです。
https://docs.ansible.com/ansible/2.9_ja/reference_appendices/YAMLSyntax.html#yaml-syntax
YAMLは固有の言語スキルを必要としない分、経験の浅い方にとっても記述のしやすい仕組みとなっています。
※とはいえAnsibleが簡単というわけではなく、あくまで記述方法やその理解がしやすいというイメージです。
Powerful
OSSコミュニティの活動が活発であり、日々開発がされている、様々な機器を操作するためのモジュールを使用することができる。
Agentless
構築対象となるサーバ、機器に対してAgentをインストールする必要がないため、
余計な管理負荷、セキュリティリスクを負わなくて済む
PuppetやChefなどはエージェント型の構成管理ツールであり、
操作対象マシンの中で起動する専用エージェントが中央サーバーにアクセスしてコードを取得し、
エージェント自らがマシン内の設定をあるべき状態に更新します。
イメージ親機から子機に指示を送り、子機があるべき状態に更新する動きとなります。
中央サーバーから設定を取ってくるということで「プル型」とも呼ばれるアーキテクチャです。
一方、Ansibleが採用するエージェントレスモデルでは、
Ansibleがインストールされた**中央マシンが各操作対象にログインして直接操作を実行する「**プッシュ型」のアーキテクチャを採用しています。
こちらは子機を持たない親機が全て直接更新するというイメージになります。
導入におけるメリット
並列処理による工数削減
サーバーの構築、PCのキッティング、BCP切り替え、ネットワークの管理、アプリケーションデプロイなどの自動化が可能であり、
並列処理であることから理論上1台分のスピードで2桁或いは3桁以上の台数分セットアップが可能となる。
1台あたり10分の作業
10台なら1時間40分
100台なら16時間40分
★Ansibleで実行した場合
100台の場合でも1台あたりの所要時間と理論上変わりなく10分なので16時間30分の工数削減になる。
属人化によるヒューマンエラーを防ぐ
冪等性が担保されている状態での自動化となるため、属人化によるヒューマンエラーが起きにくい。
定義ファイルもYAML形式であるため、可読性高く習得に要する時間とコストも少ない。
作業に必要な大量のドキュメント管理を解消
作業手順書やネットワーク構成ガイド、構築作業の注意事項など多種多様なドキュメントが不要となり、
作業内容は全てPlaybookにコード化して記述していくことでシンプルな管理が可能となる。
まとめ
海外では規模感あるシステムの自動化も盛んに行われているようです。
ローリスク・ハイリターンな技術であり、エンジニア不足が今後もますます加速する市場において是非押さえておきたい技術ですね。