Amazon WorkSpaces の移行を AWS CLI で実施してみた

Amazon WorkSpacesは、AWSが提供するフルマネージド型の仮想デスクトップサービスです。
本記事では、AWS CLIを使用してAmazon WorkSpacesの移行を実施した検証内容をまとめました。

なお、OS環境の再構築に伴うCドライブの初期化やIPアドレスの再配置など、移行に関する注意点は本検証の目的から除外しておりますのでご注意ください。検証内容を試される際には、実際の要件や条件に合っているかをあらかじめご確認いただくことをおすすめします。
移行に関する制限や詳細な挙動については、以下のリンクをご確認ください。
 

 

検証内容

以下の環境を準備して検証を行いました。

移行前環境

  • バンドル:wsb-3vw4c37lm
    Standard with Windows 10 and Office 2016 Pro Plus (Server 2016 based) (PCoIP)
    ※アプリケーション込み

移行後環境

  • バンドル:wsb-6vttw8tg3
    Standard with Windows 10 (Server 2022 based)
  • アプリケーション:wsa-hpgj744f0
    Microsoft Office LTSC Professional Plus 2021

補足~アプリケーションについて~

これまで、バンドルは固定されたアプリケーションを含む形で提供されていましたが、新しい仕様により、アプリケーションはバンドルとは別に管理されることとなりました。したがって、新しいアプリケーションを導入する場合は、手動でインストールする必要があります。
そのため、本検証でもバンドル移行後にアプリケーションのインストールを実施いたします。
 

 
また、各OSに対応するアプリケーションは以下の通りです。

  Microsoft Office Professional Plus 2016 (32 ビット) Microsoft Office Professional Plus 2019 (64 ビット) Microsoft LTSC Office Professional Plus / Standard 2021 (64 ビット) Microsoft Project Professional / Standard 2021 (64 ビット) Microsoft LTSC Visio Professional / Standard 2021 (64 ビット) Microsoft Visual Studio Professional / Enterprise 2022
Windows Server 2016 アンインストール サポートされません サポートされません サポートされません サポートされません サポートされません
Windows Server 2019 サポートされていません アンインストール インストール/アンインストール インストール/アンインストール インストール/アンインストール サポートされていません
Windows Server 2022 サポートされていません アンインストール インストール/アンインストール インストール/アンインストール インストール/アンインストール インストール/アンインストール
Windows 10 アンインストール アンインストール インストール/アンインストール インストール/アンインストール インストール/アンインストール インストール/アンインストール
Windows 11 アンインストール アンインストール インストール/アンインストール インストール/アンインストール インストール/アンインストール インストール/アンインストール

 

 

環境準備

AWS CLIのインストールが本検証を進めるうえでの前提条件となります。
AWS CLIではVer.1.29.61およびVer.2.13.25以降でアプリケーションの管理のコマンドが追加されているため、これ以前のバージョンを利用している場合はアップデートが必要となります。 

以下のコマンドを使用して、バージョン確認を行います。

aws --version

 

$ aws --version
aws-cli/2.21.3 Python/3.12.6 Windows/11 exe/AMD64

 
※AWS は現在、バージョン 2 の使用を推奨しており、また、過去に確認されたバグの修正や、新機能の追加の観点からも最新バージョンの利用を推奨しています。
※AWS CLIのリージョンの設定や証明書の登録などは環境に応じて実施する必要があります。
 

WorkSpacesの移行

以下のコマンドを使用して移行を実施しました。
移行の大まかな流れとしては、まずバンドル移行を行い、その後にアプリケーションの関連付けを行います。

