[アップデート] Amazon WorkSpacesがバンドル管理APIをサポートしました

2021.03.22

しばたです。

今までサポートして無かったっけ?という感じだったのですが、先日Amazon WorkSpacesでバンドル管理APIがサポートされました。

現時点では最新のAWS CLI(Ver.2.1.31, Ver.1.19.27)でサポートされています。
(その他SDKなどでも大体2021年3月10日以後のリリースでサポートされている様です)

今回はAWS CLI Ver.2.1.31を使って追加された機能を試してみます。

AWS CLIで追加された機能

AWS CLI Ver.2.1.30とVer.2.1.31の差分を比較したところバンドル管理のための以下のコマンドが追加されていました。

バンドルの追加、更新、削除とひと通りのオペレーションが増えています。
ちなみにバンドルを参照する

は以前から存在しています。

試してみた

それでは早速試してみます。

バンドルを作成するためにはWorkSpaces環境とカスタムイメージが必要ですが、それらについてはすでに作成済みの状態から開始します。
残念ながらまだカスタムイメージをCLIで作成することはできないためこの手順はマネジメントコンソールから行う必要があります。

今回はこんな感じでWindows 10環境のカスタムイメージmy-custom-imagemy-custom-image2を用意しておきました。

# CLIからカスタムイメージを確認
> aws workspaces describe-workspace-images --query "Images[].{ImageId:ImageId,Name:Name,Description:Description}"
[
    {
        "ImageId": "wsi-1ymby2yww",
        "Name": "my-custom-image2",
        "Description": "Custom image sample no.2"
    },
    {
        "ImageId": "wsi-gj9fslnz2",
        "Name": "my-custom-image",
        "Description": "Custom image sample"
    }
]

ちなみにCLI環境はamazon/aws-cliをベースに用意しました。
(本記事の主題ではないですが参考までに記載しておきます)

# Docker Desktop for Windowsで最新のAWS CLIイメージを使用
PS > docker run -v "$env:USERPROFILE\.aws:/root/.aws" --rm -it --entrypoint /bin/bash amazon/aws-cli

# 以後はコンテナ内のBashから各種コマンドを実行
> aws --version
aws-cli/2.1.31 Python/3.8.8 Linux/5.4.72-microsoft-standard-WSL2 docker/x86_64.amzn.2 prompt/off

1. バンドルの追加 (create-workspace-bundle)

バンドルの追加にはaws workspaces create-workspace-bundleを使います。
パラメーターはマネジメントコンソールから作成する場合と同様で

  • --bundle-name : バンドル名
  • --bundle-description : 説明
  • --image-id : 使用するカスタムイメージID
  • --compute-type : バンドルタイプ (Name = "VALUE"|"STANDARD"|"PERFORMANCE"|"POWER"|"GRAPHICS"|"POWERPRO"|"GRAPHICSPRO" 形式)
  • --root-storage : ルートボリュームサイズ (Capacity = GB 形式)
  • --user-storage : ユーザーボリュームサイズ (Capacity = GB 形式)

が指定可能です。
実行例は以下。

# バンドルの新規作成
> aws workspaces create-workspace-bundle \
    --bundle-name "my-bundle" \
    --bundle-description "My custom bundle" \
    --image-id "wsi-gj9fslnz2" \
    --compute-type "Name=VALUE" \
    --root-storage "Capacity=80" \
    --user-storage "Capacity=10"

{
    "WorkspaceBundle": {
        "BundleId": "wsb-87y06s2pv",
        "Name": "my-bundle",
        "Owner": "xxxxxxxxxxxxxxx",
        "Description": "My custom bundle",
        "ImageId": "wsi-gj9fslnz2",
        "RootStorage": {
            "Capacity": "80"
        },
        "UserStorage": {
            "Capacity": "10"
        },
        "ComputeType": {
            "Name": "VALUE"
        },
        "LastUpdatedTime": "2021-03-22T05:28:37.430000+00:00"
    }
}

コマンドを実行すると直ちに完了し、バンドル情報が返されます。
マネジメントコンソールから確認してもちゃんと作成されています。

ちなみにバンドル情報はaws workspaces describe-workspace-bundlesコマンドから参照可能です。

# バンドル情報の確認
> aws workspaces describe-workspace-bundles --bundle-ids wsb-87y06s2pv

2. バンドルの更新 (update-workspace-bundle)

バンドルの更新にはaws workspaces update-workspace-bundleを使います。
こちらはマネジメントコンソールからの場合と同様イメージの差し替えのみ可能で以下のパラメーターを取ります。

  • --bundle-id : 更新対象のバンドルID
  • --image-id : 更新するイメージID
# バンドルの更新
> aws workspaces update-workspace-bundle --bundle-id "wsb-87y06s2pv" --image-id "wsi-1ymby2yww"

ドキュメントにも記載されていますが、このコマンドはあくまでもバンドル定義の更新をするだけで既存WorkSpaceには影響しませんのでご注意ください。

3. バンドルの削除 (delete-workspace-bundle)

バンドルを削除するにはaws workspaces delete-workspace-bundleを使います。
こちらはパラメーターに削除対象のバンドルIDを指定してやります。

  • --bundle-id : 削除対象のバンドルID
# バンドルの削除
> aws workspaces delete-workspace-bundle --bundle-id "wsb-87y06s2pv"

当然ですが削除可能なのはユーザーが作成したバンドルのみであり、Amazon所有のパブリックバンドルは削除できません。(バンドルが見つからないエラーとなる)

# Amazon所有のパブリックバンドルは削除できない (ResourceNotFoundExceptionとなる)
> aws workspaces describe-workspace-bundles --bundle-ids "wsb-0zsvgp8fc" --query "Bundles[0].{BundleId:BundleId, Name:Name, Owner:Owner}"
{
    "BundleId": "wsb-0zsvgp8fc",
    "Name": "Value with Windows 10 and Office 2016",
    "Owner": "Amazon"
}
> aws workspaces delete-workspace-bundle --bundle-id "wsb-0zsvgp8fc"

An error occurred (ResourceNotFoundException) when calling the DeleteWorkspaceBundle operation: The WorkSpace bundle with ID wsb-0zsvgp8fc cannot be found. Confirm that you're specifying the correct bundle ID, and then try again.

最後に

簡単ですが以上となります。

バンドルの作成や更新は頻発する作業ではないのでCLIが無くてもそこまで不便は無かったかと思います。
とはいえCLIがあれば作業の再現性も高くなりより便利になるので積極的に利用していくと良いでしょう。