PowerShellの運用自動化の事例を知りたい!
こんなお悩みを現役インフラエンジニアが解決します。
☑本記事の内容
・PowerShellとは?
・PowerShellで自動化したこと
・自動化する上で大事だと思ったこと
☑本記事の信頼性
・運用監視〜要件定義迄幅広いフェーズを経験
・運用自動化や業務改善に興味有り
このような形で運用監視の現場を2つ経験し、現在はSIerでインフラエンジニアとして勤務しています。
僕の詳しい経歴が知りたい方は、以下のnoteの記事を読んでもらえればと思います。
本記事を読むメリット
・PowerShellでできることがわかる
・自動化する上で大事なことがわかる
今回の記事では、僕が実際に経験したPowerShellを用いた運用自動化の事例についてご紹介したいと思います。
これから運用自動化について考えている方などに参考になればと思います。
注意ポイント
常駐先で作成していたスクリプトのため、コードはありません。
あくまでも「どんなスクリプトを作成したのか」ということを紹介するための記事になります。
ご了承下さい。
では、本題に入っていきたいと思います。
PowerShellとは?
PowerShellとは、Microsoftが開発したスクリプト言語およびキャラクターユーザーインターフェイス(CUI) の1つになります。
簡単に言うと、「Windows上の操作をコマンドでできるツール」です。
PowerShellでできること(例)
・単純作業の自動化
例)csvファイル作成
・データ抽出
例)csvやテキストファイルからのデータ抽出
・WindowsOS設定
例)IPアドレスやホスト名設定
このように、手作業で実施することが大変な単純作業やデータ抽出等をPowerShellで実施することが可能です。
インフラエンジニアの実務でWindowsServerやExchangeServer等を触ることがありますが、「PowerShell」という言葉は必ずと言ってもいいほど出てきます。
あくまでも僕のケースですが、「何かやりたいことがある」という場合にPowerShellのコマンドや構文を検索しながら実行するケースが多かったです。
過去にPowerShell系の記事を投稿しております。
こちらも併せてご覧頂ければと思います。
【WindowsServer】PowerShellにてリモートデスクトップ迄設定する方法
Linuxコマンドに慣れていれば、PowerShellもとっつきやすいと思います。
PowerShellで自動化したこと
実際の業務でPowerShellを用いて自動化したことは以下になります。
・VMware vSphereに仮想マシンを作成
・HorizonViewのPoolにアカウント追加
・仮想マシンとアカウントの紐付け
全て挙げたら多いため、今回は一部の事例として紹介します。
では、紹介していきたいと思います。
VMware vSphereに仮想マシンを作成
「VMware vSphere」という仮想化基盤上にVMテンプレートを用いて、複数のVMをまとめて作成する作業になります。
以下の図は、スクリプトの動作を図にしたものになります。
使用した技術は、以下になります。
使用した技術
■コード
・PowerShell
・PowerCLI
■コード実行環境
WindowsServer2012R2
スクリプトの動作については、以下になります。
スクリプトの動作
①作成する仮想マシン情報が記載されたcsvファイルを読み込む
②事前確認を実施する(同じ名前の仮想マシンが既に存在するか等)
③Masterフォルダに存在する「VMテンプレート」とvCenter上に存在する「カスタマイズ仕様」を用いて、VM格納フォルダに指定した台数分仮想マシンを作成する
■カスタマイズ仕様とは?
仮想マシンを作成した際に、コンピュータ名やパスワード、ドメイン参加設定等を自動で実施してくれる便利な機能になります。
VMwareのvCenter上で設定し、使用することができます。
参考情報:仮想マシンのゲストOSのカスタマイズを実施する
カスタマイズ仕様にカスタムスクリプトを組み込めるのですが、そのスクリプトの検証で苦労しました。
VMテンプレートにカスタマイズ仕様実行時に実行するスクリプトを組み込むのですが、想定通り動作せずに試行錯誤しておりました。
結果的に動作するようになりましたが、過去に在籍していた方が作成したVBSスクリプトだったので、取っ掛かりが大変でした。
このように、苦労しながらもVMテンプレートから仮想マシンを複数作成するスクリプトを作成しました。
現場に元々あったスクリプトに確認処理や追加処理等を加えて、本作業の仕様にしました。
エラー処理の確認が大変でした。
HorizonViewのPoolにアカウント追加
VMware HorizonViewというデスクトップ仮想化ソフトウェア上の運用作業の自動化になります。
「Pool」というまとまりにアカウントを追加する作業の自動化になります。
以下の図は、スクリプトの動作を図にしたものになります。
使用した技術は、以下になります。
使用した技術
■コード
・PowerShell
・PowerCLI
・View PowerCLI
■コード実行環境
WindowsServer2012R2
スクリプトの動作については、以下になります。
スクリプトの動作
①Poolに追加するアカウント情報を記載したcsvファイルを読み込ませる
②Pool内の確認処理実施(同じアカウントが存在しないか等)
③PoolにHorizonView上に存在するアカウント(ActiveDirectoryと同期しているアカウント)を追加する
こちらの処理のスクリプト化については、VM作成のスクリプトと比べて難易度が低かったです。
View PowerCLIのコマンド知識については勉強が必要でしたが、比較的エラー処理や確認処理が少なかった記憶があります。
VMware HorizonViewについて気になる方は、以下の記事をご覧下さい。
また、過去にQiitaにHorizonView関連の記事を投稿しているので、こちらも併せてご覧下さい。
【VMware】HorizonViewのクローン方式の種類3つ
【VMware】ユーザーへの仮想マシン割り当て方式(HorizonView)
このスクリプトを作成した際は、VMware HorizonViewについて概要しか知らない状態でした。
しかし、Google先生に確認したり等、手探りでなんとか作成しました。
仮想マシンとアカウントの紐付け
最後は、仮想マシンとアカウントの紐付け対応の自動化の紹介になります。
仮想マシンとアカウントの紐付け対応を図にすると、以下になります。
図の通り、Poolに追加した仮想マシンと対象アカウントを紐付ける作業になります。
ユーザーが仮想化デスクトップを使用するためには、これを実施する必要があります。
使用した技術は、以下になります。
使用した技術
■コード
・PowerShell
・PowerCLI
・View PowerCLI
■コード実行環境
WindowsServer2012R2
スクリプトの動作については、以下になります。
スクリプトの動作
①仮想マシンやアカウント情報が記載されたcsvファイルを読み込ませる
②事前確認処理が走る(既に紐付けがされているか等)
③仮想マシンやアカウント情報をそれぞれ紐付け
こちらのスクリプトは、確認処理の実装で苦戦した記憶があります。
HorizonViewの仕様で思うように確認処理やエラー処理がうまくいかず、何度もテストをしました。
結果的にテストをしながら改良に改良を重ねて、運用作業で使用できるスクリプトに育て上げました。
確認処理やエラー処理、使いやすさに拘ったスクリプトになります。
コードをアウトプットできるのであれば、アウトプットしたかったです。
自動化する上で大事だと思ったこと
作成したスクリプトの事例についてご紹介してきましたが、自動化する上で大事だと思ったことは以下になります。
自動化する上で大事なこと
・ドキュメントをきっちり整備する
・他の人から見ても分かりやすいコードを意識する
・可能な限り処理を簡略化する
・エラー処理や確認処理をきっちりする
作成したコードの保守について属人化していると、システム担当者が現場から抜けた際に他の方が苦労します。
そのため、「コードの改修のしやすさ」と「ドキュメントの整備」は大事になってきます。
属人化を排除しておくと、他の方が苦労せずに済みます。
エラー処理や確認処理の部分も意識して、当時はスクリプトを作成しました。
運用監視オペレーターを経験していたので、「フールプルーフ」の考え方を大事にしております。
フールプルーフにつきましては、以下の記事をご覧下さい。
自分一人で使うスクリプトであれば、保守が簡単です。
しかし、他の方もスクリプトを使用する場合は、ドキュメントの整備等が重要です。
さいごに : 自動化は難しいが面白い!
今回は、今まで作成したPowerShellスクリプトの事例について徒然なるままにご紹介しました。
今回紹介した事例をまとめると、以下になります。
今回紹介した事例
・VMware vSphereに仮想マシンを作成
・HorizonViewのPoolにアカウント追加
・仮想マシンとアカウントの紐付け
今回紹介したPowerShellスクリプトについては、ほぼ独学で作成しました。
職場にPowerShellについて詳しい方が少なかったため、最初は苦労しました。
しかし、運用監視オペレーター時代にマクロ作成等に注力していたため、その経験が活きました。
当時作成したスクリプトをGitHubにPushできたら一番ですが、できないのが残念ではあります。
しかし、「PowerShellでこんなことができるよ」ということで参考にして頂けたら幸いです。
今回は以上です!
YouTubeもやっておりますので、良かったら視聴とチャンネル登録をお願いします。