APC Automation blog

株式会社エーピーコミュニケーションズの自動化ブログです

AnsibleでWindowsを自動化する

AnsibleでWindowsを自動化する

Ansibleが管理できる対象は幅広いですが、Windowsもその例外ではありません。以下では、Ansibleを用いたWindowsの構成管理とその特徴について、その概要をご説明します。

AnsibleはWindowsに対してなにができるか

はじめに、Ansibleを用いてWindows (Windows PCおよびWindows Server) に対して行える処理について解説します。以下の処理は、AnsibleネイティブのWindowsサポートを用いて行える内容です。

  • Windowsマシンからの構成情報取得
  • アプリケーションのインストールおよびアンインストール
  • Windows機能を有効、または無効にする
  • Windowsサービスの開始、停止および管理
  • ユーザーやグループの管理
  • Chocolateyを介したWindowsパッケージの管理
  • Windows Updateの管理とインストール
  • リモートサイトからのファイル取得
  • 作成したPowerShellスクリプトをプッシュして実行

このように、以前はActive Directoryとエージェント型の構成管理ツールがなければ行えなかった処理が、エージェントレス型のAnsibleを用いて行えるようになっています(なお、AnsibleからActive Directoryおよび、Azure ADの操作も可能です)。

必要なコンポーネントについて理解する

WinRMの構成概要
(出典: Ansible実践ガイド第3版 著: 北山晋吾、佐藤学、塚本正隆、畠中幸司、横地晃[インプレス刊] P224 Figure 5-3 WinRMの構成概要)

WindowsSSH経由の管理が想定されていないため、Windowsのリモート管理機能である「WinRM (Windows Remote Management)」を用いて、AnsibleからWindowsに接続、管理を行います。必要なコンポーネントは以下の4つとなります。

(1) WinRM

SOAP (HTTPまたはHTTPS) ベースのWS-Managementプロトコルを経由して、ターゲットノードに接続します。

(2) PowerShell

高度な管理や操作をコマンドラインから行える、Windowsに標準で付属するツールです。

(3) Windows Management Instrumentation

コマンドラインスクリプト言語から、Windowsの設定情報やコンピュータの状態などにアクセスするための標準仕様です。

(4) pywinrm

WinRMサービスに接続するためのPythonのクライアントライブラリです。これを利用することで、ターゲットノードに対して、WMIデータの取得やPowerShellスクリプトの実行、バッチ処理が可能となります。

Windows側の準備

Windows側の準備

はじめに、管理されるWindows PCまたはWindows Server側は、以下の準備を行っておく必要があります。

PowerShell 3.0以上(および対応する.NET Framework 4.0以上)がインストールされている WinRMでコントロールノードからの接続が許可されている PowerShellのリモート実行が許可されている 管理者グループに所属するAnsible接続用ユーザーが登録されている

上記に対応し、Ansibleで管理可能なOSは以下となります (2022/5現在)。

なお、Windows 11はAnsible公式ドキュメントでは管理可能なOSとして記載されていませんのでご注意ください (2022年5月現在)。

Windowsホストの自動化例

以下では、Windowsホストに対する構成管理を自動化した例について紹介します。

シーメンス

ドイツの大手電機メーカー、シーメンスWindowsベースの環境でしたが、LinuxベースのAnsibleを用いて以下の管理ならびに自動化を実現しました。 主にWindows PCならびにWindows Serverに対するPKI環境(デジタル証明書、通信の暗号化、スマートカードなど)の最適化および自動化

引用元はこちら

Ensono

アメリカ・イリノイ州のITマネージドサービス企業であるEnsonoは、Ansible Tower (当時) を導入前に、管理するサーバーに対してWindows Server 2016を実装するのに8週間を要していました。Ansible Tower導入後は、Windows Server 2019プレリリース作業の90%を2日で完了させました。

引用元はこちら

Agile Defense

アメリカ政府機関に対してITサービスを提供する、アメリカ・バージニア州Agile Defenseは、自社ソリューション「Compliance as a Service (CPaaS) 」の基盤としてAnsibleを採用し、構成管理機能を利用した脆弱性監査を提供しています。監査対象には、Red Hatプラットフォーム、VMwareハイパーバイザーなどとともに、Windowsも監査対象としています。このサービスにより、ある顧客が監査に費やす時間を98%削減しました。

引用元はこちら


