Amazon WorkSpacesの最終アクセス時間を追跡:AWS CLIを用いた効率的な棚卸しガイド
はじめに
こんにちは、Shunです。
突然ですが、Amazon WorkSpacesの管理はちゃんとできていますか?不要なアカウントはありませんか?
Amazon WorkSpacesの管理は、初めはスムーズでも、時間が経つと段々と行き届かなくなることがあります。そのような課題を抱えている方へ、Amazon WorkSpacesの効率的な棚卸し方法をAWS CLIを用いてご紹介します。
得られること
この記事を読むことで、Amazon WorkSpacesの棚卸し手法を学び、実際に活用できるようになります。やりたくなります。
想定読者
- Amazon WorkSpacesの運用に携わる方々
- Amazon WorkSpacesやAWSリソースの棚卸しを考えている方々
- AWS CLIの使い方を学びたい方々
本記事で紹介する内容
- Amazon WorkSpacesからどのようなデータを取得可能か
- 取得したデータの整形方法
- 整形後のデータを用いた棚卸しの実施方法
本記事で取り扱わない内容
- Amazon WorkSpacesの基本的なサービス説明
- AWS CLIやjqの基本的な使用方法
実施すること
概要
Amazon WorkSpacesの「最終アクセス時間(LastKnownUserConnectionTimestamp)」を棚卸しの判断基準として活用します。しかし、この情報だけではどのアカウントかの判別がしづらいため、ユーザー名(UserName)の情報も併せて取得し、関連付けを行います。最終的には、得られたデータをCSVに変換し、視覚的に分析しやすくします。
前提
- 複数のAmazon WorkSpacesを運用している環境
- AWS CLIとjqが使用可能な環境
手順
- Cloud Shellの起動
- AWS CLIを使用してAmazon WorkSpacesのユーザー名を取得
- AWS CLIを使用してAmazon WorkSpacesの最終アクセス時間を取得
- 2,3で取得したデータをマージ
- マージしたデータをCSVへ変換
実際の作業
1. Cloud Shellの起動
アクセスキーなしで操作できるように、Cloud Shellを使用します。
AWS CLIはもちろん、jqコマンドもデフォルトで利用可能です。
2. AWS CLIを使用してAmazon WorkSpacesのユーザー名を取得
まずはAWS CLIでWorkSpacesのユーザー名を取得します。
以下のコマンドを実行します。
$ aws workspaces describe-workspaces > [file_name1].json
$ cat [file_name1].json
{
"Workspaces": [
{
"WorkspaceId": "ws-xxxxxx",
"DirectoryId": "d-xxxxxx",
"UserName": "xxxxxx",
"IpAddress": "xxxxxx",
"State": "xxxxxx",
"BundleId": "wsb-xxxxxx",
"SubnetId": "subnet-xxxxxx",
"ComputerName": "EC2-xxxxxx",
"WorkspaceProperties": {
"RunningMode": "xxxxxx",
"RootVolumeSizeGib": xx,
"UserVolumeSizeGib": xx,
"ComputeTypeName": "xxxxxx",
"Protocols": [
"xxxxxx"
]
},
"ModificationStates": []
}
...
]
}
このコマンドでUserNameを含む情報が取得できますが、LastKnownUserConnectionTimestampは含まれません。
3. AWS CLIを使用してAmazon WorkSpacesの最終アクセス時間を取得
続いて、最終アクセス時間を取得します。
以下のコマンドを実行します。
$ aws workspaces describe-workspaces-connection-status > [file_name2].json
$ cat [file_name2].json
{
"WorkspacesConnectionStatus": [
{
"WorkspaceId": "ws-xxxxxx",
"ConnectionState": "xxxxxx",
"ConnectionStateCheckTimestamp": "2024-01-01T00:00:00.000000+09:00",
"LastKnownUserConnectionTimestamp": "2024-01-01T00:00:00.000000+09:00"
}
...
]
}
ここでは、LastKnownUserConnectionTimestampが取得できます。
4. 2,3で取得したデータをマージ
UserNameとLastKnownUserConnectionTimestampを関連付けるため、2つのファイルをマージします。
WorkspaceIdをキーにしてマッピングを行います
$ jq -s "{Workspaces: [(.[0].WorkspacesConnectionStatus + .[1].Workspaces | group_by(.WorkspaceId)[] | add | {UserName, WorkspaceId, LastKnownUserConnectionTimestamp})]}" [file_name1].json [file_name2].json > [merge_file].json
$ cat [merge_file].json
{
"Workspaces": [
{
"UserName": "xxxxxx",
"WorkspaceId": "ws-xxxxxxx",
"LastKnownUserConnectionTimestamp": "2024-01-01T00:00:00.000000+09:00"
}
...
]
}
上記の手順で、必要な情報を統合します。
5. マージしたデータをCSVへ変換
最後に、マージしたデータをCSV形式に変換し、視覚的な分析が容易になります。
$ jq -r '["UserName", "WorkspaceId", "LastKnownUserConnectionTimestamp"], (.Workspaces[] | [.UserName, .WorkspaceId, .LastKnownUserConnectionTimestamp]) | @csv' [merge_file].json > [merge_file].csv
実際に[merge_file].csvを確認してみると、以下のようになっているかと思います。

まとめ
この記事を通して、Amazon WorkSpacesの棚卸しができるようになったかと思います。この方法を用いることで、使用されていないAmazon WorkSpacesを一覧で確認し、棚卸し作業を効率化できます。
また、Amazon WorkSpacesの課金体系を理解し適切に選択することも重要です。WorkSpacesは、80時間以上の使用が見込まれる場合は「AlwaysOn」、それ未満であれば「AutoStop」が適しています。
さらに、Amazon WorkSpacesのコスト最適化を進めるためには、「コストオプティマイザー」の利用を検討してみてください。
Amazon WorkSpaces のコストオプティマイザー
このソリューションは、Amazon WorkSpaces のすべての使用状況データを分析し、個々の使用状況に応じて、WorkSpace を最も費用対効果の高い課金オプション (時間単位または月単位) に自動的に変換します。本ソリューションは、単一のアカウントで使用することも、複数のアカウントにまたがる AWS Organizations で使用することもでき、WorkSpace の使用状況をモニタリングしてコストを最適化するのに役立ちます。
このソリューションは、使用状況に基づいて、最も費用対効果の高い課金オプション(AlwaysOnかAutoStop)に自動で切り替えてくれます。この機能により、コストの最適化が期待できます。
最後まで読んでいただきありがとうございます!
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterGoogle Cloud Partner Top Engineer 2025、2024 AWS All Cert、ビール検定1冠
Recommends
こちらもおすすめ
-
【Amazon Route53】AWS CLIで特定文字列レコードを抽出してみた
2023.12.5
-
こんにちは Okta
2024.2.13
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28

AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16
