サイトアイコン 協栄情報ブログ

CloudShellでWorkSpacesのプロトコルを一括変更:PCoIPからWSPへ安全に切り替える方法

こんにちは、石川です。
前回の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)」を用いて、変更対象を明確化しています。

スクリプトは以下のような仕組みで動作します:

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スクリプトで自動化することで安全かつ短時間で実現可能です。
ぜひご自身の環境に合わせて活用してみてください。

モバイルバージョンを終了