Amazon WorkSpaces - Windows マシンの D:ドライブ と C:ドライブを CloudShell から拡張してみる
こんにちは。
夢の中でもカイル君
運用イノベーション部のかわいです。
小ネタ記事です。
先日、Amazon WorkSpaces (Windowsマシン)環境におけるディスク拡張作業を行ったので、
CloudShell から D:ドライブと C:ドライブ を拡張した際の方法を紹介します。
検証環境
| 項目 | 内容 |
|---|---|
| OS | Windows Server 2022 |
| コンピューティングタイプ | Power / PowerPro |
| 拡張前のボリューム(C: / D:) | 80GB / 10GB、80GB / 50GB |
| 拡張後のボリューム(C: / D:) | 175GB / 100GB |
| 台数 | 3 台(並列で実施) |
| 実行環境 | AWS CloudShell(ap-northeast-1) |
ボリュームサイズについて
前知識として、C: と D: のサイズには、好きな値を自由に組み合わせられません。
| C:(ルート) | D:(ユーザ) |
|---|---|
| 80GB | 10GB / 50GB / 100GB |
| 175〜2000GB | 100〜2000GB |
上記からも C: を 80GB から増やしたい場合、事前に D: を 100GB 以上にしておく必要があります。
その他の留意事項
- 拡張可能なのは SSD ボリュームのみ
- C: と D: を同時に変更することはできない(D: の完了後、5-10分空けてから C: を変更する)
- 同じボリュームの拡張は 6 時間に 1 回まで
- 拡張中も利用者は WorkSpace をほぼ通常どおり使える(※別途手動再起動が必要)
- 拡張は 1 回あたり最大 2 時間程度かかる
- 拡張の完了後、反映には再起動が必要
- 一度拡張したら、元のサイズには戻せない
※サイズにより料金が変動するので、実施前に料金ページを参照されたし
変更方法
1. 現在の状態を確認
まずは対象の WorkSpace の状態とボリュームサイズを確認します。
「--worksoace-ids」に対象 WorkSpace の ID を並べて指定します。
export AWS_PAGER=""; aws workspaces describe-workspaces --region ap-northeast-1 \
--workspace-ids ws-xxxxxxxx1 ws-xxxxxxxx2 ws-xxxxxxxx3 \
--query "Workspaces[].[WorkspaceId,UserName,State,WorkspaceProperties.RootVolumeSizeGib,WorkspaceProperties.UserVolumeSizeGib]" \
--output table
# 出力例
-----------------------------------------------------
| DescribeWorkspaces |
+---------------+---------+-------------+-----+-----+
| ws-xxxxxxxx1 | user01 | AVAILABLE | 80 | 10 |
| ws-xxxxxxxx2 | user02 | AVAILABLE | 80 | 50 |
| ws-xxxxxxxx3 | user03 | AVAILABLE | 80 | 10 |
+---------------+---------+-------------+-----+-----+
状態が AVAILABLE または STOPPED であれば変更が可能です。
STOPPED のまま拡張すると、拡張が終わるまで起動できない点に注意。
2. D:ドライブの拡張
前述の通り、 D: を 100GB に拡張します。
export AWS_PAGER=""
for WS in ws-xxxxxxxx1 ws-xxxxxxxx2 ws-xxxxxxxx3; do
aws workspaces modify-workspace-properties --region ap-northeast-1 \
--workspace-id "$WS" \
--workspace-properties UserVolumeSizeGib=100 \
&& echo "$WS D:拡張開始 $(TZ=Asia/Tokyo date '+%H:%M:%S')"
sleep 2
done
# 出力例
ws-xxxxxxxx1 D:拡張開始 11:02:12
ws-xxxxxxxx2 D:拡張開始 11:02:15
ws-xxxxxxxx3 D:拡張開始 11:02:18
受け付けられました。
3. 拡張の進捗を監視
ボリュームの拡張中も状態は AVAILABLE のままになります。進捗は ModificationStates で確認可能です。
以下例では 5 分おきに状態確認し、全対象が完了すると自動で止まるように監視できます。
export AWS_PAGER=""
K=UserVolumeSizeGib; V=100 # ※C: を監視するときは K=RootVolumeSizeGib; V=175
L="ws-xxxxxxxx1 ws-xxxxxxxx2 ws-xxxxxxxx3"
while true; do
echo "== $(TZ=Asia/Tokyo date '+%H:%M:%S')"
aws workspaces describe-workspaces --region ap-northeast-1 --workspace-ids $L \
--query "Workspaces[].[WorkspaceId,UserName,State,WorkspaceProperties.RootVolumeSizeGib,WorkspaceProperties.UserVolumeSizeGib,join(',',ModificationStates[].[Resource,State][] || \`[]\`)]" \
--output table
# 変更処理が残っていないか確認
n=$(aws workspaces describe-workspaces --region ap-northeast-1 --workspace-ids $L \
--query "length(Workspaces[?WorkspaceProperties.$K==\`$V\` && length(ModificationStates || \`[]\`)==\`0\`])" \
--output text)
if [ "$n" = "3" ]; then echo "対象は $K=$V で完了"; break; fi
sleep 300
done
実行中は以下のように表示されます。
# 出力例
+--------------+---------+------------+-----+-----+-----------------------------------+
| ws-xxxxxxxx2| user02 | AVAILABLE | 80 | 50 | USER_VOLUME,UPDATE_IN_PROGRESS |
| ws-xxxxxxxx1| user01 | AVAILABLE | 80 | 10 | USER_VOLUME,UPDATE_IN_PROGRESS |
| ws-xxxxxxxx3| user03 | AVAILABLE | 80 | 10 | USER_VOLUME,UPDATE_IN_PROGRESS |
+--------------+---------+------------+-----+-----+-----------------------------------+
完了すると、最後の列が空になりサイズが変わります。
+---------------+---------+------------+-----+------+----+
| ws-xxxxxxxx3 | user03 | AVAILABLE | 80 | 100 | |
| ws-xxxxxxxx2 | user02 | AVAILABLE | 80 | 100 | |
| ws-xxxxxxxx1 | user01 | AVAILABLE | 80 | 100 | |
+---------------+---------+------------+-----+------+----+
4. C:ドライブの拡張
D:ドライブの完了が確認できたら、C:ドライブ側を 175GB に拡張します。
export AWS_PAGER=""
for WS in ws-xxxxxxxx1 ws-xxxxxxxx2 ws-xxxxxxxx3; do
aws workspaces modify-workspace-properties --region ap-northeast-1 \
--workspace-id "$WS" \
--workspace-properties RootVolumeSizeGib=175 \
&& echo "$WS C:受付 $(TZ=Asia/Tokyo date '+%H:%M:%S')"
sleep 2
done
状態の確認は、先ほどのループの先頭を K=RootVolumeSizeGib; V=175 に変えるだけです。
以下のように出力されればokです。
export AWS_PAGER=""
K=RootVolumeSizeGib; V=175
L="ws-xxxxxxxx1 ws-xxxxxxxx2 ws-xxxxxxxx3"
while true; do
echo "== $(TZ=Asia/Tokyo date '+%H:%M:%S')"
aws workspaces describe-workspaces --region ap-northeast-1 --workspace-ids $L \
--query "Workspaces[].[WorkspaceId,UserName,State,WorkspaceProperties.RootVolumeSizeGib,WorkspaceProperties.UserVolumeSizeGib,join(',',ModificationStates[].[Resource,State][] || \`[]\`)]" \
--output table
# 変更処理が残っていないか確認
n=$(aws workspaces describe-workspaces --region ap-northeast-1 --workspace-ids $L \
--query "length(Workspaces[?WorkspaceProperties.$K==\`$V\` && length(ModificationStates || \`[]\`)==\`0\`])" \
--output text)
if [ "$n" = "3" ]; then echo "対象は $K=$V で完了"; break; fi
sleep 300
done
+---------------+---------+------------+------+------+----+
| ws-xxxxxxxx3 | user03 | AVAILABLE | 175 | 100 | |
| ws-xxxxxxxx2 | user02 | AVAILABLE | 175 | 100 | |
| ws-xxxxxxxx1 | user01 | AVAILABLE | 175 | 100 | |
+---------------+---------+------------+------+------+----+
3台とも RootVolumeSizeGib=175 で完了
5. 再起動 → 反映
ドキュメントにあるとおり、拡張完了後は再起動が必要です。
事前に作業中のファイル等は保存して閉じておきましょう。
aws workspaces reboot-workspaces --region ap-northeast-1 \
--reboot-workspace-requests '[{"WorkspaceId":"ws-xxxxxxxx1"},{"WorkspaceId":"ws-xxxxxxxx2"},{"WorkspaceId":"ws-xxxxxxxx3"}]'
{
"FailedRequests": []
}
FailedRequests が空で返れば、再起動が実行できています。
また、状態を確認したい場合は以下コマンドで進捗を追えます。
export AWS_PAGER=""; aws workspaces describe-workspaces --region ap-northeast-1 --workspace-ids ws-xxxx01 ws-xxxx02 ws-xxxx03 --query "Workspaces[].[WorkspaceId,UserName,State]" --output table
-----------------------------------------
| DescribeWorkspaces |
+--------------+----------+-------------+
| ws-xxxx03 | user03 | REBOOTING |
| ws-xxxx01 | user01 | AVAILABLE |
| ws-xxxx02 | user02 | AVAILABLE |
+--------------+----------+-------------+
すべてAVAILABLE状態になれば再起動完了です。
6. 容量の確認
再起動後、再度手順1のコマンドを流し、容量が変わったことを確認します。
(または、実際にログインして容量を確認します)
export AWS_PAGER=""; aws workspaces describe-workspaces --region ap-northeast-1 \
--workspace-ids ws-xxxxxxxx1 ws-xxxxxxxx2 ws-xxxxxxxx3 \
--query "Workspaces[].[WorkspaceId,UserName,State,WorkspaceProperties.RootVolumeSizeGib,WorkspaceProperties.UserVolumeSizeGib]" \
--output table
# 出力例
-----------------------------------------------------
| DescribeWorkspaces |
+---------------+---------+-------------+-----+-----+
| ws-xxxxxxxx1 | user01 | AVAILABLE | 175 | 100 |
| ws-xxxxxxxx2 | user02 | AVAILABLE | 175 | 100 |
| ws-xxxxxxxx3 | user03 | AVAILABLE | 175 | 100 |
+---------------+---------+-------------+-----+-----+
まとめ的な
- C:ドライブ を 80GB から増やすには、まず D:ドライブ側 を 100GB にする必要がある
- C:ドライブ と D:ドライブ は 1回のリクエストで同時に変更できないので、D:ドライブ → C:ドライブの順で 2回に分ける
- 拡張中も状態は
AVAILABLEのままで表示される。進捗はModificationStatesで確認可能(※完了後再起動が必要 - 一度拡張すると元に戻せず料金も上がる
以上、何かの参考になれば幸いです!
完
参考情報







