Ansible トレイルマップ
MOUNT YAML

STEP4

もっとAnsibleについて知ろう

Ansible を実践的に使うための知っておくべきこと

ここではAnsibleのPlaybookをより実践的なものにしていくための学習方法について紹介します。
Playbookはシンプルにやりたいことを記述できることが特徴ですが、
いくつかのテクニックを覚えておくと高度な作業を柔軟に自動化することが可能となります。
代表的なテクニックとその利用例について紹介します。

「変数」

一度作ったPlaybookを処理を変えずにパラメーターだけを変化させて別の場所で使うことが可能です。ここで使うのが変数です。例えば「仮想マシンの仮想メモリ数」や「ロードバランサーのプールに組み込むIPアドレス」などがよく変数化されます。

「ループ」

Playbookの中で同じ処理を何度をパラメーターだけ変化させて何度も実行する場合があります。例えば「A01〜A99の連番のディレクトリを作成する」や「ユーザー AAA, BBB, CCC … ZZZを作成する」という処理です。このような場合に、変数と組み合わせるて処理を1回の記述だけで必要な回数だけ「繰り返す」のがループです。Playbookがわかりやすく完結になります。

「条件式」と「ハンドラー」

タスクを実行する・実行しないを制御するための条件式がPlaybookでは使えます。「タスクAの戻り値がBだったらタスクCを実行する」や「タスクD, Eの結果が True だったらタスクFを実行しない」などです。条件式を使うことで、状況に応じた処理の実行が可能となります。

「エラーハンドリング」

Playbookを実行すると予想外のエラーに遭遇する場合があります。このようなエラーに対処するためにエラーハンドリングが必要となります。例えば仮想マシンを作成し、アプリケーションをインストールした後でクラスターのメンバーに参加するという一連の処理を自動化したとします。もしどこかでエラーが発生したら「仮想マシンを削除して不完全なサーバーが残らないようにする」という使い方などができます。このような「エラーが起こったら、自動化が動く前の状態に戻す」というのはよく使われます。

「フィルター」

Playbookの中で簡易的なデータ処理を行いたいときにはフィルターが使えます。例えば実行結果の数値から最大値/最小値を抽出したり、データの型変換などを簡易的な記述で実現できます。

「テンプレート」

配布するコンテンツファイルやコンフィグファイルの一部を変数化しておき、Ansibleでファイルを生成するタイミングで変数の部分を実際の値に置き換えてくれる機能です。応用範囲が広く慣れると手放せなくなります。サーバーに配布する設定ファイルの中でIPアドレスやホスト名といった可変の部分を変数化しておき、1つのファイルから全サーバー分のコンフィグを動的に生成して配布するといった使い方が代表的です。他にも、サーバーから集めた設定情報を使ってドキュメントを自動生成するといったことも可能です。

「Role」

Playbookを書いていくと同じ処理を別のPlaybookで何度も記述するという状況が出てきます。このような「よくある一連の処理」を部品化し、簡単に呼び出せるようにするのがRoleです。よくある手順をRole化し、Roleを組み合わせてPlaybookを組み立てる方法が一般的で、Ansibleのベストプラクティスとも呼ばれています。

これらのキーワードの機能を学習することで自動化を自在に組み立てて、様々な作業を自動化することが可能になります。ただし、これらのテクニックは使えば使うほどPlaybookが複雑化するという側面も持っているため、できるからと言って使いすぎには気をつけてください。良いPlaybookとは「やりたいことが簡潔で簡単に記述されたPlaybook」のことです。Playbookを複雑化させる前に、作業の内容を見直してみるのも重要です。

これらのテクニックをブラウザだけで一通り学習できるコンテンツをコミュニティの有志の方が作成してくれています。ぜひ以下のリンクから挑戦して実践的なテクニックを体験してみましょう。

Ansible 102

カバーする内容
・変数の利用
・ループ、条件式、ハンドラー
・エラーハンドリング(block, rescue)
・テンプレートとフィルター

Ansible 103

カバーする内容
・Role による部品化
・Galaxy による Role の再利用
・Collections

 

Ansibleモジュールの探し方

AnsibleではPlaybookやRoleを「モジュール(Module)」を組み合わせることで組み立てます。
モジュールはAnsibleの利用が拡大し世界中で開発された結果、現在では数千にも達しています。自分のやりたい事とモジュールを素早く紐付けることができると、Playbook/Roleの開発がスムーズになります。では膨大なモジュールのから自分が必要とするモジュールを見つけるにはどうすればよいのでしょうか。

