Amazon WorkSpaces BYOLのイメージ作成までの手順ってこんな感じ!

Amazon WorkSpacesのBYOL(Bring Your Own License:ライセンス持ち込み)のWindows OSライセンス持ち込みからWorkSpacesイメージ作成手順についてまとめました!

WorkSpacesのWindowsライセンスのBYOLを検討中で、実際どのような作業をするのか想像がついていない方への内容となっています!

Amazon WorkSpaces BYOLについて

まず、WorkSpacesって何でしょう??という方は、下記にてWorkSpacesを紹介しているのでご参照ください。

WorkSpacesはじめました その① ~Amazon WorkSpacesとは~
最近、案件でAmazon WorkSpacesを提案する機会があったのですが、公式ドキュメントにもあまり記載されていないつまづきポイントがいくつかあり、いろいろと苦労をしましたので何回かに分けてご紹介出来たらと思います。まずは第1回目としてAmazon WorkSpacesはそもそもどういったサービスかというところから簡単にはなりますがまとめたいと思います。

WorkSpacesBYOLについては、AWS公式サイトの案内だと、Microsoft とのライセンス契約で許可されていれば、WorkSpaces にお客様の Windows 10 Enterprise または Windows 10 Pro デスクトップライセンスを使用できます。”となっています。

簡潔に言うと、”WindowsのデスクトップライセンスをWorkSpacesサービスに持ち込むと、WorkSpaces利用コストを削減できますよ”ということになります。

WorkSpacesBYOLについての公式ドキュメントは下記の通りです。

自分の Windows デスクトップライセンスを使用する - Amazon WorkSpaces
で Windows デスクトップライセンスを使用してください WorkSpaces。

WorkSpacesBYOL導入にあたりましては、様々な要件(例:100台以上WorkSpacesを展開する必要がある等)があるため、詳細は上記をよくご確認ください。

本ページでは、上記のAWS公式ページのステップ3の手順から具体的に記載しています。ステップ3の内容としては、ローカル環境からライセンスを持ち込んでWorkSpacesイメージに変換するといったものになります。

具体的なライセンス持ち込み(仮想イメージの作成~WorkSpacesイメージの作成)方法の流れは下記の通りです。

  1. 新規仮想マシンの作成
  2. 仮想マシン(WindowsOS)の設定
  3. S3バケットへOVAイメージのアップロード
  4. VMImportに許可するサービスロールの作成
  5. OVAイメージをWorkSpacesイメージへ変換

では早速、次の章から準備・手順について記載してきます。

※本ページにて、WorkSpacesイメージ作成時の環境は下記の通りです。

・仮想化環境:VMware(R) Workstation 16 Pro(バージョン:16.2.3 build-19376536)
・ローカルPC:Windows10Pro 21H2
・AWSにインポートするWindowsOS:Windows10Pro 21H2

準備事項

  • 下記の要件を確認しておきます。
    自分の Windows デスクトップライセンスを使用する – Amazon WorkSpaces
  • ライセンス認証されたWindowsOSのISOイメージを用意します。
  • ローカル環境にAWS-CLIを導入しておきます。
  • AWSのEC2サービスで、デフォルトで「EBS 暗号化」を有効化していれば、無効化しておきます。(デフォルトは無効です。)
  • AWSコンソール上から、ステップ1~2の手順を完了し、AWSアカウントのBYOLを有効化しておきます。「ステップ1 Amazon WorkSpaces コンソールを使用して、お客様のアカウントの BYOL 適格性を確認する」「ステップ2 Amazon WorkSpaces コンソールを使用して、アカウントのために BYOL を有効にする」
    手順:自分の Windows デスクトップライセンスを使用する – Amazon WorkSpaces                                  

    AWS上でWorkSpacesを利用したことがない場合、ステップ2のWorkSpacesの「アカウント設定」のメニューを表示できないため、下記のリンクをクリックして、直接設定画面にアクセスすると設定できます。
    下記のURLは東京リージョンのURLとなりますので、ご注意ください。
    AWSマネジメントコンソール(WorkSpacesアカウント設定)

WorkSpacesイメージ作成手順

新規仮想マシンの作成

