[新機能]Amazon WorkSpacesがAPIとCLIをサポートしました

はじめに

Amazon WorkSpacesは、これまでAWS管理コンソールからのみ操作が可能でした。今回Amazon WorkSpacesのAPIが公開され、 CLIやSDKで操作可能になりました!

ということで、早速AWS CLIからの操作を試してみました!

やってみる

aws cliのアップデート

最初に僕のノートPC(Mac OS X Yosemite)に入っていたaws cliのバージョンはこれ。

$ aws --version
aws-cli/1.7.18 Python/2.7.6 Darwin/14.1.0

最新のaws cliにアップデートします。

$ sudo pip install -U awscli
$ aws --version
aws-cli/1.7.22 Python/2.7.9 Darwin/14.1.0

aws workspacesコマンドのhelpはこんな感じ。WorkSpacesの操作と、その他情報の取得ができます。

$ aws workspaces help
WORKSPACES()                                                      WORKSPACES()

NAME
       workspaces -

DESCRIPTION
       This  is  the  Amazon  WorkSpaces  API  Reference . This guide provides
       detailed information about Amazon WorkSpaces  operations,  data  types,
       parameters, and errors.

AVAILABLE COMMANDS
       o create-workspaces
       o describe-workspace-bundles
       o describe-workspace-directories
       o describe-workspaces
       o help
       o reboot-workspaces
       o rebuild-workspaces
       o terminate-workspaces
                                                                  WORKSPACES()

describe-workspace-directories

WorkSpacesを所属させるDirectoryはaws cliでは作成できないので、AWS管理コンソールで作っておきます。

Directory作成後にdescribe-workspace-directoriesを実行すると、以下のように情報が取得できます。

$ aws workspaces describe-workspace-directories
{
    "Directories": [
        {
            "CustomerUserName": "Administrator",
            "DirectoryId": "d-9567331a7f",
            "DirectoryName": "corp.amazonworkspaces.com",
            "SubnetIds": [
                "subnet-71b21406",
                "subnet-dc7d8585"
            ],
            "WorkspaceCreationProperties": {
                "EnableInternetAccess": true,
                "EnableWorkDocs": true,
                "UserEnabledAsLocalAdministrator": true
            },
            "Alias": "d-9567331a7f",
            "State": "REGISTERED",
            "DirectoryType": "SIMPLE_AD",
            "RegistrationCode": "YOUR_REGST_CODE",
            "IamRoleId": "arn:aws:iam::1234567890:role/workspaces_DefaultRole",
            "DnsIpAddresses": [
                "172.16.0.49",
                "172.16.1.233"
            ],
            "WorkspaceSecurityGroupId": "sg-7154d814"
        }
    ]
}

describe-workspace-bundles

WorkSpacesを作る際に指定するバンドル(ソフトウェアのオプションセット)はdescribe-workspace-bundlesコマンドで参照できます。この時--owner AMAZONを付与しないと、AWS が用意しているバンドルは参照できません。

$ aws workspaces describe-workspace-bundles --owner AMAZON
{
    "Bundles": [
        {
            "ComputeType": {
                "Name": "PERFORMANCE"
            },
            "Description": "Performance Bundle",
            "BundleId": "wsb-b0s22j3d7",
            "Owner": "Amazon",
            "UserStorage": {
                "Capacity": "100"
            },
            "Name": "Performance"
        },
        {
            "ComputeType": {
                "Name": "PERFORMANCE"
            },
            "Description": "Performance Plus Bundle (Japanese)",
            "BundleId": "wsb-0m60gspvt",
            "Owner": "Amazon",
            "UserStorage": {
                "Capacity": "100"
            },
            "Name": "Performance Plus(Japanese)"
        },
...snip...

create-workspaces

それでは実際にWorkSpacesを作ってみます。 WorkSpacesの作成では所属させるDirectoryのID、ユーザー名、使用するバンドルのIDが必要です。なお、このユーザーは既にDirectoryに作成されている必要があります。

$ aws workspaces create-workspaces --workspaces DirectoryId=d-9567331a7f,UserName=smokeymonkey,BundleId=wsb-2k4vg5l73
{
    "PendingRequests": [
        {
            "UserName": "smokeymonkey",
            "DirectoryId": "d-9567331a7f",
            "State": "PENDING",
            "WorkspaceId": "ws-5t1q2x8jw",
            "BundleId": "wsb-2k4vg5l73"
        }
    ],
    "FailedRequests": []
}

describe-workspaces

WorkSpacesの一覧はdescribe-workspacesで取得できます。

$ aws workspaces describe-workspaces
{
    "Workspaces": [
        {
            "UserName": "smokeymonkey",
            "DirectoryId": "d-9567331a7f",
            "State": "AVAILABLE",
            "WorkspaceId": "ws-5t1q2x8jw",
            "SubnetId": "subnet-71b21406",
            "IpAddress": "172.16.0.88",
            "BundleId": "wsb-2k4vg5l73"
        }
    ]
}

なお、--directory-idでディレクトリ単位でのフィルタ、--user-nameでユーザーでのフィルタ、--bundle-idでバンドルでのフィルタが使えます。

reboot-workspaces

WorkSpacesの再起動はreboot-workspacesで行います。

$ aws workspaces reboot-workspaces --reboot-workspace-requests ws-5t1q2x8jw
{
    "FailedRequests": []
}

$ aws workspaces describe-workspaces --workspace-ids ws-5t1q2x8jw
{
    "Workspaces": [
        {
            "UserName": "smokeymonkey",
            "DirectoryId": "d-9567331a7f",
            "State": "REBOOTING",
            "WorkspaceId": "ws-5t1q2x8jw",
            "SubnetId": "subnet-71b21406",
            "IpAddress": "172.16.0.88",
            "BundleId": "wsb-2k4vg5l73"
        }
    ]
}

rebuild-workspaces

WorkSpacesを再構築するのはrebuild-workspacesです。

$ aws workspaces rebuild-workspaces --rebuild-workspace-requests ws-5t1q2x8jw
{
    "FailedRequests": []
}

$ aws workspaces describe-workspaces --workspace-ids ws-5t1q2x8jw
{
    "Workspaces": [
        {
            "UserName": "smokeymonkey",
            "DirectoryId": "d-9567331a7f",
            "State": "PENDING",
            "WorkspaceId": "ws-5t1q2x8jw",
            "BundleId": "wsb-2k4vg5l73"
        }
    ]
}

再構築中はStateがPENDINGになります。

terminate-workspaces

WorkSpacesの削除はterminate-workspacesで行います。

$ aws workspaces terminate-workspaces --terminate-workspace-requests ws-5t1q2x8jw

実際にやっちゃうとお金がもったいないのでやってません!

さいごに

大量のWorkSpacesを作ったり、あるいは情報を取得したい場合など、CLIが使えるのはとても便利だと思います。Excelの管理表からcreate-workspacesコマンドを作ってターミナルにガーっと流し込むとか。これでまたWorkSpacesの大規模運用の敷居が下がりましたね!