WorkSpaces の Office 2021 が EOL を迎えるので、2024 に移行した話(複数台まとめて実施編)

WorkSpaces の Office 2021 が EOL を迎えるので、2024 に移行した話(複数台まとめて実施編)

Amazon WorkSpaces で Office 2021 から 2024 への移行を複数台(2台)で検証しました。前回の1台検証に続き、2台並列での展開方法とそのタイムラインを紹介します。
2026.09.02

こんにちは。
いつも心の中にカイル君
運用イノベーション部のかわいです。

前回、Amazon WorkSpaces の Office 2021 が EOL を迎えるということで、1台だけ 2024 に移行してみた話を書きました。
https://dev.classmethod.jp/articles/workspaces-migrate-application-bundle/

今回はこの続きとして、複数台に展開することを想定し、2台並列で検証した内容を紹介します。
同じような対応が必要な方は、参考にしてみてください。

検証環境

項目 内容
台数 2台
OS Windows Server 2022
コンピュートタイプ STANDARD
Running mode AutoStop
*開始時の State STOPPED
対象アプリ Microsoft Office LTSC Professional Plus 2021 → 2024

前回は AlwaysOn かつ、稼働中(AVAILABLE)の WorkSpace を対象として実施しました。
今回は2台とも STOPPED 状態の WorkSpace を使用しました。

アンインストール(関連付けの解除) → インストール(関連付け)の2段階実行

前回の結果からも、アンインストールとインストールを2段階に分けて実施します。
今回も、AWS CLIからの実行とします。

1. 2021 をアンインストール

※それぞれアプリケーションIDやWorkSpace検証機のIDに、実際の値を置換してください

export AWS_PAGER=""
R="--region ap-northeast-1"
OLD=<Office 2021のアプリケーションID>
LIST="<WorkSpace 検証機AのID> <WorkSpace 検証機BのID>"

echo "PHASE1-START $(date '+%F %T')"
for WS in $LIST; do
  aws workspaces disassociate-workspace-application $R --workspace-id $WS --application-id $OLD >/dev/null &&
  aws workspaces deploy-workspace-applications $R --workspace-id $WS >/dev/null &&
  echo "  $WS deployed $(date '+%T')" || echo "  $WS FAILED"
  sleep 2
done

完了までループで待機

アンインストール完了まで待ちたかったので、以下2点を確認します。

  1. 2021 の関連付けが消えているCOMPLETED または REMOVED
  2. State が AVAILABLE / STOPPED に戻っている(アンインストール中の場合は PENDING UNINSTALL等になる)

最終的に以下の形に落ち着きました。

export AWS_PAGER=""
R="--region ap-northeast-1"
OLD=<Office 2021のアプリケーションID>

while :; do
  # 1. State を25台ずつバッチ取得
  : > st_now.txt
  split -l 25 -d targets.txt _st_
  for f in _st_*; do
    aws workspaces describe-workspaces $R --workspace-ids $(tr '\n' ' ' < $f) \
      --query "Workspaces[].[WorkspaceId,State]" --output text >> st_now.txt
    sleep 2
  done
  rm -f _st_*

  busy=$(awk '$2!="AVAILABLE" && $2!="STOPPED"' st_now.txt | wc -l)
  echo "$(date '+%F %T') 処理中=$busy / $(wc -l < st_now.txt)"

  # 2. 全台落ち着いたら関連付けを確認
  if [ "$busy" = "0" ]; then
    rem=0
    while read -r WS; do
      a=$(aws workspaces describe-workspace-associations $R --workspace-id "$WS" \
          --associated-resource-types APPLICATION \
          --query "Associations[?AssociatedResourceId=='$OLD'].State" --output text)
      { [ -n "$a" ] && [ "$a" != "REMOVED" ]; } && rem=$((rem+1))
      sleep 1
    done < targets.txt
    echo "  2021残存=$rem"
    [ "$rem" = "0" ] && break
  fi

  sleep 300