バンドルの移行

  1. 以下のコマンドを使用して、移行前環境のWorkSpace(以下、移行前WorkSpace)の状態を確認します。
    aws workspaces describe-workspaces --workspace-ids [移行前WorkSpace ID]

     

    $ aws workspaces describe-workspaces --workspace-ids ws-xxxxxxxdq
    
    {
        "Workspaces": [
            {
                "WorkspaceId": "ws-xxxxxxxdq",
                "DirectoryId": "d-xxxxxxxxxx",
                "UserName": "test",
                "IpAddress": "10.0.xxx.xxx",
                "State": "AVAILABLE",
                "BundleId": "wsb-3vw4c37lm",
                "SubnetId": "subnet-xxxxxxxxxx939dca7",
                "ComputerName": "TEST",
                "WorkspaceProperties": {
                    "RunningMode": "AUTO_STOP",
                    "RunningModeAutoStopTimeoutInMinutes": 60,
                    "RootVolumeSizeGib": 80,
                    "UserVolumeSizeGib": 50,
                    "ComputeTypeName": "STANDARD",
                    "Protocols": [
                        "PCOIP"
                    ],
                    "OperatingSystemName": "WINDOWS_SERVER_2016"
                },
                "ModificationStates": []
            }
        ]
    }

     

  2. 以下のコマンドを使用して、移行後環境のWorkSpace(以下、移行後WorkSpace)のバンドルを指定し、バンドルを移行します。移行後WorkSpaceのID(”TargetWorkspaceId”)が新しく発行されるため、IDを控えておく必要があります。(手順3とアプリケーションの関連付けで必要となります) 
    aws workspaces migrate-workspace --source-workspace-id [移行前WorkSpace ID] --bundle-id [移行後WorkSpaceのバンドルID]

     

    $ aws workspaces migrate-workspace --source-workspace-id ws-xxxxxxxdq --bundle-id wsb-6vttw8tg3
    
    {
        "SourceWorkspaceId": "ws-xxxxxxxdq",
        "TargetWorkspaceId": "ws-xxxxxxxmg"
    }

    また、移行後WorkSpaceのID(“WorkspaceId”)は、以下のコマンドでも確認することができます。

    aws workspaces describe-workspaces --directory-id [ディレクトリID] --user-name [ユーザー名] 

     

    $ aws workspaces describe-workspaces --directory-id d-xxxxxxxxxx --user-name test
    
    {
        "Workspaces": [
            {
                "WorkspaceId": "ws-xxxxxxxmg",
                "DirectoryId": "d-xxxxxxxxxx",
                "UserName": "test",
                "State": "PENDING",
                "BundleId": "wsb-6vttw8tg3",
                "WorkspaceProperties": {
                    "RunningMode": "AUTO_STOP",
                    "RunningModeAutoStopTimeoutInMinutes": 60,
                    "RootVolumeSizeGib": 80,
                    "ComputeTypeName": "STANDARD",
                    "Protocols": [
                        "PCOIP"
                    ],
                    "OperatingSystemName": "WINDOWS_SERVER_2022"
                },
                "ModificationStates": []
            }
        ]
    }
    
    

     

  3. 以下のコマンドを使用して、移行後WorkSpaceの状態を確認し、State“AVAILABLE”(使用可能)と表示されることを確認します。(処理に20分ほどかかることがあります)
    aws workspaces describe-workspaces --workspace-ids [移行後WorkSpace ID]

     
    State“PENDING”(保留中) 

    $ aws workspaces describe-workspaces --workspace-ids ws-xxxxxxxmg
    
    {
        "Workspaces": [
            {
                "WorkspaceId": "ws-xxxxxxxmg",
                "DirectoryId": "d-xxxxxxxxxx",
                "UserName": "test",
                "State": "PENDING",
                "BundleId": "wsb-6vttw8tg3",
                "WorkspaceProperties": {
                    "RunningMode": "AUTO_STOP",
                    "RunningModeAutoStopTimeoutInMinutes": 60,
                    "RootVolumeSizeGib": 80,
                    "ComputeTypeName": "STANDARD",
                    "Protocols": [
                        "PCOIP"
                    ],
                    "OperatingSystemName": "WINDOWS_SERVER_2022"
                },
                "ModificationStates": []
            }
        ]
    }

    ※Stateが”AVAILABLE”(使用可能) 

    $ aws workspaces describe-workspaces --workspace-ids ws-xxxxxxxmg
    
    {
        "Workspaces": [
            {
                "WorkspaceId": "ws-xxxxxxxmg",
                "DirectoryId": "d-xxxxxxxxxx",
                "UserName": "test",
                "IpAddress": "10.0.xxx.xxx",
                "State": "AVAILABLE",
                "BundleId": "wsb-6vttw8tg3",
                "SubnetId": "subnet-xxxxxxxxxx939dca7",
                "ComputerName": "TEST",
                "WorkspaceProperties": {
                    "RunningMode": "AUTO_STOP",
                    "RunningModeAutoStopTimeoutInMinutes": 60,
                    "RootVolumeSizeGib": 80,
                    "UserVolumeSizeGib": 50,
                    "ComputeTypeName": "STANDARD",
                    "Protocols": [
                        "PCOIP"
                    ],
                    "OperatingSystemName": "WINDOWS_SERVER_2022"
                },
                "ModificationStates": []
            }
        ]
    }

     

  4. 以下のコマンドを使用して、移行前WorkSpaceの状態を確認します。
    aws workspaces describe-workspaces --workspace-ids [移行前WorkSpace ID]

     
    ※内容が表示されないため移行が完了したことが確認できます。

    $ aws workspaces describe-workspaces --workspace-ids ws-xxxxxxxdq
    
    {
        "Workspaces": []
    } 

     