まずは、ローカルPCの仮想化環境にて、持ち込むWindowsOSの仮想マシンを作成します。

  1. ローカルPCにてVMware WorkStationPro16を開き、ファイル>新しい仮想マシンをクリックし、新しい仮想マシンウィザードを開き、「カスタム」を選択し、「次へ」をクリックします。
  2. デフォルトのWorkstationのハードウェア互換性を選択したまま「次へ」をクリックします。
  3. ゲストOSのインストールにて、ライセンス持ち込み対象のWindowsOSのISOイメージを指定し、「次へ」をクリックします。
  4. プロダクトキーは未入力で、Windowsのパーソナライズに「WorkSpaces_BYOL」と入力し、「次へ」をクリックします。
  5. 下記のような注意事項が表示された場合には、そのまま「はい」をクリックします。
  6. 仮想マシン名を任意で入力し、仮想マシンの配置先も確認後、「次へ」をクリックします。
  7. ファームウェアタイプでは「BIOS」を選択し、「次へ」をクリックします。
    ※UEFIを選択するとボリュームが分割され、WorkSpacesの要件である「1つのシングルボリュームの仮想マシン」を作成できないので注意してください。
  8. プロセッサ構成は任意の数値を指定し、「次へ」をクリックします。
  9. メモリ容量も任意の数値を指定し、「次へ」をクリックします。
  10. ネットワークの種類では任意の種類を選択(今回はNATを選択)し、「次へ」をクリックします。
  11. I/Oコントローラタイプの選択では、デフォルト(LSI Logic SAS)を選択し、「次へ」をクリックします。
  12. ディスクタイプの選択では、SCSIを選択し、「次へ」をクリックします。(任意のタイプを指定しても良いですが、今回は検証で問題のなかったSCSIを選択しています。)
  13. ディスクの選択では、仮想ディスクの新規作成を選択し、「次へ」をクリックします。
  14. 今回はOfficeのアプリケーションバンドルを用いるため、2022/6月時点でディスクサイズ最大容量である「70GB」として指定し、「仮想ディスクを単一ファイルとして格納」を選択し、「次へ」をクリックします。【参考】AWS を通じて Office にサブスクライブする予定がある場合は、VM に少なくとも 20 GB の空きディスク容量があることを確認してください。
    自分の Windows デスクトップライセンスを使用する – Amazon WorkSpaces
     
  15. 仮想マシンのディスクファイルの名前を記入し、「次へ」をクリックします。
  16. 最終確認画面となるので、「完了」をクリックすると、仮想マシンの作成が開始します。
  17. WindowsOSが立ち上がってきたら、インストールしたいWindowsのエディションを選択し、「次へ」をクリックします。2022年6月時点ではBYOLに対応しているエディションは「Enterprise」または「Pro」となっています。
  18. Windowsセットアップ画面となるので、待機します。
  19. Windowsのインストールが完了するとWindowsOSが自動で立ち上がります。以上で、仮想マシンの作成は完了です。

