[アップデート] Amazon WorkSpacesでAPIからイメージを作成できる様になりました

2022.07.28

しばたです。

本日Amazon WorkSpacesでイメージを作成するAPI(CreateWorkspaceImage)が公開されました。
AWSからのアナウンスはこちらになります。

これまでのAPI

従来Amazon WorkSpacesにおいては以下のAPIが公開されていました。

  • (1) 各ユーザーのWorkSpaceを作成するCreateWorkspaces API
    • このAPIではBundleIDを指定
  • (2) 各バンドルを作成するCreateWorkspaceBundle API
    • このAPIではImageIDを指定

バンドルを作成するベースとなるイメージに関しては作成のAPIが無くマネジメントコンソールから行う必要がありました。

今回やっとこの部分がAPIとして公開され、AWS CLIや各種SDKからイメージ作成が可能となり自動化できる部分が増えた形となります。

自動化の限界

とはいえイメージを作成するには元となるWorkSpace環境が必要で、かつ、最初のカスタマイズはWorkSpace内部から行う必要があります。
加えてAppStream 2.0の様にWorkSpace内部からこのAPIを呼べるわけでもありません。 *1

現状は「マネジメントコンソールからポチポチ手作業をしていた部分をAPI化した」だけですのであまり過度な期待はしない方が良いでしょう。

従来の手順

参考までに従来の手順(マネジメントコンソールからの作成手順)を記載しておきます。

WorkSpaces環境を用意し、元になるWorkSpace環境を一つ作成し起動しておきます。
今回はWindows Server 2019ベースのイメージにVS Codeをインストールした環境をベースにします。
(なお、本記事はこれ以後VS Codeは登場しません。「何かカスタマイズしてる」程度に捉えてください)

このWorkSpaceを起動した状態でマネジメントコンソールから「イメージの作成」アクションを選びます。

確認画面が出るので「次へ」をクリック。

イメージ名と説明を記載し「イメージの作成」をクリック。

これでイメージ作成が開始されます。

だいたい40-50分程度待てば作成完了となります。

やってみた

前項の環境に対してAWS CLIからイメージ作成を行ってみます。

本日時点ではAWS CLI Ver.1.25.39からCreateWorkspaceImageAPIに対応しており、まだAWS CLI v2は非サポートでした。
こちらは少し待てばAWS CLI v2でもサポートされるでしょう。
このため今回はAWS CLI Ver.1.25.39 on Bashの環境を使っています。

CLIではaws workspaces create-workspace-imageコマンドでイメージ作成できます。
指定するパラメーターはマネジメントコンソール同様に作成元WorkSpaceID(--workspace-id)、イメージ名(--name)、説明(--description)となります。

aws workspaces create-workspace-image --name "イメージ名" --description "イメージの説明" --workspace-id "作成元WorkSpaceID"

今回はこんな感じでmy-image-02を作ってみました。
作成に成功するとイメージ情報が返されます。

/ $ aws workspaces create-workspace-image --name "my-image-02" \
>     --description "My Image created by CLI" \
>     --workspace-id ws-xxxxxxxxxx
{
    "ImageId": "wsi-xxxxxxxx",
    "Name": "my-image-02",
    "Description": "My Image created by CLI",
    "OperatingSystem": {
        "Type": "WINDOWS"
    },
    "State": "PENDING",
    "RequiredTenancy": "DEFAULT",
    "Created": 1658977370.137,
    "OwnerAccountId": "xxxxxxxxxxxx"
}

あとは作成完了を待つだけです。

残念ながらWorkSpacesにはaws workspaces waitコマンドが無いので完了待ちは自力でポーリングするしか無い感じです。
参考までにイメージの状態取得コマンドを紹介しておきます。

# イメージの状態確認
aws workspaces describe-workspace-images --image-ids "wsi-xxxxxxxx" --query "Images[0].State" --output text

WorkSpaceが起動していない場合

なお、対象WorkSpaceが起動していない場合にaws workspaces create-workspace-imageコマンドを実行すると以下のエラーとなります。

An error occurred (InvalidResourceStateException) when calling the CreateWorkspaceImage operation: The specified WorkSpace is not in the AVAILABLE state. Confirm the WorkSpace identifier, make sure that the WorkSpace is in the AVAILABLE state, and try again.

必要に応じて事前にWorkSpaceの状態チェックや起動処理を用意すると良いでしょう。

# WorkSpaceの状態確認
aws workspaces describe-workspaces --workspace-ids "ws-xxxxxxxxx" --query "Workspaces[0].State" --output text

# 当該WorkSpaceが起動してない場合は起動しておく
aws workspaces start-workspaces --start-workspace-requests "WorkspaceId=ws-xxxxxxxxx"

最後に

以上となります。

シンプルな更新ですがWorkSpaces環境の運用を自動化している方にとっては嬉しいのかな?と思う次第です。

脚注

  1. AppStream 2.0はImage Builder内部からイメージ作成のコマンドを実行できる