弊社では、何度も行う作業は自動化しようといった様な暗黙の了解があったりします。私もその意見には賛成で、Ansibleを使った環境構築の自動化について数年前からドキュメントを見たり、実際に試すなどして理解を深めていました。
そして最近、1度しか行わないようなデモ用の環境構築であっても、可能な限り自動化を取り入れようと思いました。
まずはAnsibleのPlaybookを作っていくわけですが、OSSのAnsibleだけを使っていくとなるとさまざまな問題があることに気がつきました。
例えばAnsibleは、さまざまな機器に対してモジュールを活用して設定の自動化が行えますが、Ansibleの実行環境が必要になります。まあpipでansibleを入れるだけではあるのですが、その前にPython3のインストールが必要になります。OSによってはPython3がデフォルトで入っている場合がありますが、もっと新しいバージョンのPython3をインストールしたい場合があるかもしれません。OSにPython3を入れる場合、注意しないとシステムがうまく動かなくなる(例えば内部的にPython3のモジュールを使っているaptコマンドとか)こともあります。Python3の仮想環境を使って回避できますが、チョイっと面倒です。
さらにAnsibleのインベントリーとPlaybook、テンプレートなども必要になります。それらの管理はどうしましょうか。流石にクライアントに保管してファイル管理するわけにもいきません。え、クラウドストレージとかSambaなどで共有?そんな馬鹿な。
話を戻して、GitHubなどのGit Serverにシェアすれば良さそうでしょうか。一見良さそうですが、Git ServerにPushしたAnsibleのインベントリーとPlaybook、テンプレートをCloneしたとしても、そのマシン上にPython3とAnsibleの実行環境が必要になります。Python3とAnsibleをインストールすれば解決しますが、そのマシンのPython3とAnsibleのメンテナンスが必要になり管理が大変です。
そこで、半年くらい前にとある案件で調査したExastro ITAを自分のプロジェクトで利用することにしました。Exastro ITAについてはこのブログでも何回か取り上げています。詳細は以前の記事を見ていただくことにして、重要なポイントは次のとおりです。
- Ansible,Terraformに対応している
- それらはExastro ITAサーバー上に環境が用意されている
- Exastro ITAのWebインターフェイスから操作できる
- IaCをモジュール化して組み合わせたジョブを実行できる
- ジョブの実行状況をWebインターフェイスで確認できる
- ジョブの実行ログは蓄積される
- Playbookに変数を利用できる
- 変数をExastro ITAのパラメータシート機能を使って埋め込んでジョブを実行できる
- 一つ(もしくは複数)のPlaybookを使って色々な環境を構築できる
- 変数をExastro ITAのパラメータシート機能を使って埋め込んでジョブを実行できる
- Git連携機能がある
- Git連携を使わない場合はPlaybookの登録は手動なのですが、連携しておくとリモートのGitソースにあるPlaybookを使えます(実際は定期的にコミットを監視しています)。リモートGitソース上のPlaybookを素材として登録すると、 Exastro ITAのジョブで利用可能になります。
- Symphony,Conductorなどを設定して機能を組み合わせると、ジョブの定期実行も可能です。
- 設定の追加や更新にExcelのシートが使える
- 設定するノードが多いとWeb画面で一つ一つ設定するのが大変なので、この機能はありがたいです。ちゃんと必要な情報を設定した後にExcelのシートをダウンロードすると、選択肢から内容を選んで設定とかもできます。行が多い場合はコピペでもOKです。
本題...
というわけで、利用開始することにしました。 まずはサーバーの管理画面です。とりあえず、「サーバーにOSをデプロイしたらここに登録する」ことにしました。
次にこれがPlaybook素材の一覧です。まだ使い始めたばかりなので少ないですが、これからここに徐々に他のPlaybookが増えていくと思います。
こちらはCI/CD for IaCの管理画面です。ここでリモートGitソースと連携する設定を行います。
そのソースの情報をExastro ITAのジョブで利用するための素材の定義は「素材紐付」の画面で行います。例えば「git-ping」という名前を呼び出すと、設定したリモートリポジトリー上にある素材パスに指定した素材を紐付先資材タイプで指定した素材としてジョブで利用できます。
こちらがオペレーションの設定一覧です。そのオペレーションは何時ごろに予定しているのか...といった設定を行います。この設定は作業ごとにオペレーションの作成を行なっていきます。
こちらがMovementの一覧です。使い始めたばかりなのでまだ少なめです。
こちらがMovementとPlaybook素材の紐付けの設定一覧です。Exastro ITAのMovementはジョブのことです。
ここまでの設定で、「1.どのオペレーションを呼び出す」と「2.どのマシンに対して」、「3.どういった作業をするか」が関連づけられます。若干作業を実現するために複雑なことをやっているように見えてしまうかもしれませんが、共通する作業を使い回し、組み合わせて実行できると思えばうなづけると思います(少なくとも私はうなづいた!)。
複数の作業を組み合わせて一つのジョブにするには、SymponyやConductorを使います。それぞれの違いについては末尾に張っているリンク先の情報をそれぞれ参照してください。例えば例のように、「UbuntuサーバーにDockerをインストールして、システムのアップデートをしたら再起動」といったジョブなんかも定義できます。PlaybookをモジュールかできるExastro ITAならではの機能だと思っています。
こちらがジョブの定義実行の管理画面です。スケジュールの設定も柔軟にできる様です。
「作業対象ホスト」の設定で、オペレーションにMovementと作業対象ホストを関連づけます。今後はパラメータシート機能や代入値管理機能、代入値の自動登録なども活用しようと思っています。
どの様な効果が期待できそうか
Exastro ITAを使ってどの様な効果が期待できそうか、考えてみました。
- 実行環境を作業マシンに入れる必要がなくなり、負担が減る。
- 誰が実行しても同じ様に動く(Ansibleのバージョン、モジュールのバージョン、OSやPythonのバージョンに依存されない)。
- Playbookをモジュール化して利用することで共通する作業を毎回手作業する必要がなくなり、効率化アップ。
- 実行結果やログは蓄積されるので状況把握がしやすい。
- その「作業」はどういった手順で環境を整えるのか視覚化される。
- 複数の設定はExcelシートで投入できるのでExcel大好きな日本人向き。
継続して使っていけば、そのほかにも色々利点が見えてくると思います。必要に応じてTerraform Driverも使おうと思っています。 これからもExastro ITAを使っていこうと思います。
参考情報
- Quickstartやさまざまな機能について学ぶ
- Exastro ITAの導入方法について知る
- 動画とコンテンツを通じてExastro ITAを学ぶ
- 詳細なドキュメントを確認する
- Exastro ITAについてディスカッションしたい
- 設定のテンプレート一覧
そのほかQiitaでExastroで検索すると、そのほかにも参考になる情報を入手できる様です。