BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】Ansibleの実用事例について/100台超の仮想マシン展開

こんにちは! BFT名古屋支店の、佐野です。

最近はAWSの、特にCloudWatch関連の記事を連続してお送りしておりましたが、今回は筆者自身の備忘録もかねて少しだけAnsibleについてと、Ansibleを導入した事例を紹介します。


はじめに

そもそも根本的なところとして、Ansibleとはなんぞや?というのがあります。
改めて解説をすると、AnsibleとはOSSの構成管理ツールであり、Playbookと呼ばれる設定ファイルを使用して操作対象となる物理・仮想マシンおよびネットワーク機器の設定を行なうことができるものです。
Playbookの内容を適用する操作対象は一度に複数定めることができ、多くのマシンに対して同様の設定を同時かつ自動的に施すことができるため、自動化に使用するためのツールとして注目されています。

さらにAnsibleはひとつの元となる仮想マシン(マスターイメージ)の設定をベースとして、同時に複数の仮想マシンを複製・展開することができます。
今回の事例は、特にこの仮想マシン複製の機能を用いたものとなります。


今回の要件

今回の事例の要件は、マスターイメージとなる3種類の仮想マシンWindows2台、WindowsServer1台)を元に、100台を超える数の仮想マシンVMware上に展開するというものです。
この3種のマスターイメージはOSはもちろんのこと、それぞれメモリやドライブ容量などが異なり、また展開先に応じてネットワークアダプタの数にも違いを持たせなければなりません。
また展開後の作業として以下の確認と設定を行なう必要がありました。

  • Pingによる疎通確認(正しいIPで作成できたかどうか、疎通するか)
  • 「通知とアクション」の無効化
  • Windows Updateの実施
  • ライセンス認証
  • IPv6設定の無効化
  • 仮想マシンの再起動

もしもこれを1台1台手作業で行なうとしたら、果たしてどれだけの時間がかかるか、どのくらい人的ミスが起こる機会があるか……
あまり想像したいことではありません。

ですがAnsibleを用いれば、これを全て自動的に行ってくれます。
仮想マシンを大量に作成するわけですから、実施から完了までは時間がかかるもの、全て手作業で行なうよりも圧倒的に早く、また確実に展開することができます。


構成イメージ:仮想マシンの自動展開

実際に行なった、Ansibleによる仮想マシンの複製・展開のイメージは以下の通りです。
(細かい数値などは架空のものを入れております)

f:id:bftnagoya:20201209212204p:plain

まずvCenterServerにネットワークが通じているAnsibleサーバー(コントロールノード)に以下を用意し、仮想マシン展開の準備を整えます。

  • 展開用のPlaybook
  • 展開する仮想マシンの設定(Playbookが参照する数値)が入ったCSV
    CSVは展開するグループ毎に分けられています
  • 展開・操作対象となる仮想マシンの名称と、それらを管理するvCenterの情報が入ったインベントリファイル

そしてAnsibleサーバー上で展開用のPlaybookを実行することで、インベントリファイルで指定した仮想マシンを、Playbookが展開し、CSVに記された通りの設定を行ないます。
また、作成する仮想マシンのグループ分けは、Playbook内のコードおよびCSVによって行っています。

仮想マシンの展開が終わった後、展開した仮想マシンに対する設定変更を行なっていきます。


構成イメージ:展開後仮想マシンの設定

展開後の仮想マシンの変更のイメージは以下の通りです。

f:id:bftnagoya:20201209212207p:plain

設定変更には、展開用に使用したPlaybookやインベントリファイルとは別の、設定変更用のPlaybookおよびインベントリファイルを使用します。
Playbookはそれぞれの設定内容に応じたものを個別に用意し、その変更対象を定めるインベントリファイルもそれぞれ別に用意します。
(インベントリファイルについては、本件の際はWindows用とWindowsServer用という形で分けて用意しました)
また展開時と違い、設定内容は全てPlaybook内に記述していたため、CSVは使用しません。

用意した設定変更用のPlaybookを実行することで、インベントリファイルで指定した操作対象全てに変更が適用されます。

展開・設定共に全て手作業によるものではなく自動で行われますので、PlaybookやCSV、インベントリファイルに間違いがない限り、確実で正確な作業結果が得られると言えます。


最後に

手作業では途方もない作業量である今回の件も、Ansibleによって自動化を行なったおかげで極めて短期間で行なうことができました。
昨今では工数の削減からIT基盤の迅速・柔軟な整備・変更のための仕組みとして、こういった自動化の導入が進んでいます。
特に今回のような、手作業で行なうにはあまりにも膨大で、かつ人的ミスが生じやすい作業は、優先的に自動化するべきところであると考えます。

ただ最初から全てを自動化、というわけではなく、今回のように「自動化できるところから自動化する」というのが進めやすいかと思います。
もしこの記事をご覧の方で自動化を考えている方がいらっしゃいましたら、今回の内容をご参考に考慮頂ければ幸いです。