こんにちは、石川です。
前回のAWS WorkSpacesプロトコルの続編で、今回は複数を一括して変更する手順を紹介します。
はじめに
WorkSpacesを運用していると、複数のWorkSpacesにおいて、PCoIPからWSP(WorkSpaces Streaming Protocol)への変更が求められる場面があります。
本記事では、CloudShellとAWS CLIを活用し、既存のWorkSpacesを一括でWSPへ切り替える方法を紹介します。
第1章:手動変更の限界
WorkSpacesのプロトコルを1台ずつ変更する場合、操作ミスや設定漏れのリスクが高まります。
また、数十〜数百台規模の変更をGUIで実施すると、確認・再設定だけでも多くの時間を要します。
特に、検証環境や全社リプレースなどのタイミングでは、自動化による一括変更が現実的な選択肢となります。
この課題を解決するために、CloudShell上で安全に一括変更できるスクリプトを準備しました。
第2章:CloudShellで一括変更する仕組み
今回のスクリプトのポイントは、「対象WorkSpacesを明示的に指定し、安全にプロトコル変更を実行する設計」です。
WorkSpacesのプロトコル変更は、実行後に再起動を伴うため、対象の選定を誤ると業務影響が出る可能性があります。
そのため、事前に「対象一覧ファイル(ws_ids.txt)」を用いて、変更対象を明確化しています。
スクリプトは以下のような仕組みで動作します:
- REGION変数を指定し、リージョン単位で処理を実行
- workspaces_ids.txt にプロトコル変更対象の WorkSpaces ID(例:ws-xxxxxxxx)を記載
- AWS CLIコマンド modify-workspace-properties を使用してプロトコルを PCoIP → WSP に変更
- CloudShell上でスクリプトを実行するだけで完了
CloudShellはAWS CLIが標準で利用できるため、特別な環境構築は不要です。
IAM権限さえあれば、どの環境からでも即実行できます。
第3章:スクリプト例(ログ出力付きで安全に実行)
ここでは、実際に使用しているスクリプトの構成を紹介します。
リージョン単位で安全にプロトコル変更を行う設計になっています。
手順1. 対象WorkSpaces IDを記載
nano workspaces_ids.txt
手順2. スクリプトを作成(一括起動)
Workspacesは起動状態である必要があるため、以下スクリプトで一括起動させます。
nano workspaces_start.sh
#!/bin/bash
set -e # エラーが出たらスクリプトを停止
workspace_list="workspaces_ids.txt"
echo "=== WorkSpaces の起動スクリプト開始: $(date) ==="
# 1行ずつ WorkSpace ID をチェック
while IFS= read -r workspace_id; do
# WorkSpaces の現在のステー タスを取得
status=$(aws workspaces describe-workspaces --workspace-ids "$workspace_id" --query "Workspaces[0].State" --output text)
if [[ "$status" == "STOPPED" ]]; then
echo "Starting WorkSpace: $workspace_id"
aws workspaces start-workspaces --start-workspace-requests "[{\"WorkspaceId\": \"$workspace_id\"}]"
# スロットリング対策のためスリープ
sleep $(awk -v min=0.4 -v max=0.6 'BEGIN{srand(); print min+rand()*(max-min)}')
else
echo "Skipping WorkSpace: $workspace_id (Status: $status)"
fi
done < "$workspace_list"
echo "=== 全ての WorkSpaces の起動リクエストが送信されました: $(date) ==="
手順3. 実行権限を付与
chmod +x workspaces_start.sh
手順4. スクリプトを実行
./workspaces_start.sh
ここまでで対象のWorkSpacesが起動状態になっています。
手順5. スクリプトを作成(プロトコル変更)
nano change_protocol_to_wsp.sh
#!/bin/bash
set -e # エラーが出たらスクリプトを停止
# WorkSpaces IDリストファイル
workspace_list="workspaces_ids.txt"
# ファイルが存在しない場合はエラーを表示して終了
if [ ! -f "$workspace_list" ]; then
echo "Error: File $workspace_list not found!"
exit 1
fi
echo "=== WorkSpaces プロトコル変更スクリプト開始: $(date) ==="
# WorkSpaces IDごとにプロトコルを変更
while IFS= read -r workspace_id; do
echo "Changing protocol for WorkSpace ID: $workspace_id to WSP"
aws workspaces modify-workspace-properties \
--workspace-id "$workspace_id" \
--workspace-properties "Protocols=[WSP]"
# スロットリング対策のためスリープ
sleep $(awk -v min=0.4 -v max=0.6 'BEGIN{srand(); print min+rand()*(max-min)}')
done < "$workspace_list"
echo "=== 全ての WorkSpaces のプロトコル変更が完了しました: $(date) ==="
手順6. 実行権限を付与
chmod +x change_protocol_to_wsp.sh
手順7. スクリプトを実行
./change_protocol_to_wsp.sh
実行後、CloudShellの出力またはCloudWatch Logsで変更結果を確認できます。
数百台の変更でも数分で完了します。
最後に
以上、CloudShellを活用してWorkSpacesのプロトコルをPCoIPからWSPへ一括変更する方法の紹介でした。
WSPはAWS推奨の最新プロトコルであり、ユーザ体験と運用効率を大幅に向上させることができます。
手動では大変な作業も、CLIスクリプトで自動化することで安全かつ短時間で実現可能です。
ぜひご自身の環境に合わせて活用してみてください。