この他、エージェントレスであるAnsibleの特性を生かして、WSUS (Windows Server Update Services) に代わってWindows Updateの適用を行う例などもあります。


<ネットワーク自動化のお悩みは、エーピーコミュニケーションズにご相談ください>

ネットワーク自動化サービス「Automation Coordinator」
お客様ごとの最適な業務プロセスコンサルティングを含めたAnsibleによる自動化の導入(実際の運用)、ハイスキルなエンジニアによる並走型支援、クライアントワーク、チケットサポート、最終的にはお客様が自動化を自律して運用するためのスキル習得トレーニングまでをパッケージ化して提供するネットワーク運用の自動化支援サービスです。

APC-ACT
ACT(Automation Colabo Team)は株式会社エーピーコミュニケーションズ(APC)の自動化に特化したチームです。現在は特にネットワーク自動化に重点を置いています。
当ブログは、執行役員 名田と、マーケ担当 嶋津が主に情報発信を行っています。

AWX / Automation Controller (旧Ansible Tower) とはなにか

AWX / Automation Controller (旧Ansible Tower) とはなにか

Ansibleは単体でも利用可能な自動化ツールですが、Ansibleを補強し、組織において高い利便性とセキュリティを考慮した運用を行うために、管理ツールが提供されています。

以下では、その管理ツールであるAWX/Automation Controller [旧 Ansible Tower] について解説いたします。

AWX / Automation Controller概要

Automation Controllerは、旧称であるAnsible Towerからのメジャーバージョンアップ製品となり、2022年5月時点での最新バージョンは4.2となります。

