仮想マシンをたくさんデプロイしてテストとかする時の準備作業テンプレート

#仮想マシンをたくさんデプロイしてテストとかする時の準備作業テンプレート

テストや検証で同時負荷を測ったり、いろんなパターンでデータを取ったりするときに、仮想マシンをたくさんデプロイして検証することが結構あります。
検証作業に入る前準備が思いの外手間で、「あと何必要だっけ～」とやっていると時間があっという間になくなります。また、デプロイした後に、「あっ、あれ忘れてた」ってなると、デプロイした１台１台に設定入れ込んで・・・とかして後戻り時間が結構かかったりと非効率なので、自分の準備内容をテンプレートとしてまとめてみました。

今回は負荷試験を想定してまとめましたが、要所要所は他作業での応用できると思います。

##前提条件
デプロイVM、作業マシンはともにWindows2008R2
VMware vSphereのバージョンは5.5を想定した手順です。


##デプロイ用のひな形VMの初期設定

まずは展開用のVMの仕込み作業。
作業目的によって仕込みは変わってくるけれど、基本方針としては「1.リモートアクセス」、「2.セキュリティを下げる」、「3.ユーティリティのインストール」を行っていく工程です。「2.セキュリティを下げる」とは作業の妨げになるようなセキュリティ、例えばログイン時のパスワード入力を省略できるようにする、などの設定のことです。１度や２度なら大した手間ではないのでどちらでも構わないけど、作業を行う上で何回も必要になるものはセキュリティをガンガン落としてでも省略できるように工夫すべきです。手間が問題というより集中力が低下することが問題になることが多いからです。１秒の待ち時間や横道の作業が積み重なると、集中力を切らし、イライラし、クリエイティブが働くなります。



###・ファイアーウォール無効化
[スタート]->[管理ツール]->[セキュリティが強化されたWindowsファイアーウォール]をクリック
[Windowsファイアーウォールのプロパティをクリック]し[ドメインプロファイル]、[プライベートプロファイル]、「パブリックプロファイル]をすべて[無効]にする。


###・リモートデスクトップを有効化
[スタート]->[コンピュータ右クリックしてプロパティ]->[リモートの設定]->[リモートデスクトップを実行しているコンピュータからの接続を許可する]を選択し[OK]


###・DHCPでのIP取得設定
IPアドレスやDNSサーバ設定は自動取得するように設定する。
DNSサーバ立てなくてもWindowsなら同一セグメントはホスト名でアクセスできるので便利。


###・ESC無効化
サーバOSのブラウザはセキュリティが高く設定されていて、ページアクセスするたびに[本当にアクセスするの？？]っていちいち聞いてくてウザイのでその設定を切ります。

[スタート]->[管理ツール]->[サーバマネージャ]->[IE ESCの構成]にてAdministratorグループ、Usersグループともに[無効]にする。


###・サーバマネージャー非表示
デフォルトではログインするごとにサーバマネージャが自動起動します。
便利なときもあるけど、設定が一通り完了したあとは邪魔なので自動起動しないようにします。
[スタート]->[管理ツール]->[サーバマネージャ]->[ログオン時にこのコンソールを表示しない]にチェックをつける。


###・コマンドプロンプトを使いやすく設定。
[コマンドプロンプトを開く]->[左上のアイコンを右クリックして規定値をクリック]

[オプションタブ]->[簡易編集モード]にチェックをつける。
[レイアウトタブ]->[画面バッファ　幅]->[150]
[レイアウトタブ]->[画面バッファ　高さ]->[9999]
[レイアウトタブ]->[ウィンドウのサイズ　幅]->[150]

その他、お好みで設定。


コマンドプロンプトたよるんじゃなくて、ConEmu入れたほうがもっと便利かも、と思って最近はもっぱらComEmu派です。


###・Guestユーザの有効化
Guestユーザを使うとパスワードなしでアクセスできたりしてたまに便利
作業用ユーザのパスワードを空にすればいいじゃん、って意見もあってそっちでももちろんOK
ただAdministratorのパスワードを空にするのはオススメできない。
アプリの仕様によってはたまに不具合がでることがあるので。

[スタート]->[コンピュータ右クリック]->[管理]->[構成]->[ローカルユーザとグループ]->[ユーザ]

Guest右クリック->[プロパティ]->[全般タブ]->[アカウントを無効化する]のチェックを外す
同様にGuest右クリック->[パスワードの設定]->[パスワードを入力しないままOK]でパスワードを空にする。

空のパスワードが設定できない場合はグループポリシーの設定を変更する。
[ファイル名を指定して実行]->[gpedit.mscと入力しEnter]->[コンピュータの構成]->[Windowsの設定]->[セキュリティの設定]->[アカウントポリシー]->[アカウントの設定]->[複雑さの要件を満たすパスワード]を[無効]に設定する。




###・telnetサーバのインストール＆有効化
Windowsであってもリモートでコマンド操作ができると便利！

[スタート]->[管理ツール]->[サーバマネージャ]->[機能の追加]->[ウィザードにしたがってtelnetサーバ]を追加

サービスを有効化する。
[スタート]->[ファイル名を指定して実行]->[services.msc]->[telnetを右クリックしてプロパティ]->スタートアップの種類を[自動]に設定する。
ついでに手動でサービス起動し接続できるか確認もする。

###・PowershellのExecutionPolicy
PowerShellを起動し、以下コマンドを投入
Set-ExecutionPolicy Unrestricted 



##ユーティリティ
必要なソフトウェアを色々インストール。ここは必要応じて。