done

sleep を5分間隔にすることで、スロットリングエラーを回避、かつ、
describe-workspaces --workspace-ids は最大25台までまとめて指定できるので、これを使えば State の取得は50台でも2コールで済みます。
さらに、全台完了してから関連付けを確認する構成にすれば、関連付けのコールは毎回挟むことなく最後の1回だけに実施で済みます。

2. 2024 のインストール

2021 のアンインストールが完了したので、次はインストールに進みます。

export AWS_PAGER=""
R="--region ap-northeast-1"
NEW=<Office 2024のID>
LIST="<WorkSpace検証機AのID> <WorkSpace検証機BのID>"

echo "PHASE2-START $(date '+%F %T')"
for WS in $LIST; do
  aws workspaces associate-workspace-application $R --workspace-id $WS --application-id $NEW >/dev/null &&
  aws workspaces deploy-workspace-applications $R --workspace-id $WS >/dev/null &&
  echo "  $WS deployed $(date '+%T')" || echo "  $WS FAILED"
  sleep 2
done

インストール完了まで待機用

export AWS_PAGER=""
R="--region ap-northeast-1"
NEW=<Office 2024のID>
LIST="<WorkSpace検証機AのID> <WorkSpace検証機BのID>"

while :; do
  n=0
  t=0
  err=0
  echo "--- $(date '+%F %T')"
  for WS in $LIST; do
    t=$((t+1))
    a=$(aws workspaces describe-workspace-associations $R --workspace-id $WS \
        --associated-resource-types APPLICATION \
        --query "Associations[?AssociatedResourceId=='$NEW'].State" --output text)
    s=$(aws workspaces describe-workspaces $R --workspace-ids $WS \
        --query "Workspaces[0].State" --output text)
    echo "  $WS 2024=${a:-なし} State=$s"
    [ "$a" = "COMPLETED" ] && n=$((n+1))
    [ "$a" = "ERROR" ] && err=$((err+1))
  done
  echo "  完了 $n/$t  エラー $err"
  [ "$n" = "$t" ] && { echo "PHASE2-DONE $(date '+%F %T')" | tee -a test2.log; break; }
  [ "$err" -gt 0 ] && { echo "ERROR発生 $(date '+%F %T')" | tee -a test2.log; break; }
  sleep 300
done
cat test2.log

結果

両台とも無事に COMPLETED になりました。

--- 2026-09-02 05:04:56
  <検証機AのID> 2024=COMPLETED State=STOPPED
  <検証機BのID> 2024=COMPLETED State=STOPPED
  完了 2/2  エラー 0

今回のタイムライン

時刻(GMT) イベント
04:04:07 第1段(アンインストール)
04:05:30 両台 State が UPDATING に遷移
04:21:28 検証機A の関連付けが消滅
04:26:31 2台とも関連付け消滅・State が STOPPED
04:27:20 第2段(インストール)
05:04:56 以前 2台ともCOMPLETED

所要時間

項目 実測
2021アンインストール 約22分
2024インストール 約35分
全体 約57分

前回の1台検証ではインストールまで68分かかっていましたが、検証機はユーザデータがほとんどない状態だったので、
比較的短い検証時間で完了できました。

まとめ的な

複数台への展開時の考え方ですが、基本的には1台のときと同じ方法で実現できました。
強いて言うなら完了確認時の API スロットリングの問題があるので、完了チェックの際のループ処理を少し工夫する必要があります。

参考記事

https://docs.aws.amazon.com/workspaces/latest/adminguide/manage-applications.html
https://docs.aws.amazon.com/cli/latest/reference/workspaces/describe-workspaces.html
https://docs.aws.amazon.com/cli/latest/reference/workspaces/deploy-workspace-applications.html

関連記事

https://dev.classmethod.jp/articles/workspaces-migrate-application-bundle/

この記事をシェアする

関連記事