仮想マシン(Windows OS)の設定

  1. WindowsOSの起動後、「WorkSpaces_BYOL」ユーザでログインしていることを確認します。
  2. スタートボタンの上で右クリックを行い、「ディスクの管理」をクリックし、ボリュームがシングルボリュームであることを確認します。
  3. スタート>設定>更新とセキュリティ>ライセンス認証より、ライセンス認証されていることを確認します。
  4. 「Windowsキー」+「Rキー」で「ファイル名を指定して実行」ウィンドウを表示し、「lusrmsc.msc」と入力し、ユーザ管理ウインドウを開き下記の内容を確認・設定します。
    ・「WorkSpaces_BYOL」ユーザのプロパティの全般設定にて「パスワードを無期限にする」にチェックが入っている。
    ・「WorkSpaces_BYOL」ユーザのプロパティの所属するグループ設定にて「Administrators」グループに所属している。
    ・「Administrator」ユーザのプロパティの全般設定にて「アカウントを無効にする」のチェックが外れている。
    ・既存システムユーザと「WorkSpaces_BYOL」以外の一般ユーザが存在する場合には、ユーザ一覧から削除する。(下記画像は全て設定後のものです。)

  5. さらに、スタート>設定>システム>詳細情報>システムの詳細設定をクリックし、システムのプロパティウインドウの詳細設定タブから、ユーザプロファイルの「設定」をクリックし、「既定のプロファイル」と「WorkSpaces_BYOL」以外のユーザプロファイルがある場合には削除します。
  6. スタート>設定>更新とセキュリティ>Windows Updateより、「更新プログラムのチェック」をクリックし、更新があれば適用します。
  7. スタート>設定>時刻と言語>言語より、「管理用言語の設定」をクリックし、設定ウィンドウが表示されるため、「システムロケールの変更」より現在のシステムロケールを「英語(米国)」に変更し、「OK」をクリックします。サインアウトの画面が表示されるため、「はい」をクリックし、システムロケールを英語にします。
  8. 再度、スタート>設定>時刻と言語>言語より、優先する言語が「English(United States)」となっていることを確認します。「English(United States)」となっていない場合には、「English(United States)」を追加してください。
  9. ブラウザより、BYOL Checker スクリプトの .zip ファイルを https://tools.amazonworkspaces.com/BYOLChecker.zip から Downloadsフォルダにダウンロードし、.zipファイルを「BYOL」というフォルダに展開しておきます。展開後、.zipファイルは削除します。
  10. スタートボタンの上で右クリックし、「Windows PowerShell(Admin)」をクリックし、管理者権限でPowerShellを開き、下記のコマンドを実行し、Modern Appx Package を削除します。

    > set-executionpolicy unrestricted
      Do you want to change the execution policy? [A] Yes to All
    > A ←入力
    > Get AppxPackage AllUsers | Remove AppxPackage

    ※下記のようなエラー内容が表示されますが、無視して大丈夫です。出力が終わるまで待機します。

  11. スタート>設定>アプリ>アプリと機能より、「VMWare Tools」を選択し、「Uninstall」をクリックし、VMwareToolsをアンインストールします。再起動について尋ねられたら再起動を行います。
  12. 一度仮想マシンを停止し、VMWareコンソールから該当の仮想マシンを選択して、右クリックし、メニューより「設定」をクリックします。すると、仮想マシン設定ウィンドウが表示されるため、ハードウェア一覧より、「CD/DVD」などの外部ストレージを選択して「削除」をクリックします。その後、「OK」をクリックし、再度仮想マシンを起動します。
  13. 再度、仮想マシンにログインし、WindowsUpdateが無いかを確認し、Updateがあれば適用します。

  14. 続いて、VMWareコンソールから該当の仮想マシンを選択して、右クリックし、スナップショット>スナップショットの作成より、任意のスナップショット名を記入し、「スナップショットの作成」をクリックし、スナップショットを取っておきます。

  15. 仮想マシンに戻り、スタートボタンの上で右クリックし、「Windows PowerShell(Admin)」をクリックし、管理者権限でPowerShellを開き、下記のコマンドを実行し、BYOLCheckerを起動します。

    > set-executionpolicy unrestricted
      Do you want to change the execution policy? [A] Yes to All
    > A ←入力
    > Set-Location C:\Users\WorkSpaces_BYOL\Downloads\BYOL ←BYOLCheckerを展開したフォルダに移動
    > ./BYOLChecker.ps1
     Do you want to run BYOLChecker.ps1? [R] Run once
    > R ←入力
  16. BYOLCheckerを起動後、「Begin Tests」をクリックし、テストを実施します。テスト実施後、「WARNING」と表示された項目がある場合には、「Fix All Warnings」をクリックし、再度テストを実施します。
  17. 全てのテスト項目がPASSEDとなると、下記のような画面となりテストが完了となります。続いて、「Run Sysprep」ボタンが表示されるため、こちらをクリックします。
  18. Sysprepが完了したら、自動的に仮想マシンが停止します。
    なおSysprepがエラーが表示された場合に、よくある原因としては、下記が挙げられます。

    • Appxが完全に削除されていない
      対処:手順10を再実施します。
    • WindowsUpdateが全て適用されていない
      対処:VMWareコンソールより該当の仮想マシンを選択し、右クリックでスナップショット>スナップショットまで戻るをクリックし、手順13まで戻り、WindowsUpdateを適用します。       

      スナップショットまで戻らずにWindowsUpdateを行うには、WindowsUpdateの有効化が必要なため上記の対処としています。

  19. 仮想マシンを停止後、VMWareコンソールより、ファイル>OVFへエクスポートをクリックし、イメージをOVF形式でエクスポートします。
  20. ローカルの環境で、スタートボタンを右クリックし、Windows PowerShell(管理者)をクリックし、管理者権限でPowerShellを開き、OVFToolを利用して、OVF形式からOVA形式にイメージ変換します。
    ※OVFToolsは事前にローカルPCにインストールしておきます。

    PS C:\Program Files (x86)\VMware\VMware Workstation\OVFTool> .\ovftool.exe "OVFファイルのファイルパス" "OVAファイルの出力先"
    Opening OVF source
    Warning:
    - Line -1: Unsupported value 'ehci.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'ethernet0.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'floppy0.autodetect' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'guestInfo.detailed.data' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'hpet0.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'monitor.phys_bits_used' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'numa.autosize.cookie' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'numa.autosize.vcpu.maxPerVirtualNode' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge0.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge0.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge4.functions' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge4.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge4.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge4.virtualDev' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge5.functions' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge5.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge5.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge5.virtualDev' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge6.functions' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge6.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge6.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge6.virtualDev' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge7.functions' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge7.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge7.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'pciBridge7.virtualDev' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'sata0.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'sata0:1.autodetect' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'scsi0.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'scsi0.sasWWID' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'sensor.location' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'softPowerOff' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'sound.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'svga.guestBackedPrimaryAware' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'tools.remindInstall' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'toolsInstallManager.lastInstallError' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'toolsInstallManager.updateCounter' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb.vbluetooth.startConnected' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb:1.deviceType' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb:1.parent' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb:1.port' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb:1.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb:1.speed' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb_xhci.pciSlotNumber' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb_xhci:4.deviceType' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb_xhci:4.parent' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb_xhci:4.port' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'usb_xhci:4.present' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.checkpointSVGAPrimarySize' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.baseCapsLevel' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.bc67' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.dxMaxConstantBuffers' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.dxProvokingVertex' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.graphicsMemoryKB' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.lineStipple' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.logicBlendOps' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.logicOps' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.maxPointSize' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.maxTextureAnisotropy' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.maxTextureSize' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.maxVolumeExtent' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.mobMaxSize' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.msFullQuality' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.multisample2x' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.multisample4x' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.multisample8x' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.sm41' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.sm5' for attribute 'key' on element 'ExtraConfig'.
    - Line -1: Unsupported value 'vmotion.svga.supports3D' for attribute 'key' on element 'ExtraConfig'.
    Opening OVA target: 
    Writing OVA package: 
    Transfer Completed
    Warning:
    - No manifest file found.
    - No supported manifest(sha1, sha256, sha512) entry found for: 'Windows_10_x64_(2)-disk1.vmdk'.
    Completed successfully
    PS C:\Program Files (x86)\VMware\VMware Workstation\OVFTool>

    以上でVMイメージの作成は完了です。