###・VMware Tools
VMwareの仮想マシンなら必須

###・java Runtime Enterprise
必要になること多し

###・PowerShellServer
PowerShellにSSH接続できるようになるツール。
Telnetでもいいけど、SSHもできるようにしておくと後で役に立つかも。

詳しいことは省略しますが、例えば[ココ](http://orebibou.com/2014/05/windows%E3%81%A7ssh%E6%8E%A5%E7%B6%9A%E3%81%A7%E3%81%8D%E3%82%8Bpowershell-ssh-server%E3%81%AE%E6%A7%8B%E7%AF%89/)が参考になるんじゃないかな。

###・ConEmu
詳しいことは省略しますが、例えば[ココ](http://www.moongift.jp/2014/10/conemu-%E8%87%AA%E5%88%86%E5%A5%BD%E3%81%BF%E3%81%AE%E8%A4%87%E6%95%B0%E3%81%AE%E3%82%B3%E3%83%B3%E3%82%BD%E3%83%BC%E3%83%AB%E3%82%92%E3%80%81%E3%81%B2%E3%81%A8%E3%81%A4%E3%81%AE%E3%82%A6%E3%82%A3/)が参考になるんじゃないかな。




##VM産のためのコマンドたち

###・下準備～カスタマイズ仕様の作成～

PowerCLIを使ってVMも大量デプロイする。

まず、カスタマイズテンプレートを作成する。
適当なVMをクローンし、ウィザードを進める。
[ゲストのカスタマイズ]で[カスタマイズウィザードを仕様してカスタマイズする]を選択し、次へ。
後はウィザードにデプロイVM用の設定をいれこんでいく、コンピュータ名は[仮想マシン名を使用]を選択しておくと仮想マシン名とホスト名が一致して管理しやすい。

一通り設定をしたら[使用の保存]画面で名前をつけて保存する。


###・デプロイ

仮想マシンをクローンするためのコマンドは次のとおり
``` bat
New-VM -Name 'VMNAME' -VMHost 'HOSTNAME' -OSCustomizationSpec 'OSTEMPLATE' -VM 'ORIGINALVM' -Datastore 'DATASTORE'
```

オプションの説明は

- -Name 'VMNAME' 
　仮想マシン名
- -VMHost 'HOSTNAME' 
　ESXホスト名。Get-Hostで確認する。
- -OSCustomizationSpec 'OSTEMPLATE' 
　上で作成したカスタマイズ仕様名。Get-OSCustomizationSpecで確認する。
- -VM 'ORIGINALVM' 
　クローン元VM。Get-VMで確認する。テンプレートからクローンする場合は -Template 'TEMPLATENAME'
- -Datastore 'DATASTORE'
　データストア名。Get-Datastoreで確認する。



で、例えば１０台デプロイする場合、FORを使って以下のようにする。


```
for ($i=1; $i -le 10; $i++){ 
  $vmname="VMNAME" + $i.ToString("00")
  New-VM -Name $vmname -VMHost 'HOSTNAME' -OSCustomizationSpec 'OSTEMPLATE' -VM 'ORIGINALVM' -Datastore 'DATASTORE'
}
```


##作業用マシンの仕込み作業
作業用マシンの仕込み面倒に感じると思うけど、後でやる方が絶対に効率が悪い。
後の苦労を先に買い取るつもりで設定していまおう

###・リモートデスクトップのショートカット作成
デプロイしたマシンにダブルクリックでRDP出来るようにショートカットを作成する。
作り方はリモートデスクトップの画面で必要な設定を入力後にオプションを開いて、[名前をつけて保存]すればよい。
パスワードの埋め込みもできるからリモートアクセスが快適になる。


###・TeraMenuの設定
CLI接続もTeraMenuを使ってクリックだけで接続できるようにすると快適になる。



###・Configなどの流し込み用バッチ作成。
Configをいろいろ変えたいときはあると思うけど。デプロイしたVM１台１台に設定しなおしていたらゲンナリしてします。
例えばこんな感じのバッチを用意して、バッチ１つですべてのVMにConfigを配布できるようにしている。

``` bat
@echo off

rem 作業フォルダに移動
cd C:\Users\Administrator\Documents

FOR /F "eol=#" %%i IN (hostlist.txt) DO (
  echo %%i

  rem Configの配布
  copy /Y "*.conf"  \\%%i\C$\Users\Administrator\Documents\

  rem 提携処理を走らせたい場合、スタートアップスクリプトにコピーしてしまえば、あとはRDP接続するだけで勝手に実行されて地味に便利
  copy /Y "logon.bat" "\\%%i\C$\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\"

)

rem 
pause > nul

```

hostlistはデプロイしたVMのホスト一覧
例えば以下みたいにして仕様する。先頭に#をつければそのホストは無視されファイルコピーが行われない。下の例だとVM01、VM04だけConfigが配布される。

```
VM01
#VM02
#VM03
VM04

```


###・ユーティリティ
作業マシンに必要なユーティリティを入れていく。

完全に自分メモだがよく使うものを記録しておこう

- JRE
- Adobe Flash Player
- Adobe Reader
- Microsoft Silverlight
- PowerCLI
- ConEmu
- Winshot
- ExPing
- EmEditor
- Chrome
- Firefox
- Teraterm
- OpenOffice
- BlackJumboDog
- DaemonTools
- Lhaplus



##編集後記
PowerShellがこんなに便利なんて今更ながらしりました(////)
しかし、比較演算子をなぜ-gtとかにしたんだろ？
最近のスクリプト系言語に合わせた方が皆幸せになれると思うんだけどなぁ