アプリケーションの関連付け

  1. 以下のコマンドを使用して、アプリケーションの関連付けの状態を確認します。

    aws workspaces describe-workspace-associations --workspace-id [移行後WorkSpace ID] --associated-resource-types APPLICATION

     
    ※内容が表示されないためアプリケーションの関連付けがないことが確認できます。

    $ aws workspaces describe-workspace-associations --workspace-id ws-xxxxxxxmg --associated-resource-types APPLICATION
    
    {
        "Associations": []
    }
    

     

  2. 以下のコマンドを使用して、移行後WorkSpaceとアプリケーションの紐づけを行います。
    aws workspaces associate-workspace-application --workspace-id [移行後WorkSpace ID] --application-id [アプリケーションID]

     
    ※Stateが”PENDING_INSTALL_DEPLOYMENT”(インストールのデプロイ待ち)状態になることを確認します。

    $ aws workspaces associate-workspace-application --workspace-id ws-xxxxxxxmg --application-id wsa-hpgj744f0
    
    {
        "Association": {
            "AssociatedResourceId": "wsa-hpgj744f0",
            "AssociatedResourceType": "APPLICATION",
            "Created": "2024-12-24T11:19:xx.xxxxxx+09:00",
            "LastUpdatedTime": "2024-12-24T11:19:xx.xxxxxx+09:00",
            "State": "PENDING_INSTALL_DEPLOYMENT",
            "WorkspaceId": "ws-xxxxxxxmg"
        }
    }
    

     

  3. 以下のコマンドを使用して、アプリケーションをインストールします。
    aws workspaces deploy-workspace-applications --workspace-id [移行後WorkSpace ID]

     
    ※Stateが”PENDING_INSTALL”(インストール待ち)状態になることを確認します。                                      

    $ aws workspaces deploy-workspace-applications --workspace-id ws-xxxxxxxmg
    
    {
        "Deployment": {
            "Associations": [
                {
                    "AssociatedResourceId": "wsa-hpgj744f0",
                    "AssociatedResourceType": "APPLICATION",
                    "Created": "2024-12-24T11:19:xx.xxxxxx+09:00",
                    "LastUpdatedTime": "2024-12-24T11:19:xx.xxxxxx+09:00",
                    "State": "PENDING_INSTALL",
                    "WorkspaceId": "ws-xxxxxxxmg"
                }
            ]
        }
    } 

     

  4. 以下のコマンドを使用して、アプリケーションの関連付けの状態を確認し、State“COMPLETED”(インストール済み)と表示されることを確認します。(処理に30分ほどかかることがあります)                          
    aws workspaces describe-workspace-associations --workspace-id [移行後WorkSpace ID] --associated-resource-types APPLICATION

     
    State“PENDING_INSTALL”(インストール待ち)     

    $ aws workspaces describe-workspace-associations --workspace-id ws-xxxxxxxmg --associated-resource-types APPLICATION
    
    {
        "Associations": [
            {
                "AssociatedResourceId": "wsa-hpgj744f0",
                "AssociatedResourceType": "APPLICATION",
                "Created": "2024-12-24T11:19:xx.xxxxxx+09:00",
                "LastUpdatedTime": "2024-12-24T11:19:xx.xxxxxx+09:00",
                "State": "PENDING_INSTALL",
                "WorkspaceId": "ws-xxxxxxxmg"
            }
        ]
    }
    

    State“INSTALLING”(インストール中)

    $ aws workspaces describe-workspace-associations --workspace-id ws-xxxxxxxmg --associated-resource-types APPLICATION
    
    {
        "Associations": [
            {
                "AssociatedResourceId": "wsa-hpgj744f0",
                "AssociatedResourceType": "APPLICATION",
                "Created": "2024-12-24T11:19:xx.xxxxxx+09:00",
                "LastUpdatedTime": "2024-12-24T11:32:xx.xxxxxx+09:00",
                "State": "INSTALLING",
                "WorkspaceId": "ws-xxxxxxxmg"
            }
        ]
    }
    

    State“COMPLETED”(インストール済み)

    $ aws workspaces describe-workspace-associations --workspace-id ws-xxxxxxxmg --associated-resource-types APPLICATION
    
    {
        "Associations": [
            {
                "AssociatedResourceId": "wsa-hpgj744f0",
                "AssociatedResourceType": "APPLICATION",
                "Created": "2024-12-24T11:19:xx.xxxxxx+09:00",
                "LastUpdatedTime": "2024-12-24T11:51:xx.xxxxxx+09:00",
                "State": "COMPLETED",
                "WorkspaceId": "ws-xxxxxxxmg"
            }
        ]
    }

 