S3バケットへOVAイメージのアップロード

作成したOVAイメージをAWSのS3バケットへアップロードする手順になります。

S3バケットへのイメージアップロードは今回はAWSコンソール上から行っておりますが、AWS-CLIからアップロードしても問題ありません。
  1. AWSコンソールへログインし、「S3」サービスに移動し、WorkSpacesを起動するリージョンにS3バケットを作成します。バケット名は任意で、その他設定はデフォルトで作成しています。
  2. 作成したS3バケットをクリックし、「アップロード」ボタンをクリックし、OVAファイルをアップロードします。

    以上でOVAイメージのアップロードは完了です。

VMImportに許可するサービスロールの作成

手順2-3で利用するVMImportに許可するサービスロールをAWS公式ドキュメントに沿って、作成します。

VM Import/Export の要件 - VM Import/Export
VM を Amazon EC2 にインポートするための要件。
  1. VMサービスをプリンシパルとして指定した下記の内容の「trust-policy.json」ファイルを作成します。

    {
       "Version": "2012-10-17",
       "Statement": [
          {
             "Effect": "Allow",
             "Principal": { "Service": "vmie.amazonaws.com" },
             "Action": "sts:AssumeRole",
             "Condition": {
                "StringEquals":{
                   "sts:Externalid": "vmimport"
                }
             }
          }
       ]
    }
  2. AWS-CLIの環境を開き、「trust-policy.json」ファイルを配置したフォルダに移動し、下記のコマンドで「vmiport」という名前のロールを作成します。

    $ aws iam create-role --role-name vmimport --assume-role-policy-document "file://trust-policy.json"
    {
        "Role": {
            "Path": "/",
                "RoleName": "vmimport",
                    "RoleId": "XXXXXXXXXXXXXXXXXXXXXX",
                        "Arn": "arn:aws:iam::XXXXXXXXXX:role/vmimport",
                            "CreateDate": "2021-11-01T00:17:04+00:00",
                                "AssumeRolePolicyDocument": {
                "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Effect": "Allow",
                            "Principal": {
                                "Service": "vmie.amazonaws.com"
                            },
                            "Action": "sts:AssumeRole",
                            "Condition": {
                                "StringEquals": {
                                    "sts:Externalid": "vmimport"
                                }
                            }
                        }
                    ]
            }
        }
    }
    
  3. vmimport」ロールにアタッチする権限を記載した下記の内容の「role-policy.json」ファイルを作成します。S3バケット名は今回は全て、手順3で作成したS3バケットを指定しました。

    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect": "Allow",
             "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket" 
             ],
             "Resource": [
                "arn:aws:s3:::S3バケット名",
                "arn:aws:s3:::S3バケット名/*"
             ]
          },
          {
             "Effect": "Allow",
             "Action": [
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:PutObject",
                "s3:GetBucketAcl"
             ],
             "Resource": [
                "arn:aws:s3:::S3バケット名",
                "arn:aws:s3:::S3バケット名/*"
             ]
          },
          {
             "Effect": "Allow",
             "Action": [
                "ec2:ModifySnapshotAttribute",
                "ec2:CopySnapshot",
                "ec2:RegisterImage",
                "ec2:Describe*"
             ],
             "Resource": "*"
          }
       ]
    }
  4. AWS-CLIの環境を開き、「role-policy.json」ファイルを配置したフォルダに移動し、下記のコマンドで「vmiport」ロールに「role-policy.json」で指定した権限を付与します。以上でサービスロールの作成は完了となります。

    $ aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document "file://C:\import\role-policy.json"