まずモジュールの配布方法について知っておきましょう。大まかに分類すると以下の4つになります。

# モジュール配布の種類 探す配布場所元
1 Ansible本体に付属するモジュール Ansibleの公式サイト
2 Ansible Galaxy で Role や Collection の一部として配布されるモジュール Ansible Galaxy
Ansible Automation Hub
3 GitHub 等で公開されているモジュール GitHub
4 ベンダーがそれぞれの自社製品用開発し、独自に配布しているモジュール 各ベンダーに個別確認

ここでは最も利用機会が多くなると予想される、Ansibleの公式サイトとAnsible Galaxy、Ansible Automation Hubについて解説します。

Ansibleの公式サイト

Ansibleで進める自動化ジャーニーにおいて、一番アクセスするAnsibleの公式サイトです。Ansible本体に標準で付属するモジュールについての解説が掲載されています。この標準モジュールだけでも多くの作業をPlaybook形式で記述可能になります。英語のサイトではありますが、すっきりまとまっていますので、ぜひ英語でめげずに閲覧ください。

(1)モジュール名がわかっている場合

既に利用したいモジュールの目処が立っており、その仕様やサンプルを確認したい時に参照します。ただし、サイト上ではモジュールの種類ごとに分類されていますが、あまりにも数が多いためドリルダウンしながら探し当てるのは効率が悪いかも知れません。そのため、検索サイトを利用して「ansible module XXXX」(XXX にはモジュール名)と検索すると、ほとんどの場合で検索結果の一番上に公式サイトのモジュール説明が来るはずです。もしインターネットにつながらない場合はansibleがインストールされた環境上で「ansible-doc」コマンドを使うのも便利です。

(2)モジュール名がわからない場合

やりたいことは固まっているけれど、それを実現するモジュールをまだ見つけられていない場合もよくあります。その場合も検索サイトから「ansible YYY」(YYYはやりたいことや対象機器)と検索すると多くのサンプルを見つけられるはずです。「仮想マシンの作成」「ファイル 属性変更」「サービス 起動」など、日本語のキーワードでも多数の情報がヒットするはずです。見つけた情報から使用しているモジュールを確認し、その後に公式サイトでモジュールの最新仕様について確認しましょう。

!ここに注意!

公式のモジュールマニュアルでは、同じモジュールでもバージョンごとにページが存在します。特に検索サイトから到達した場合には、どのバージョンのマニュアルを開いたのかを確認しておきましょう。利用するバージョンと異なるバージョンのマニュアルを参照してしまうと、思わぬ手間を取らされてしまうことがあります。

Ansible Galaxy

Ansible Galaxyでは個人や企業が開発したAnsibleのRoleやCollectionを公開して配布するためのサイトです。標準モジュールに自分のやりたい機能がない場合はこのAnsible Galaxyを検索してみましょう。ここでは多数のRoleやCollectionが配布されており、その中に専用のモジュールを含んでいる場合も多々あります。

ここで検索機能から「JBoss」や「Satellite」など、製品名を入れて検索すると、その製品を対応したRole/Collectionが発見できるはずです(もちろん登録されていないケースもあります)。英語しか使えませんので、製品名は英語で入力するようにしましょう。
自分の欲しいものを見つけたら「ansible-galaxy」コマンドを使って、自分の環境にダウンロードしてください。

Ansible Automation Hub

こちらは製品版のAnsibleであるRed Hat Ansible Automation Platformを購入したユーザ向けサービスで、サードパーティベンダーが公式に開発したモジュールやRole/Collectionを入手できます。標準モジュールやGalaxyからは入手できないものを配布されていますので、製品版をお持ちの方は利用を検討してみるもの良いと思います。

探し方の例

例えば「VMware上で仮想マシンを作成し、起動を待ってから、予め準備された設定ファイルを配置して、最後にリブートする」という単純なPlaybookを作る場合を考えてみます。

1) 仮想マシンを作成する

まず公式サイトからモジュールを探してみます。公式サイトではモジュールがカテゴリごとに分類されていますので、ここから探すにはやりたい操作がどのカテゴリかの目処が立っている場合がお勧めです。今回はVMwareでの仮想マシン作成なので「Cloud modules」から探します。最初はわかりにくいですが、慣れると「この手のモジュールはこの分類だな」というのがわかってくると思います。

「Cloud modules」のページを「vmware」で検索するとたくさんのモジュールが見つかりますが、説明を読むと「vmware_guest – Manages virtual machines in vCenter」が今回の用途に合いそうです。後は「vmware_guest」の説明を確認しましょう。おすすめはページの後半に出てくる「Examples」です。このセクションではモジュールの利用方法のサンプルが掲載されています。