注意点

ベストプラクティスとして、複数のWorkSpacesを同時実行で移行する場合、一度に処理できる上限は25個とされています。

スクリプトにて移行コマンドを実行する場合には注意が必要です。

WorkSpaces をスクリプトで移行する場合、一度に移行する WorkSpaces の数を25個以下にしてください。

 

 

まとめ

Amazon WorkSpaces の移行はマネジメントコンソール上でも試みましたが、移行設定画面にバンドルIDの表示がなく、ID検索の代わりに、マウス操作でフィルタリングをかけて対象のバンドル名を指定する操作となるため、少し手間に感じました。一方で、CLIは使い慣れていないため最初は少し抵抗がありましたが、一括で操作を行えるため、便利さを実感しました。
また、同一の操作を複数のWorkSpacesに対して行う際には、CLIが役立つと考えます。本検証では1台のみを移行したため、マネジメントコンソールとの作業時間に大きな差はありませんでしたが、移行対象が多い場合には、CLIを使用することで時間短縮が見込めると思います。
そして効率化をさらに図るために、本記事で紹介したコマンドを活用し、AWS Lambdaやループ処理を組み合わせて移行する方法も検討できると思いました。

著者について

入社4年目です。
現在、AWSやGoogle Cloudを用いたインフラ構築業務に取り組みながら、日々勉強中です。

s.e.をフォローする

クラウドに強いによるエンジニアブログです。

SCSKクラウドサービス(AWS)は、企業価値の向上につながるAWS 導入を全面支援するオールインワンサービスです。AWS最上位パートナーとして、多種多様な業界のシステム構築実績を持つSCSKが、お客様のDX推進を強力にサポートします。

AWSクラウド
シェアする
タイトルとURLをコピーしました