
Ansibleとは? Playbookの書き方や活用方法も解説
こんにちは。クレスコ・デジタルテクノロジーズのY.Yです。データセンターで運用業務を6年ほど対応しております。
業務では、類似した工程が多く存在し、反復動作は減らして楽にしたいと常々考えておりました。
そこで、今回は自動化ツールである「Ansible」について調べましたので共有します。
■あわせて読まれている資料:
対応事例やソフトウェアテクノロジーサービス一覧を掲載!
→ソフトウェアテクノロジーサービス
目次[非表示]
- 1.Ansibleとは?
- 2.Ansibleの特徴と注意点
- 3.Ansibleにより得られる恩恵
- 4.Ansibleの仕組み
- 4.1.Playbook
- 4.2.ホスト及びユーザの指定
- 4.3.Task(タスク)
- 4.4.Handler(ハンドラ)とnotify
- 4.5.実際にPlaybookを書いてみた
- 5.業務活用案
- 6.まとめ
- 7.引用元
Ansibleとは?
Ansibleとは、システムオペレーションを自動化する構成管理(ITシステムを構成する要素(SW,HW)の管理)ツールです。
具体的には、システム構成やバージョンのライフサイクルなどを管理します。
分かりやすく言うと、従来手順書ベースで手動実行していたシステムの構成管理(構築や設定変更)を、
コードで行い自動実行できるようになる、ということです。
Ansibleの特徴と注意点
Ansibleの特徴と注意点は以下の通りです。
・学習コストや導入コストが低い
Ansibleにおける一連の処理はPlaybookと呼ばれる単位にまとめられ、PlaybookはYAML形式で記述されます。
YAMLは、直感的で分かりやすく、作成にあたって高度なプログラミング知識が不要であるため、
学習コストを抑えることができます。また、後述のエージェントレスであることから導入コストが低い点も特徴として挙げられます。
・エージェントレス
Ansibleはエージェントレスで、Pythonが使用可能であり、SSH通信ができれば利用できます。
そのため、設定に制限がされている環境でも利用しやすいです。
・冪等性(べきとうせい)
冪等性とは、同じ操作を複数回繰り返しても同じ結果が得られるという性質のことです。
Ansibleではシステムのあるべき状態を定義することで、毎回同じ品質で作業を実施することができます。
・豊富なモジュール
Ansibleのモジュールとは、特定の操作を実行するためのコードで、3,000種類以上が利用可能です。
例として以下のようなモジュールがあります。
- userモジュール:ユーザアカウントとユーザ属性を管理します。ユーザの追加や権限変更などを行います。
- yumモジュール:yumパッケージのインストール、アップグレード、ダウングレード、削除、および一覧表示を行います。
- serviceモジュール:リモートホスト上のサービスを制御します。サービスの開始/停止/再起動/リロードを行います。
・影響範囲の大きさ
Ansibleは、簡単な操作で多くの機器に対し、自動で設定変更を行うことができます。
複数設定を大量に適用する必要がある場合は、一括で処理できるため、手間を大きく省くことが可能です。
その反面、仮に定義ファイルの記述を誤ってしまうと、多くの機器に対して誤った構成を適用する恐れがあるため注意が必要です。
・複雑な処理に対応しにくい
前述の通り、Ansibleの定義ファイル(Playbook)は直感的で分かりやすいのですが、
条件分岐が多くなる場合など複雑な処理は対応しづらいです。
複雑な処理が必要な場合は、プログラミング言語を使った他ツールの方がシンプルに対応できます。
Ansibleにより得られる恩恵
Ansibleを利用することで、QCD( Quality(品質) / Cost(原価) / Delivery(納期) )向上を実現できます。
QCD向上は、作業者だけでなくお客様も含め全員が恩恵を受けることができます。
・品質の向上(Quality)
反復作業をPlaybookに記述して自動化することで、ミスが減り品質向上が期待できます。
作業者の経験や技術レベルによる差が無くなり、安定した品質を提供することができます。
・工数削減(Cost)
自動化により、都度最初から準備する必要が無くなり、工数(労務費)が削減できます。
工数が減ることで、他の業務に人員を回すことも可能になり、人員不足の解消に繋がります。
・生産性の向上(Delivery)
自動化されることで作業スピードが早くなり、今までできなかった短納期の依頼対応も可能になります。
Ansibleの仕組み
ここからは、Ansibleの仕組みについて記載していきます。
定義ファイルであるPlaybookはYAML形式で記述されますが、今回YAML自体の説明は割愛させていただき、
「AnsibleでのYAML」について記載していきます。
Playbook
Playbookには、Ansibleの一連の処理が記述されています。
各Playbookは、リストにある1つ以上の「Play」から構成されます。
Playは、対象ホストやグループの指定、指定したホストに対して実行する「Task」や「Handler」から構成されます。
ホスト及びユーザの指定
ここでは、簡単な対象の指定や、権限昇格について記載します。
・hosts:コロンで区切られた1つ以上のグループまたはホストパターンのリストです。
・remote_user:接続ユーザアカウントを指定します。
・su など他の権限昇格メソッドも使用可能(接続ユーザ以外での処理)
・sudo のパスワードを指定する必要がある場合、ansible-playbook(Playbookの実行コマンド)に
--ask-become-pass または -K を付けて実行します。
Task(タスク)
Taskとは、ホストに対する処理のことで、すべてのTaskには「name:」が必要になります。
通常、1つのTaskには1つのモジュールを指定し、複数記述した場合は記述された順番に実行されます。
Handler(ハンドラ)とnotify
Handlerとは、特定のTaskの実行後、あらかじめ指定しておいた処理を実行するための仕組みです。
Taskの定義で「notify」を指定し、Taskの結果が「changed(特定の作業が行われた)」となった場合にのみ、notify項目で指定したHandlerが実行されます。
Taskと同様、1つのHandlerには1つのモジュールを指定します。
実際にPlaybookを書いてみた
実際にPlaybookを記載してみます。
実行内容は、「複数のホストに対して、インターフェース状態を確認して出力」です。
事前にインベントリと呼ばれる、ホスト名やユーザ情報が一覧で記載されたファイルを用意しており、実行時に参照しています。
各行に説明をいれていきますので、どのような動作をしているか確認してみてください。
いざ書いてみると、簡単なコマンド実行でさえ時間がかかってしまいましたが、それでも大量のホストへの実行作業は効率化できると感じました。
業務活用案
ここまでAnsibleについて記載してきましたが、最後に業務へどう活かしていくか、いくつか考えてみましたのでご紹介します。
・定期的に行うセキュリティパッチの適用自動化
手順書があって定型化されていることが多い作業ですが、Ansibleを使って一括で複数同時適用が可能になります。
それにより、工数削減と適用漏れや手順間違いなど、ヒューマンエラーを防ぐことができます。
・テストの自動化
事前にPlaybookを作成しておけば、テスト実施者のレベルに左右されることなく安定した品質を確保できるうえ、複数台同時に処理することで工数削減も期待できます。
・検証環境の構築
一度検証環境の構築用にPlaybookを作成しておくと、何度でも同じ検証環境を即時に作ることができます。事前にベースとなる環境(サーバやネットワーク)があれば、サーバの設定やソフトウェアインストール、ネットワーク機器の設定をAnsibleで自動化できます。必要な時すぐに検証ができる点は、非常に大きな利点と言えます。
・障害発生時に復旧を自動化
手動で復旧を行っているものを、自動で復旧対応できるようになります。
例えば、障害の原因調査に必要な情報を取得し、特定のメッセージをトリガーとしてプロセス(サービス)を再起動するといった一連の対応を自動化できます。
復旧対応は、迅速かつ正確に行う必要があり、Ansibleならどちらも満たすことができます。
まとめ
今回は、「自動化ツールAnsibleとは何か」、について簡単にまとめました。
Ansibleは他製品と比べ導入がしやすく、様々なモジュールで幅広い分野の製品を自動化することができ、運用・構築・テストフェーズでも利用可能です。
ご紹介できていないモジュールもまだまだたくさんあり、何に対してどのように使うかによって、その可能性は無数にあります。この機会にぜひAnsibleを使って業務改善にチャレンジしてみてはいかがでしょうか。
■サービス資料一覧はこちら↓
引用元
https://docs.ansible.com/ansible/2.9_ja/user_guide/modules_intro.html
https://docs.ansible.com/ansible/2.9_ja/modules/list_of_monitoring_modules.html
https://docs.ansible.com/ansible/2.9_ja/user_guide/playbooks_intro.html
https://www.kagoya.jp/howto/it-glossary/develop/ansible/
https://qiita.com/Brutus/items/1894629105d61f4854bc
https://zenn.dev/suiudou/articles/0498fe850499b0
https://zenn.dev/y_mrok/books/ansible-no-tsukaikata/viewer/chapter8
https://qiita.com/morin_river/items/431f2b0c852b89b398bd