OVAイメージをWorkSpacesイメージへ変換

OVAイメージアップロード後は、AWS-CLIを用いてOVAイメージ⇒AMIイメージ⇒WorkSpacesイメージに変換します。

  1. S3バケットのOVAイメージをVMImportでAMIイメージにするため、ローカルPCにて下記のような「input.json」ファイルを作成します。

    {
        "Description": "Windows10 BYOL Pro",
        "DiskContainers":[
          {
            "Description": "Windows10 Root volume",
            "Format": "ova",
            "UserBucket": {
                "S3Bucket": "S3バケット名", 
                "S3Key": "OVAファイル名.ova"
            }
        }
        ],
        "LicenseType": "BYOL"
    }
  2. AWS-CLIの環境を開き、「input.json」ファイルを配置したフォルダに移動し、下記のコマンドを実行して、VMImportを実行します。

    $ aws ec2 import-image --cli-input-json file://input.json --region ap-northeast-1
    {
        "Description": "Windows10 BYOL Pro",
        "ImportTaskId": "import-ami-000000000000000000", ←タスクID
        "LicenseType": "BYOL",
        "Progress": "1",
        "SnapshotDetails": [
            {
                "Description": "Windows10 Root volume",
                "DiskImageSize": 0.0,
                "Format": "OVA",
                "UserBucket": {
                    "S3Bucket": "S3バケット名が表示されます",
                    "S3Key": "OVAファイル名が表示されます"
                }
            }
        ],
        "Status": "active",
        "StatusMessage": "pending"
    }
    
  3. VMインポートの進捗状況を確認します。

    $ aws ec2 describe-import-image-tasks --import-task-ids import-ami-000000000000000000 ←タスクIDを指定してインポート進捗状況を確認します。
    {
        "ImportImageTasks": [
            {
                "Description": "Windows10 BYOL Pro",
                "ImportTaskId": "import-ami-000000000000000000",
                "LicenseType": "BYOL",
                "Progress": "19",
                "SnapshotDetails": [
                    {
                        "DiskImageSize": 10782879744.0,
                        "Format": "VMDK",
                        "Status": "active",
                        "UserBucket": {
                            "S3Bucket": "S3バケット名が表示されます",
                            "S3Key": "OVAファイル名が表示されます" 
                        }
                    }
                ],
                "Status": "active",
                "StatusMessage": "converting", 
                "Tags": []
            }
        ]
    }
    
  4. VMインポートが完了すると、Statusが「completed」となるため、イメージIDを確認しておきます。

    $ aws ec2 describe-import-image-tasks --import-task-ids import-ami-000000000000000000
    {
        "ImportImageTasks": [
            {
                "Architecture": "x86_64",
                "Description": "Windows10 BYOL Pro",
                "ImageId": "ami-000000000000000000",   ←イメージID
                "ImportTaskId": "import-ami-000000000000000000",
                "LicenseType": "BYOL",
                "Platform": "Windows",
                "SnapshotDetails": [
                    {
                        "DeviceName": "/dev/sda1",
                        "DiskImageSize": 10782879744.0,
                        "Format": "VMDK",
                        "SnapshotId": "snap-000000000000000000",
                        "Status": "completed",
                        "UserBucket": {
                            "S3Bucket": "S3バケット名が表示されます",
                            "S3Key": "OVAファイル名が表示されます"
                        }
                    }
                ],
                "Status": "completed",
                "Tags": [],
                "BootMode": "legacy_bios"
            }
        ]
    }
    
    
  5. インポートが正常に完了すると、AWSコンソールより「EC2」サービスに移動し、イメージ>AMIの一覧にインポートしたイメージが表示され、VMインポート完了となります。イメージIDでインポートしたイメージを確認できますが、Name項目にて、分かりやすいように名前を付けるとイメージ判別しやすいです。
  6. 続いて、AWSコンソールより「WorkSpaces」サービスに移動し、イメージ>イメージの作成より、WorkSpacesイメージを作成します。Office導入予定の場合には、この時にOfficeのバージョンを指定してください。
  7. WorkSpacesイメージが作成されていれば、WorkSpacesイメージ作成完了となります。【参考情報】AMIからWorkSpacesイメージ作成時に、稀に下記のようなエラーが発生することがあります。
    下記の場合に、サポートに問い合わせたところ、AWS側でのイメージ作成後のストレージのスナップショット作成作業で時間を要しタイムアウトとなったということが原因との回答がありました。同事象は、ストレージ内のデータ量が多い場合には発生しうるものということでした。        再度WorkSpacesイメージ作成を行うと、正常にイメージ作成できましたので、一度WorkSpacesイメージ作成にてエラーが発生しても再度お試しいただければと思います。

 