2) 起動を待つ

作成して起動した仮想マシンはすぐにログインできるわけではありません。OSが完全に起動して操作可能になるの待つ必要があります。このような処理を行うモジュールを探してみましょう。

Googleなどの検索サイトで「ansible module wait」と検索してみましょう。おそらく検索結果の上位に「wait_for – Waits for a condition before continuing」が見つかるはずです。これはAnsibleが何らかの状態を「待つ」ためによく使われるモジュールで、まさに今回の「OSが起動してSSH接続が可能な状態になるのを待つ」という用途にピッタリです。

3) ファイルをコピーする、リブートする

この2つのモジュールも検索してみてください。検索キーワード例と該当するモジュールの例を本ページの末尾に記載しておきますので、ぜひモジュール検索にチャレンジしてください。

ここで紹介した方法以外にも、Ansibleコミュニテイの熟練者が検索のノウハウを公開していますので、こちらも参考にしてみてください。また、どうしても見つからない、などの状況であれば、日本のAnsibleユーザー会が準備しているSlackで質問を投げてみるのもよいでしょう(Slackへの参加についてはAnsibleユーザー会のまとめページを参照)。

モジュールの数がどにかく膨大なので最初は戸惑うことも多いかもしれません。しかし、自分のやりたい事とモジュールを素早く紐付けること、適材適所のモジュールを利用することが、より良いPlaybookの最初の一歩になります。慣れてしまえばどうということはありませんから、うまく活用しましょう。

モジュール検索の回答例

ファイルをコピーする
・キーワード「ansible module file copy」
・モジュール「copy – Copy files to remote locations
リブートする
・キーワード「ansible module reboot」
・モジュール「reboot – Reboot a machine

 

寄り道:旅路を振り返る

これまでの道のりはいかがでしたでしょうか。
Ansibleに関して様々な角度からの情報をお届けしましたが、
情報量が多く整理しきれていない方も多いのではないでしょうか。
そこで、このパートではここまでの歩みをクイズ形式で振り返りながら整理してみましょう。

STEP 1 の振り返り

まず最初に私たちはAnsibleの概要や、Ansibleが世界でどのような状況なのかについて確認しました。ここでAnsibleが世界ではどのような状況だったかを思い出してみましょう。

【 問題 】 正しいと思われる記述は?
Ansibleは・・・
  1. 1. 既に世界中のあらゆる業種で幅広く使われており、多くの事例が公開されていることが確認できた。
  2. 2. 一部の業界で特に使われており、その他の業界ではほとんど使われていないことが確認できた。
  3. 3. まだまだ始まったばかりのソフトウェアで普及はこれからであることが確認できた。
正解と解説
正解 1
Ansibleは世界中でITインフラ作業を自動化した多くの実績があり、国内も例外ではありません。皆さんが何かを作業を自動化しようとしたとき、その問題は世界中の誰かが既に取り組んだことのある問題である可能性が高いです。

そして次に私たちはAnsibleがITインフラの課題を「自動化」によって解決することを知りました。これまで人手で実施していた作業をAnsibleで自動化することには、様々なメリットがあります。

【 問題 】
Ansibleで自動化することのメリットとは・・・
  1. 1. 作業ミスがなくなりインフラの品質が向上すること。
  2. 2. 作業がスピードアップすること。
  3. 3. 属人化を排除し、特定のスーパーエンジニアに依存しない自動化を実現できること。
  4. 4. 作業工数が削減されること。
正解と解説
正解 1, 2, 3, 4 の全て
IT人材の不足がここ数年叫ばれるなか、Ansibleでの自動化は単純なコスト削減以外にも多くのメリットを生み出します。特に「属人性の排除」は多くの企業でAnsibleが採用される大きな理由にもなっています。Ansibleを学んでこれらのメリットを最大化していきましょう。

STEP 2 の振り返り

次に私たちはAnsibleを用いた場合の「自動化ジャーニー」を見ることで、この先にどのような未来が待っているのかを確認しました。ここでは特に最初の部分が重要だと説明されていますが、その理由を覚えていますか?

【 問題 】
自動化ジャーニーでは最初が肝心な理由とは・・・
  1. 1. Ansibleの技術的な難易度が高く、最初に全てを理解しないと先に進めないから。
  2. 2. 自動化に対する考え方が変わるから。
  3. 3. データサイエンスについて理解しなければ先に進めないから。
