なぜGUIを卒業してAPIに移行すべきなのか?
1つか2つのシンプルなラボを動かすだけなら、VMware Workstationのインターフェースを開いて仮想マシンを1つずつクリックしても問題ありません。しかし、CI/CDパイプラインを構築している場面を想像してみてください。コードをプッシュするたびに、テスト用にクリーンな状態(clean state)の仮想マシンを起動し、5分間のテスト後に自動で削除して8GBのメモリを解放するといった運用が必要な場合、手動操作は現実的ではありません。
多くの方はPowerCLIを思い浮かべるでしょう。非常に強力なツールですが、PowerShellやWindowsに依存するという制約があります。一方、VMware Workstation REST APIは圧倒的に柔軟です。LinuxのBashスクリプト、Pythonアプリケーション、さらにはPostmanからでも仮想マシンを制御できます。
大規模なプロジェクトの実例では、APIを利用することで環境構築時間を90%削減できることもあります。ラボの準備に15分かけていた作業が、たった1つのコマンドで完了するようになります。
クイックスタート:2分でAPIサーバーを起動する
デフォルトでは、VMware WorkstationのAPIサーバーは有効になっていません。インストールディレクトリにある実行ファイル vmrest.exe を使用して、手動で起動する必要があります。
ステップ1:認証情報の設定
まず、管理者権限でターミナル(cmdまたはPowerShell)を開きます。C:\Program Files (x86)\VMware\VMware Workstation ディレクトリに移動し、ユーザー名とパスワードを作成するコマンドを実行します。
vmrest.exe -u admin -p MySecretPassword
注意:このパスワードは、後ほどHTTPリクエストの認証に使用されます。
ステップ2:サーバーの実行
設定完了後、以下のコマンドを入力するだけです。
vmrest.exe
Served to http://127.0.0.1:8697 と表示されれば、サーバーはリクエストを受け付ける準備が整っています。
VMware REST APIの仕組み
このAPIは、ポート8697で待機するローカルWebサーバーとして機能します。仮想マシンの管理操作はすべて、GET、PUT、POSTといった標準的なHTTPリクエストを通じて行われます。
認証(Authentication)
認証には Basic Auth(基本認証)を使用します。Base64でエンコードされたユーザー名とパスワードをヘッダーに含める必要があります。Postmanを使用する場合は、「Authorization」タブで「Basic Auth」を選択し、情報を入力するだけで完了します。
仮想マシン一覧の取得
既存の仮想マシンのIDを取得するには、エンドポイント /api/vms に対して GET リクエストを送信します。
cURLを使用した例:
curl -u "admin:MySecretPassword" -X GET http://127.0.0.1:8697/api/vms
レスポンスはJSON配列で返されます。後のステップで仮想マシンを制御するために必要となるため、id の値をメモしておいてください。
実践:コマンドラインで仮想マシンを操作する
よく使われる3つの主要なコマンドを紹介します。
1. 仮想マシンの状態を確認する
仮想マシンのIDが ABC123XYZ である場合、確認コマンドは以下のようになります。
curl -u "admin:MySecretPassword" -X GET http://127.0.0.1:8697/api/vms/ABC123XYZ/power
2. 仮想マシンを起動する(Power On)
PUT メソッドを使用し、ボディに on を渡します:
curl -u "admin:MySecretPassword" -X PUT http://127.0.0.1:8697/api/vms/ABC123XYZ/power -H "Content-Type: application/vnd.vmware.vmw.rest-v1+json" -d "on"
3. 仮想マシンを安全にシャットダウンする
急に電源を切るのではなく、shutdown を使用してゲストOSを適切な手順でシャットダウンさせます:
curl -u "admin:MySecretPassword" -X PUT http://127.0.0.1:8697/api/vms/ABC123XYZ/power -H "Content-Type: application/vnd.vmware.vmw.rest-v1+json" -d "shutdown"
Pythonによる一括管理の最適化
仮想マシンの数数十台に及ぶ場合、1つずつcURLコマンドを打つのは非常に時間がかかります。Pythonは、これらを一括処理するための完璧なソリューションです。
import requests
from requests.auth import HTTPBasicAuth
BASE_URL = "http://127.0.0.1:8697/api"
AUTH = HTTPBasicAuth('admin', 'MySecretPassword')
def power_on_lab_vms():
# すべての仮想マシンリストを取得
vms = requests.get(f"{BASE_URL}/vms", auth=AUTH).json()
for vm in vms:
# "Lab"ディレクトリ内の仮想マシンのみを起動
if "Lab" in vm['path']:
url = f"{BASE_URL}/vms/{vm['id']}/power"
headers = {'Content-Type': 'application/vnd.vmware.vmw.rest-v1+json'}
requests.put(url, auth=AUTH, headers=headers, data="on")
print(f"起動コマンド送信完了: {vm['path']}")
power_on_lab_vms()
導入時の実践的なアドバイス
- データセキュリティ: ポート8697をインターネットに公開しないでください。LAN経由でリモート制御が必要な場合は、特定の固定IPのみを許可するようにファイアウォールを設定してください。
- ポート競合の解決: ポート8697が他のアプリケーションで使用されている場合は、
vmrest.exe -p 9000のようにコマンドで別のポートに変更してください。 - 必須要件: シャットダウンや仮想マシンのIP取得などの機能は、対象の仮想マシンに VMware Tools がインストールされている場合にのみ動作します。
- 内部ドキュメント: VMwareにはSwaggerインターフェースが組み込まれています。ブラウザで
http://127.0.0.1:8697にアクセスするだけで、APIドキュメントの閲覧や直接テストが可能です。
REST APIを使いこなすことで、徐々にInfrastructure as Code (IaC) の考え方へとシフトできます。手動操作を卒業し、コードでラボシステムを自動運用しましょう。