まとめ

一通り、WorkSpacesBYOLイメージ作成についてご説明いたしましたが、いかがでしたでしょうか??
意外に設定事項が多いため、最初は戸惑うかもしれませんが、是非試してみてください!

下記、WorkSpacesBYOLイメージ作成におけるまとめです!

  • WorkSpacesBYOLはWindowsライセンスを持ち込む(BYOL)ことで、利用料金を抑えられるサービスです。
  • WorkSpacesにライセンスを持ち込む(BYOL)場合には、様々な要件があるので注意してください。
  • Windowsの仮想イメージをエクスポート・OVA形式に変換できる機能を持つ仮想基盤が必要となります。
  • Windowsイメージの設定はBYOLの要件に沿って確実に実施してください。
  • BYOLCheckの前に、WindowsUpdateは必ずチェックしてください。
    ※パッチ適用漏れがあるとBYOLCheckerでPassとなりません。(私自身のあるあるです)
  • VMイメージからAMIイメージ変換時に、AWS-CLIを利用します。
  • イメージ変換処理などの作業は1時間程度かかるものが多いため、余裕をもって作業してください。

皆さんのお役に立てば幸いです。よろしくお願いします。

著者について

2020年入社の3年目です!
AWS運用がメインでAWSを利用しています。
IAMの権限編集と通してJSON形式が読めるようになったため、AWSでの設定変更などで幅が広がりました!

中川真歩をフォローする
クラウドに強いによるエンジニアブログです。
SCSKは専門性と豊富な実績を活かしたクラウドサービス USiZE(ユーサイズ)を提供しています。
USiZEサービスサイトでは、お客様のDX推進をワンストップで支援するサービスの詳細や導入事例を紹介しています。
AWSクラウド
シェアする
タイトルとURLをコピーしました