正解と解説
正解 2
経験豊富なエンジニアほど「昔の自動化はこうだったから、Ansibleでも同じようにやろう」と考えてしまう傾向があります。こういった失敗をしないためにも、YAML山で学んだAnsibleのポイントを忘れないように自動化へ取り組みましょう。

STEP 3 の振り返り

ここでは実際にAnsibleを動かしてみました。Ansibleというソフトウェアの特徴や、いくつかの用語を確認し、Ansibleによる自動化を実際に体験しました。

【 問題 】
Ansibleで自動化する時に私たちは・・・
  1. 1. Playbook を作り「何を」やりたいのかをAnsibleに指示します。
  2. 2. Inventory を作り「どこに」対して自動化を実行するのかを指示します。
  3. 3. チケットを作成して、担当者に作業をアサインします。
  4. 4. 何も作らなくてもAnsibleが私たちの意思を汲み取って動いてくれる
正解と解説
正解 1, 2
Playbook と Inventory は私たちがAnsibleで自動化を進める際に基本となる要素です。Ansibleで「何を」やるのか、そして「どこに」に実行するのかを決めるのがこの2つの要素、PlaybookとInventoryです。

さて、私たちが「何か」の自動化を進めようとするとPlaybookを作る必要があります。このPlaybookを効率よく作るためにAnsibleが提供している部品が何であったか思い出せますか。

【 問題 】
AnsibleではPlaybookを作るために・・・
  1. 1. 紙の手順をAnsibleに読み込ませます。
  2. 2. Python のプログラムをゼロから書きます。
  3. 3. Module を使います。
  4. 4. エージェントレスなので何も使わない。
正解と解説
正解 3
Ansibleでは「よくある作業」を部品化したModuleが提供されており、このModuleを組み合わせてPlaybookを組み立てていきます。Moduleを使うことで、自動化に必要な記述量を減らすことができ、Playbookをシンプルに効率よく開発することができます。

STEP 4 の振り返り

ここでは少し実践的なPlaybookを作成し、様々なシーンで柔軟に対応するためのテクニックについて学びました。Ansibleを使う上でのテクニックにはどのようなものがあったか思い出せますか?

【 問題 】
Ansibleのテクニックと正しい説明の組み合わせを選択しましょう
  1. 1. 「変数」は繰り返しの処理を記述する機能。
  2. 2. 「条件式」はPlaybook内のタスクの実行条件を指定する機能。
  3. 3. 「テンプレート」はPlaybookを作成するための便利な雛形を提供する機能。
  4. 4. 「Role」は権限を設定して安全にPlaybookを実行する機能。
正解と解説
正解 1 × 2 ○ 3× 4 ×
この問題は少し難しかったかもしれません。これらのテクニックが使えるようになると様々な作業をシンプルで分かりやすいPlaybookに置き換えることができます、曖昧な部分が残っている方はSTEP4の説明を復習しておきましょう。このときに実際にAnsible動かしてこれらのテクニックを体験することはとても有効です。

ここでは合わせてModuleの探し方についても解説しています。Ansibleにはたくさんのモジュールがありますので、必要なモジュールを素早く見つけることができるとPlaybook開発の効率もあがります。

【 問題 】
モジュールの探し方で有効な方法は以下のどれでしょう?
  1. 1. 自分のやりたい処理を行うモジュールがあるかを検索サイトで調べる。
  2. 2. 自分の使うモジュールの仕様がわからなかったので公式のドキュメント(module index)で調べる。
  3. 3. 標準モジュールでは必要なモジュールが見つからなかったので Ansible Galaxy で公開されているRoleやCollectionを検索する。
正解と解説
正解 1, 2, 3
Ansibleはオンラインドキュメントも充実していますし、ユーザーも多いためブログやメディア記事の情報も豊富です。これらを活用して素早く必要な情報を見つけましょう。注意点としては、検索結果に出てくる情報には古いものもあります。見つけた情報をそのまま使うのではなく、公式ドキュメントの最新情報と見比べてそのまま使えるかは確認しましょう。

ここまでの内容を振り返っていかがでしたでしょうか。もし理解に不安がある場合は、その部分を復習しておきましょう。準備万端!という方は更に先の道へと進みましょう。

  • Ansible Weblog

    Ansibleに関する有益な情報を定期的にアップデートしています。
    ぜひご一読ください。

  • Ansibleユーザー会

    Ansibleユーザー会ではもくもく会など様々な会を実施しています。
    気軽に参加できますので、ぜひご参加ください。