(画像引用元: https://www.redhat.com/ja/blog/whats-new-in-ansible-automation-platform-2-automation-controller)
Ansible TowerとAutomation Contorllerの最大の違いは、コントロールプレーン(UI、API、ワークフローなど)と、実行環境が完全に分離されている点です。このため、スケーリングする際のオーバーヘッドが低減され、自動化を拡張し、提供できるようになります。

AWX / Automation Controllerの主要機能

次に、Automaton Controllerの主な機能を簡単にご説明します。

ダッシュボードによる視覚化

(画像引用元: “Ansible: Up and Running, 3rd Edition” early release. O’Reilly Media Inc. Capter 23. Ansible Automation Platform Figure 23-4 Ansible Automation Controller dashboard)

Automation Controllerを導入することでダッシュボード(GUI)が利用可能となります。

実行ジョブや処理結果などが可視化されることに加えて、メールやチャットツールによる処理結果の通知が利用可能となるため、利便性が大きく向上します。

ロールベースの権限管理とセキュリティ強化

(画像引用元: “Ansible: Up and Running, 3rd Edition” early release. O’Reilly Media Inc. Capter 23. Ansible Automation Platform Figure 23-6 User Management)

Ansibleを用いると、わずかな操作で数百、数千といった対象への構成管理が実施できます。別な見方をすると、「悪意のある操作または意図しない操作が行われた場合、その影響が非常に大きい」ことを意味します。

Ansible単体では権限管理機能を持っていませんが、Automation Controllerを用いることで「ユーザー/チーム/組織などの単位での、読み取り/書き込み/実行の権限管理」が行えます。よって、各ユーザーが業務を遂行するうえで必要なだけのリソースを制御できるように、管理対象範囲を限定できます。

また、Azure AD、LDAPSAMLGoogle OAuth2などのサードパーティーの認証システムを利用することも可能となっています。また、ジョブの実行時に使用するパスワードや秘密鍵などの認証情報を暗号化する機能があるため、セキュリティの向上にも寄与します。

ジョブのコントロール

(画像引用元: “Ansible: Up and Running, 3rd Edition” early release. O’Reilly Media Inc. Capter 23. Ansible Automation Platform Figure 23-11 Ansible Automation Platform job entries)

Automation Controllerを利用することで、以下のような高度なジョブ管理が可能となります。

  • ジョブの並列実行
  • ジョブスケジューリングによる柔軟な実行制御

これらの機能を用いることで、短時間でのジョブ完了やジョブの自動実行が可能となります。

ジョブテンプレート

(画像引用元: “Ansible: Up and Running, 3rd Edition” early release. O’Reilly Media Inc. Capter 23. Ansible Automation Platform Figure 23-10 Ansible Automation Platform job templates)

Ansible Controllerでプレイブックを実行するには、まずジョブテンプレートを定義する必要があります。ジョブテンプレートとは、プレイブックを含む、ジョブを実行するために必要なパラメータのセットで、プレイブックを同じ条件で何度も実行する場合に便利です。

ジョブの実行結果はDBへ記録されるため、過去の実施内容についていつでも確認可能となります。

REST API

(画像引用元: “Ansible: Up and Running, 3rd Edition” early release. O’Reilly Media Inc. Capter 23. Ansible Automation Platform Figure 23-13 Ansible Automation Platform API version 2)

Automation Controllerは、REST APIに対応しているため、他システムとの統合が容易となります。

なお、管理ツールにはOSS版である「AWX」と、商用版である「Automation Controller」があります。この2つの製品は、ジョブ実行などの基本的な機能は同様ですが、以下の点で違いがあります。

  AWX(OSS版) Automation Controller(商用版)
本番環境での利用 非推奨 安定性と安全性に優れている
製品リリース 最低限のテストでリリース エンタープライズ環境で利用できる安定バージョンをリリース
アップグレード 最低限のテストでリリース 製品ライフサイクル期間内の複雑なアップグレードテストも実施
セキュリティパッチ・バグフィックス 最新バージョンのみ提供 製品ライフサイクル期間内の全バージョンに提供
公式サポート なし あり

OSS版であるAWXは、テスト環境での利用や新機能の評価に適していますが、本番環境での利用は非推奨です。商用版は、長期的なライフサイクルや安定的に動作するバージョン、そしてサポートが提供されています。本番環境で利用する場合は、商用版が推奨されています。

AWX / Automation Controllerは導入すべきか

これまでお伝えしてきた通り、Automation Controllerは、ジョブコントロールや権限管理など、組織においてAnsibleを利用する上で有用な機能を提供します。

よって、企業や官公庁といった組織においてAnsible導入を検討する場合は、Automation Controllerの導入も検討すると良いでしょう。

Automation Controllerを試してみたい場合は、Red Hatの公式サイトより60日の評価版をダウンロード可能です。また、期間制限のないOSS版のAWXは、Ansible公式サイトよりダウンロードできます。なお、AWXは本番環境での利用が推奨されていないため、注意が必要です。


<ネットワーク自動化のお悩みは、エーピーコミュニケーションズにご相談ください>

ネットワーク自動化サービス「Automation Coordinator」
お客様ごとの最適な業務プロセスコンサルティングを含めたAnsibleによる自動化の導入(実際の運用)、ハイスキルなエンジニアによる並走型支援、クライアントワーク、チケットサポート、最終的にはお客様が自動化を自律して運用するためのスキル習得トレーニングまでをパッケージ化して提供するネットワーク運用の自動化支援サービスです。

APC-ACT
ACT(Automation Colabo Team)は株式会社エーピーコミュニケーションズ(APC)の自動化に特化したチームです。現在は特にネットワーク自動化に重点を置いています。
当ブログは、執行役員 名田と、マーケ担当 嶋津が主に情報発信を行っています。

Ansibleとはなにか [特徴 | 製品紹介 | 入門 | できること/できないこと]

Ansibleとはなにか (特徴 | 製品紹介 | 入門 | できること/できないこと)

IT基盤の構成管理や自動化を行うためのツールとして、Ansibleが注目を集めています。以下では、Ansbileの概要とその思想、製品の種類や機能の違いと、何を実現できるのかについて解説していきます。

Ansibleとはなにか

Ansibleとは

Ansibleは、2012年にAnsible社により開発された構成管理・自動化ツールです(ツール名と開発会社名が同じ)。具体的には、ハードウェアやソフトウェアなどの構成情報や、ドキュメント等変更記録の一元管理を、Ansibleを用いて自動的に行います。

なお、Ansible社は2015年にRed Hatに買収され、その後ツールはRed Hatから「Red Hat Ansible Automation Platform」というブランドのもとに商用版が提供されると同時に、OSS版も提供されています。

Ansibleの特徴は以下の4点です。

Ansibleの特徴

エージェントレス

Ansibleは管理対象となるマシンに、エージェントソフトをインストールせずに、管理対象に追加できます(Pythonがインストールされている必要はありますが、主要なLinuxディストリビューションであれば、Pythonはあらかじめインストールされています)。このため、エージェントソフトの配布やインストールを行うことなく、管理対象を拡大できます。

YAMLの採用

Ansibleが行う処理は、プレイブックと呼ばれる設定ファイルに「YAML」を用いて記載されます。YAMLは「高度な学習が必要となる開発言語」ではなく、HTMLやXMLのような「構造をもったテキスト形式」であるため、可読性が高く、短時間の学習で容易に記述できるようになります。

これは、同種の構成管理ツールであるPuppetやChefと比較すると明らかです。Puppetは独自言語、ChefはRubyと、それぞれ学習に時間を要する言語を用いたプログラミングが必要となります。この点、YAMLを採用しているAnsibleはプレイブックの記載が容易であるため、大きなメリットとなります。

幅広い管理対象

かつての構成管理ツールの管理対象は「デバイス搭載のOSアップデート」「セキュリティパッチ」「デバイスの構成情報」といった限られたものでした。これに対してAnsibleは、仮想化・クラウド化に対応した幅広い管理対象を特徴とします。例えば、クラウドリソース、ネットワーク機器、複数のOSなどに及びます。

なお、Ansibleでは例えば、以下のような非常に幅広い対象に対する処理内容を記述する際、「モジュール」というコンポーネントを利用します。

  • クラウド基盤
  • ファイル
  • モニタリング
  • ソース管理
  • クラスタリング
  • ID
  • ストレージ
  • コマンド
  • ITインフラ
  • ネットワーク
  • メッセージング
  • データベース
  • パッケージ管理
  • 通知
  • 証明書と鍵管理
  • Windows など

モジュールには、Ansibleが管理する「対象」ならびに「用途」ごとの処理が記載されています。このモジュールを用いることで「複数のエンジニアが別々にプログラムを書いた結果、処理の実施内容が違った」といった間違いを防ぐと同時に、容易かつ短時間な処理の実行を可能とします。

冪等性の担保

冪等性(べきとうせい)とは、ある処理を1回だけ行っても、複数回行っても結果が同じになる性質、概念です。

Ansibleは、他の構成管理ツールと同様に「何度実行しても同じ状態になる」冪等性の担保を極めて重視しています。例えば、Ansibleは作業を実行する前に状態を確認し、変更を加える必要がなければ処理をスキップする仕様となっており、これも冪等性を高いレベルで確保するための仕組みです。

Ansible製品紹介

Ansibleは、大きく分けて「オープンソースとして提供されている製品群(Ansible)」と、「商用ソフトウェアとしてRed Hatが提供している製品群(Red Hat Ansible Automation Platform)」の2つに分かれます。

特に重要なコンポーネントとその名称を記載します。

  OSS 商用版
自動化エンジン Ansible Automation Execution Environment (旧Ansible Engine)
管理ツール AWX Automation Controller(旧 Ansible Tower)

特に管理ツールにおいては、OSS版のツールと、商用版のツールで下記の差があります。

  OSS 商用版
本番環境での利用 非推奨 安定性と安全性に優れている
製品リリース 最低限のテストでリリース エンタープライズ環境で利用できる安定バージョンをリリース
アップグレード 最低限のテストでリリース 製品ライフサイクル期間内の複雑なアップグレードテストも実施
セキュリティパッチ・バグフィックス 最新バージョンのみ提供 製品ライフサイクル期間内の全バージョンに提供
公式サポート なし あり

OSS版のAnsible製品群は、テスト環境での利用や新機能の評価には適していますが、本番環境での利用は非推奨となっています。本番環境での利用や、責任ある製品サポートが必要な場合は、商用版の利用を推奨します。

Ansibleでできること

では、Ansibleを利用して具体的に何を行えるのか、下記で解説します。

プロビジョニング プレイブックに「あるべき状態」を記載することで、自動でプロビジョニングを実施。さらに、インフラ設定をコード化 (IaC) することで、毎回自動で同じ環境をプロビジョニング可能。
構成管理 システムを一貫性の取れた望ましい状態に維持する。
デプロイの自動化 テスト環境と本番環境の間でソフトウェア移行の自動化を可能にする。
オーケストレーション 複数のタスクやプロセス、ワークフローを自動化。
ネットワーク自動化 ネットワーク 機器とサービス管理を自動化。
セキュリティ自動化 セキュリティに関する調査ならびに、問題があるシステムの修正作業を自動化。

自動化、という言葉が繰り返し出てくることから分かる通り、開発における方法論である「DevOps」とは非常に親和性が高いといえます。「CI/CD (Continuous Integration / Continuous Delivery) や「IaC」(Infrastructure as Code) を実現するためのツールとして、Ansibleが利用される場面も多くあります。

Ansibleでできないこと

次に、Ansibleではできないことについても触れていきましょう。

複雑な処理 YAMLは複雑な処理を行うための言語ではありません。条件分岐や繰り返し処理などを複雑に実装することは、YAMLの記述が複雑になってしまい、向いていません。

Ansibleの導入の流れ

では、Ansibleの導入から利用までに必要なステップについて、簡略化して解説します。

Ansible利用のステップ

1.Ansibleの用途を決める

プロビジョニング、構成管理、デプロイの自動化など、Ansibleは様々な用途で利用可能です。はじめに、どの程度の規模(管理対象)に、どのような作業を行わせたいのか、そしてどの程度の信頼性の確保が必要かを考慮し、「本当にAnsibleが適しているか」「Ansibleを選択する場合、OSS版か商用版か」「管理ツールが必要か不要か」を判断すべきです。

2.Ansibleをインストール・設定する

OSS版のAnsibleはLinuxのOSパッケージマネージャー、Pythonパッケージマネージャー、またはソースからインストールが可能です。最も一般的なインストール先はLinuxマシンです。

なお、商用版のAnsibleは60日間の評価版(無料トライアル)が提供されており、Red Hatのサイトからダウンロードできます(要ユーザー登録)。こちらもLinuxマシンにインストールします。

60日を超えて利用する場合は、ライセンスの購入が必要となります。商用版ライセンスは「Red Hat Ansible Automation Platform」として、「Standard」と「Premium」の2タイプの年間ライセンスが提供されています(買い切り型はなし)。

Ansible StandardとPremiumのサポートの違い
(引用元: https://www.ansible.com/products/pricing)

製品におけるStandardとPremiumの違いはありません。違いは「8時間x平日のみ5日サポートのStandard」と「24時間土日含めサポートのPremium」という点です。ミッションクリティカル環境でAnsibleを利用する場合はPremiumで、そうでない場合はStandardという住み分けとなります。

Red Hat公式ページではライセンス価格は開示されていませんが、複数の販売代理店が「Standard版の年間ライセンス費用が169万円」であることを開示しています (管理対象100ノードまで。2022年4月の情報に基づく)。

なお、OSS版も商用版も、インストール時の設定については手厚いドキュメントが提供されているため、「商用版でなければインストールが困難」といったことはありません。

Ansibleのコンポーネント
「Ansible実践ガイド」(インプレス)35ページより引用

Ansibleを動作させるのに最低限必要な要素は、Ansibleの実行対象ホストを記述する「インベントリ」と、Ansibleで行わせたい処理内容をYAMLで記述する「プレイブック」です。インストール後は、はじめにインベントリの定義と、プレイブックの記述が必要です。

なお、プレイブックで行う処理(ファイルの転送、サービスの起動停止など)は、あらかじめ「モジュール」という形で準備されています。プレイブックやコマンドで、モジュールを宣言することで、マネージドノードで処理を実施できます。

モジュールはあらかじめ準備されたものを使うだけでなく、自身で作成も可能です。作成する際には、冪等性が確保され、属人化したものにならないよう注意が必要です。

Ansibleのプラグインとは、コア機能の拡張ならびに追加機能を提供するコンポーネントです。必要なプラグインはあらかじめ準備されていますが、モジュールと同じように独自に開発・追加も可能です。

4.処理を実行し結果を確認する

プレイブックに処理を記述した後はAnsibleを実行します。処理が正しく実施されたかを実行後に確認します。実行前のテストにはMoleculeというツールや、チェックモードで想定している処理が行われているか確認ができます。

Ansibleスクリーンショット

実行後の結果は、以下のような戻り値で表示されます。下記はその一例です。

  • ok
    • (処理成功)正常終了した
  • changed
    • (処理成功)変更が発生し、正常終了した
  • skip
    • (処理成功)実行条件に該当しなかったため、処理を実施しなかった
  • unreachable
    • (処理失敗)マネージドノードに接続できなかった
  • failed
    • (処理失敗)処理を実施したが、エラーが発生し、定義された状態とならなかった

具体的な用途を事例から学ぶ

既に多数の企業がAnsibleを利用して、多くのプロセスを自動化し、工数削減を実現しています。では、どのような企業が、どういったプロセスを自動化しているかについて、以下で解説します。なお、事例はRed Hat公式ページの掲載内容を一部引用しております。

みずほ情報総研 [みずほフィナンシャルグループ] (日本)

プライベートクラウドのハードウェアリソースにおけるセットアップ自動化のため、Ansibleを導入。仮想サーバー構築工数の78%削減に加え、作業期間を6週間から最短3日への短縮に成功し、設定作業の均質化によるインフラの安定性向上を実現。

ドイツ銀行 (ドイツ)

アプリケーションのPoCから実稼働に移すまでの期間が、従来の6~9か月から、2~3週間に短縮された。Ansibleによって、プロビジョニング、テスト、他の定型作業の自動化により工数が削減できたことに加え、アップグレードおよびメンテナンス時のエラーのリスクが軽減された。

シーメンス (ドイツ)

自動でデプロイとテストの実施が可能となった。また、監査を自動化したことにより、構成の品質向上と手作業の削減を実現。

キャセイパシフィック航空 (香港)

Red Hat Ansible Tower を使用して環境と変更要求を自動化し標準化することによって、正確性を向上させながら変更要求の時間を2週間から15分へと短縮。

このように、様々な用途における自動化が実現できる点がAnsibleが持つ価値といえます。


<ネットワーク自動化のお悩みは、エーピーコミュニケーションズにご相談ください>

ネットワーク自動化サービス「Automation Coordinator」
お客様ごとの最適な業務プロセスコンサルティングを含めたAnsibleによる自動化の導入(実際の運用)、ハイスキルなエンジニアによる並走型支援、クライアントワーク、チケットサポート、最終的にはお客様が自動化を自律して運用するためのスキル習得トレーニングまでをパッケージ化して提供するネットワーク運用の自動化支援サービスです。

APC-ACT
ACT(Automation Colabo Team)は株式会社エーピーコミュニケーションズ(APC)の自動化に特化したチームです。現在は特にネットワーク自動化に重点を置いています。
当ブログは、執行役員 名田と、マーケ担当 嶋津が主に情報発信を行っています。

Ansible Playbookとはなにか [書き方 | 基本 | YAML]

Ansible Playbookとはなにか

Ansibleを用いて具体的な処理を実施するうえで欠かせないのが、処理内容を記載する「Ansible Playbook (プレイブック)」です。以下では、Playbookについての概要とその書き方の基礎についてお伝えいたします。

プレイブック概要

プレイブックについてご説明する前に、まずはAnsibleがどのように動作しているか、改めて確認してみましょう。

Ansibleの実行順序は以下の通りです。

Ansibleの実行順序
(出典: Ansible実践ガイド第3版 著: 北山晋吾、佐藤学、塚本正隆、畠中幸司、横地晃[インプレス刊] P42 Figure 2-2 Ansibleの実行順序)

(1)インベントリからホストパターンに合うターゲットノードをリストアップする
(2)コントロールノードで、プレイブックをPython実行コードに変換する
(3)コントロールノードからターゲットノードにSSH接続を確立、SFTPでPythonの実行コードを送信する
(4)ターゲットノードで、Pythonの実行コードを実行し、処理した出力結果をコントロールノードに返す
(5)コントロールノード、ターゲットノードにある、Python実行コードを削除する

上記で、Ansibleに対して「こうした順番で、このような処理を行ってください」と伝えるのがプレイブックの役割です。具体的には、処理内容をYAML (.yml) で記載し、上記(2)にある通り、Pythonのコードに変換されて実行されます。なお、ネットワークモジュールなど一部のモジュールの場合は、ターゲットノードではなくコントロールノードでPyhonの実行コードが実行されます。

ちなみにYAMLは、最小限の構文で構成されているデータフォーマットで、そして多くのプログラミング言語に対応していることから、Ansible以外でも幅広く利用されています。例えば、コンテナ管理・デプロイの自動化などで用いられるKubernetesのリソースとデプロイメントにもYAMLを用いています。

このように、Ansibleにおいてプレイブックは処理実行の中核ともいえる役割があります。

プレイブックの書き方

次に、プレイブックの構成を理解したうえで、どのように書くかについて要約して解説します。

なおプレイブックでは、インデントと改行を利用して構造を表現する「ブロックスタイル」と、{ } や [ ] などを用いる「フロースタイル」を利用できますが、一般的には可読性の高いブロックスタイルが用いられます。以下の解説は、全てブロックスタイルとなります。

では、以下で全体の構成について解説します。

プレイブックの構成
(出典: Ansible実践ガイド第3版 著: 北山晋吾、佐藤学、塚本正隆、畠中幸司、横地晃[インプレス刊] P82 Figure 3-4 プレイブックの構成)

上記画像は、プレイブック全体を記述したものですが、「Play」が2つ存在します。1Playとは、一つのターゲット(hosts)に対する全ての処理を記載したものです。

1つのプレイブックで、複数のターゲットに対して処理を実施したい場合は、ターゲットごとに「Play」を別に記載する必要があります。上記では、hosts: all と、hosts: webserversに対して、それぞれ別なPlayで処理が記載されています。

では続いて、各セクションを見ていきましょう。

処理開始

はじめに、ブロックスタイルでは
--- (ハイフン3つ)
で開始します。

Targetsセクション

Targetsセクションは、処理を実施するターゲットノードの接続に関する情報を定義します。上記では、それぞれ別なPlayにおいて、hosts: all と、hosts: webserversがTargetsセクションに記載されています。

Varsセクション

Varsセクションは、タスクを効率化するための変数を定義します。プレイ変数と呼ばれ、以下の3つのディレクティブを用いて定義します。

  • vars
    • 基本の変数の定義
  • vars_files
    • 変数を定義した外部のYAMLファイルの複数読み込み実施
  • vars_prompt
    • 変数をユーザーに問い合わせ、対話入力させる。パスワードの 入力や、実行環境により異なる変数を用いる場合など。

なお、変数はVarsセクション以外でも利用可能です。

Tasksセクション

Tasksセクションには、実施したい処理内容をリストで定義します。タスクはリストの上から順番に実行されます。このため、実施したい処理を上から順番に正しく記載する必要があります。

Handlersセクション

Handlersセクションは、Tasksセクションで「notify」が指定されたタスクが更新された場合のみ実行されるセクションです。

Handlersセクションも、Tasksセクションと同様に、実行したい処理内容をリストで定義します。

ロールを用いたプレイブックの管理

Ansibleを大規模な環境で複雑な処理を実施する場合、1つのプレイブックにすべての処理を記述すると、プレイブックが肥大化して、運用管理面、または可読性の面で悪影響があります。そこで、「ロール」を用いることでこうした問題を管理できます。

(出典: Ansible実践ガイド第3版 著: 北山晋吾、佐藤学、塚本正隆、畠中幸司、横地晃[インプレス刊] P116 Figure 3-7 ロールの仕組み)

ロールとは、プレイブックを複数に分割し、別のファイルとして実行・管理できる仕組みのことです。上記画像の例では、「varsセクション」「tasksセクション」「handlersセクション」をそれぞれ別のプレイブック(別のYAMLファイル)とした上で、別々の場所に保管しています。

プレイブック作成・管理における注意点

Ansibleは 、YAMLベースのプレイブックを用いて、読みやすい構文で作成できる非常にシンプルかつ強力なソリューションです。この強みを損なうことなく活用するためには、プレイブック作成において注意すべき点があります。以下では、基本中の基本である3つのポイントを紹介します。

(1)作成者以外でも読めるようにする

組織内でAnsibleに関わるどのメンバーがプレイブックを見ても、内容を理解できるように可読性を高める必要があります。具体的には、YAML作成時のルール(タスク名、変数名、インデント数など)を決めておくべきでしょう。

(2)肥大化させない

1つの大きく複雑なプレイブックを作るのではなく、用途に応じてプレイブックを分割します。これにより、運用管理の効率化に加えて、エラー箇所の特定が容易になります。

(3)シンプルに書く

処理をできるだけ簡単に記述します。簡単に記述できる内容を、複雑な記述としないよう注意しましょう。


<ネットワーク自動化のお悩みは、エーピーコミュニケーションズにご相談ください>

ネットワーク自動化サービス「Automation Coordinator」
お客様ごとの最適な業務プロセスコンサルティングを含めたAnsibleによる自動化の導入(実際の運用)、ハイスキルなエンジニアによる並走型支援、クライアントワーク、チケットサポート、最終的にはお客様が自動化を自律して運用するためのスキル習得トレーニングまでをパッケージ化して提供するネットワーク運用の自動化支援サービスです。

APC-ACT
ACT(Automation Colabo Team)は株式会社エーピーコミュニケーションズ(APC)の自動化に特化したチームです。現在は特にネットワーク自動化に重点を置いています。
当ブログは、執行役員 名田と、マーケ担当 嶋津が主に情報発信を行っています。