Amazon WorkSpaces のコストを最適化しよう!

 2024 年アップデート版

2024-04-02
AWS ソリューション紹介

Author : 鈴木 大樹

本記事は、2022 年 1 月に公開されたブログ「仮想デスクトップのコストを最適化 ! Amazon WorkSpaces Cost Optimizer を試してみる」の 2024 年アップデート版です。この記事では、Amazon WorkSpaces の実行モードを最適化するための AWS ソリューションを紹介しました。

その後、このソリューションにアップデートがありました。AWS Organizations への対応が追加されました。今までは、それぞれのアカウントでこのソリューションをデプロイしなければなりませんでした。今回のアップデートにより、マルチアカウント環境において 組織の root アカウントが ハブとなり、コスト最適化や Amazon CloudWatch による使用状況のログを一元的に管理できるようになりました。

本記事では、前回の記事を踏まえつつ、アップデートによって変更されたアーキテクチャの解説やマルチアカウントへのデプロイ方法を追加した記事となっています。

「Amazon WorkSpaces Cost Optimizer」を試してみる

さて、昨今、多くの企業や組織でリモートワーク (テレワーク) が急速に広まっておりますが、みなさまの中には、リモートワークを実現するために、Amazon WorkSpaces を利用されている方もいらっしゃるのではないでしょうか? Amazon WorkSpaces は、フルマネージド型仮想デスクトップサービスであり、月額課金 (AlwaysOn) または時間料金 (AutoStop) の実行モードが提供されているため、利用状況に応じて、最適な実行モードを選択すること可能です。

利用時間によってどちらの実行モードのコスト効率が高いかは、使用するバンドルによって異なりますが、おおよその目安として、月に 80 時間以上 WorkSpaces を起動する場合には、月額課金 (AlwaysOn) の方が安くなる傾向にあります。しかしその一方で、「全ユーザー分の利用状況を確認し、最適な実行モードを選択するのは難しい」という声を管理者の方からよく伺います。

そのような方のために今回、 WorkSpaces の使用状況をモニタリングし、コストを最適化するのにも役立つソリューションを紹介していこうと思います。

それでは、「Amazon WorkSpaces Cost Optimizer」がどんなソリューションなのか見ていきましょう!


Amazon WorkSpaces Cost Optimizer とは

「Amazon WorkSpaces Cost Optimizer」は、個々の WorkSpaces の使用状況を分析し、最もコスト効率の高い実行モード (時間課金または月額課金) に自動変更するソリューションです。

本ソリューションをデプロイすると、 WorkSpaces の利用時間をモニタリングし、デプロイ時に指定したしきい値と比較することで、以下のような実行モードの変更を自動で行います。

時間課金から月額課金

日に一度 WorkSpaces の利用時間を集計し、その月の WorkSpaces の利用時間の累計がしきい値を超えた時点で月額課金に変更します。

変更が実施されると、その月は、「当月分として既に発生している時間料金 (基本月額課金を含む)」と「月の残りの日数分で日割りにした月額課金」 の合計が課金されます。

月額課金から時間課金

月末時点で WorkSpaces 利用の累計時間がしきい値を下回った場合は、時間課金に変更します。

変更が実施されると、翌月から時間課金となります。

また、 WorkSpaces の使用状況はモニタリングしたいが、実行モードの自動変更を行いたくない場合には、「ドライランモード」でデプロイし、その結果をもとに手動で変更を実施可能です。これにより、事前に本ソリューションが推奨する変更内容を評価および分析することができます。


使用している AWS サービスは?

AWS ソリューションは CloudFormation テンプレートが提供されています。本ソリューションをデフォルトのパラメータで実行すると、以下のアーキテクチャがデプロイされます (AWS Organizations を使用しない場合は、ハブアカウントと書かれているアーキテクチャがデプロイされます) 。

  1. ハブテンプレートは、24 時間ごとに Amazon Elastic Container Service (Amazon ECS) タスクを呼び出す Amazon EventBridge ルールを作成します。
  2. Amazon ECS タスクは、AWS Directory Service にポーリングして、特定の AWS リージョンで Amazon WorkSpaces に登録されているすべてのディレクトリのリストを収集します。
  3. 次にタスクは、時間課金モデルである各 WorkSpaces の合計使用量をチェックします。WorkSpaces が月間使用量のしきい値を満たしている場合、このソリューションは個々の WorkSpace を月額課金に変換します。
  4. 月末に、タスクは月額課金モデルの各 WorkSpaces の合計使用量をチェックします。WorkSpaces が月間使用量のしきい値を満たしていない場合、ソリューションは、次の月の初めに個々の WorkSpaces を月額課金から時間課金に変換します。
  5. Amazon ECS タスクは、Amazon Simple Storage Service (Amazon S3) バケットに結果をアップロードします。
     

AWS Organizations のメンバーアカウントでも Cost Optimizer を利用する場合

  1. スポークテンプレートは、AWS Lambda 関数を呼び出して、ハブアカウントの Amazon DynamoDB テーブルにスポークアカウントとして登録するカスタムリソースを作成します。
  2. Amazon ECS タスクは、WorkSpaces を管理するために、各スポークアカウントに AWS Identity and Access Management (IAM) ロールを想定しています。

コスト試算の例

AWS CloudFormation でデプロイすると、規模感がわからず、利用料が不安・・という方も多いと思います。そこで、コスト試算をご紹介します!このソリューションを実行するために発生する AWS サービスのコストは、このソリューションが監視する WorkSpaces の数によって異なります。

例えば、 1000 個の WorkSpaces を対象に、バージニア北部リージョンにてデフォルト設定で本ソリューションをデプロイした場合、1 日あたり発生するコストは、約 0.167 USD ( 月額約 5 USD ) です。

※ これには、 AWS Lambda、 Amazon CloudWatch、および AWS Fargate、Amazon S3 の料金を含まれておりますが、個々の WorkSpaces のコストは含まれておりません。

※ 2024 年 2 月時点での試算です。

コスト試算の詳細やその他の試算例については、実装ガイド のコストページに記載がございますのでご参照ください。


デプロイ方法・設定方法

AWS CloudFormation スタックの作成 ~シングルアカウントでデプロイする場合~

それでは早速、AWS ソリューションをデプロイしていきましょう。ここでは、シングルアカウントでデプロイする場合について説明していきます。シングルアカウント・マルチアカウント問わずハブテンプレートを使う必要があるため、まずはハブアカウントをデプロイしていきます。

本ソリューションにて使用する CloudFormation テンプレートを実行するために、 Amazon WorkSpaces Cost Optimizer のランディングページにアクセスします。
「AWS コンソールで起動する」を選択します。

クリックすると拡大します

CloudFormation が起動し、スタックの作成の画面が表示されます。デフォルトで「バージニア北部」リージョンが選択されているため、ソリューションを展開するリージョンに変更します。 (今回は東京リージョンに変更)

前提条件 - テンプレートの準備」、「テンプレートの指定」は変更せずにそのまま「次へ」を選択します。

クリックすると拡大します

スタックのパラメータ設定

スタックの名前」に任意の名前 (例:WorkSpacesCostOptimizer) を入力します。

クリックすると拡大します

次に「パラメータ」では、まず AWS Fargate コンテナがデプロイされる VPC を設定します。 VPC は新規で作成するか、既存の VPC 上に構築するかを選択できますが、今回はデフォルトの設定のまま新規に VPC を作成します。

ソリューションをデプロイする VPC は WorkSpaces が接続する VPC と同一にする必要はないため (接続性も不要)、既存のオンプレミス環境や VPC と IP アドレスが被らないように、必要に応じて CIDR の値を変更した上で、 VPC の新規作成からご検討頂ければと思います。もし既存の VPC を利用する場合には、インターネット接続可能な VPC をご選択ください。

クリックすると拡大します

テストパラメータ (Testing Parameter) の設定では、ドライランモードの設定有無などを設定します。

実行モードを自動変更しない場合は、「Yes」、自動変更する場合は、「No」を選択します。今回はデフォルト設定のままドライランモードに設定します。

クリックすると拡大します

価格パラメータ (Pricing Parameters) の設定では、 各バンドルごとに自動変更のしきい値を設定します。

WorkSpaces は使用するリージョンやバンドルによって料金が異なるため、本ソリューションではバンドル (バリュー、スタンダード、パフォーマンスなど) ごとにそれぞれしきい値を設定します。デフォルトのしきい値は時間単位および月単位の請求損益分岐点の近くに設定されていますが、実際に使用されるリージョンやバンドルに応じて最適なしきい値は変わる可能性があるため、以下の計算式を用いてバンドルごとの損益分岐点を算出し、パラメータを変更することでしきい値を調整できます。 (なお、しきい値超過のチェックは 24 時間間隔で実施されることを考慮し、算出した損益分岐点よりも少し少ない値に設定するのも良いかと思います。)

しきい値の計算式: (月額課金 - 時間料金の固定分) ÷ 時間料金の従量課金分

例)  東京リージョンの Windows パフォーマンスバンドル (ルートボリューム: 80 GB, ユーザーボリューム: 10GB) の場合
・月額課金: 59.00 USD
・時間料金: 10.00 USD/月 + 0.61 USD/時間
しきい値:  (59.00 - 10.00)  ÷ 0.61 ≒ 80.32 時間
→ PerformanceLimit のセルに 80 と入力

クリックすると拡大します

[ 参考 ] 今回特に設定は変更しませんが、以下の機能も提供されています。

  • 対象とする WorkSpaces のリージョンを制限する機能 (空欄の場合、全リージョンを対象)
  • 1 ヶ月間使用されなかった WorkSpaces を削除する機能 (ドライランモードで分析結果のみ確認することも可能) 

※その他各パラメータの詳細については、 実装ガイド をご参照ください。

パラメータの設定が終了したら、ページ下部の「次へ」を選択します。[Multi account deployment] については、[ 参考 ] マルチアカウントでデプロイする方法 でご紹介いたします。今回は空白のまま「次へ」を選択します。

スタックオプションの設定も、デフォルトのままページ下部の「次へ」を選択します。

クリックすると拡大します

レビューを下へスクロールし、「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」 にチェックを入れ、「スタックの作成」を選択します。

クリックすると拡大します

スタックの作成が成功したことを確認します。作成完了までに 5 分程度かかります。

クリックすると拡大します

実行結果を確認する

しきい値超過のチェックは、ごと日 23:00 GMT に実行され、実行結果は S3 バケットに保存されます。

実行結果を確認するには、まず先ほど作成した CloudFormation スタックの「出力」タブから、 BucketName の値をコピーします。

クリックすると拡大します

Amazon S3 のマネジメントコンソール画面にアクセスし、検索フィールドに先程コピーした BucketName の値入力し、対象の S3 バケットを選択します。

クリックすると拡大します

分析結果は、実行した日付に基づいてフォルダが階層構造で作成されますので、今日の日付のフォルダに移動した後、「aggregated_daily.csv」をチェックし、「ダウンロード」を選択します。

クリックすると拡大します

ファイルを開くと分析結果を確認でき、 WorkSpaces ごとに「当月の利用時間の累計」、「設定されたしきい値」、「実行モードの変更情報」、「現在の実行モード」、「変更後の実行モード」などの情報を確認できます。

ドライランモードをオフ (「Launch in Dry Run Mode」を「No」) にしてデプロイした場合、該当する WorkSpaces の実行モードが 「変更後の実行モード (New Mode)」の内容に自動変更されます。

クリックすると拡大します


[ 参考 ] 実行モードが実際に自動変更されることを確認 / 検証する方法

ここまでで本ソリューションの活用イメージを掴んで頂けたのではないでしょうか。
一方、試しに実行モードが自動変更されることを確認 / 検証しようとすると、しきい値を超えるまで WorkSpaces を利用する必要があったり、しきい値超過のチェックが次に実施されるまで待つ必要があったりします。

すぐに実行モードの自動変更を確認 / 検証したい場合には、まず実行モードの自動変更のしきい値を少ない値「1」に変更してデプロイし、次に WorkSpaces を 1 時間以上利用した後に、本ソリューションにてデプロイされる Lambda 関数を手動実行することにより、実際に実行モードが自動変更されることをすぐに確認できますので、その方法もご紹介します。

事前準備:WorkSpaces の作成

事前準備として、 Standard バンドルの WorkSpaces を AutoStop (時間課金) モードで 1 台作成します。

クリックすると拡大します

WorkSpaces の作成手順の詳細は割愛しますが、WorkSpaces の概要やデプロイ手順については、以下の資料をご参照ください。

AWS CloudFormation スタックの作成

デプロイ時のパラメータをデフォルトから以下のように変更し、本ソリューションをデプロイします。

  • ドライランモード:オフ (default:オン)
  • Standard バンドルのしきい値:1 (default:81) ※ 今回は動作確認用に例外的に少ない値に変更

なお、今回動作確認用に新しく作成する WorkSpaces 以外に、既に Standard バンドルの WorkSpaces が存在する場合、既存の WorkSpaces の実行モードを変更される可能性があります。その場合には、ドライランモードをオンにしてデプロイし分析結果のみご確認頂くか、既存の WorkSpaces に以下のタグを付与することで実行モードの自動変更対象から除外することできますので、その設定をした上で動作確認を行なってください。

  • キー:Skip_Convert
  • : (任意の値) 

クリックすると拡大します

Lambda 関数を手動実行する

動作確認のために、まずは本ソリューションでデプロイされた Lambda 関数を一度手動実行して結果を確認します。

作成した CloudFormation スタックの「リソース」タブから、「CostOptimizerCreateTaskFun」の文字列を含む方の Lambda 関数を選択します。

クリックすると拡大します

Lambda の画面に遷移したら、「テスト」タブを選択し、「名前」に任意の名前 (例:TestEvent) を入力した後、「テスト」を選択します。

クリックすると拡大します

テストが成功したことを確認します。

クリックすると拡大します

分析結果の確認

分析結果を確認すると、 WorkSpaces が作成されたばかりの段階では利用時間が発生していないため、実行モードに変更はなく、時間料金 (AutoStop) のままになっていることが確認できます。

クリックすると拡大します

次に、WorkSpaces がしきい値で指定した 1 時間以上起動したのちに、再び Lambda 関数を実行し、再度分析結果を確認します。

そうすると、 Change Reported に「ToMonthly」が記録され、実行モードが月額課金 (AlwaysOn) に変更されていることが確認できます。

クリックすると拡大します

Amazon WorkSpaces のマネジメントコンソール画面 にアクセスすると、実行モードが月額課金 (AlwaysOn) に自動変更されていることが確認できます。

クリックすると拡大します


[ 参考 ] マルチアカウントでデプロイする方法

参考として、マルチアカウントでデプロイする方法についてご紹介します。マルチアカウントでデプロイすることのメリットは、例えば部署ごとにそれぞれのアカウントで WorkSpaces を利用している場合でも、 Cost Optimizer を使って一元的に管理できる点になります。
まるちあか
ここからは、AWS Orgnizations が作成されていることを前提として進めていきます。

まず、Resource Access Manager のコンソール画面 にアクセスし、左側のナビゲーションバーで「設定」をクリックします。

クリックすると拡大します

次との共有を有効にする: AWS Organizations」にチェックを入れ、設定の保存をクリックします。

クリックすると拡大します

続いて、冒頭で作成した AWS CloudFormation スタックの作成 ~シングルアカウントでデプロイする場合~ と同様の手順で CloudFormation スタックを作成します。

今回はシングルアカウントとマルチアカウントの作成方法の違いを紹介するため、以降の説明ではバージニア北部リージョンでスタックを作成します。

クリックすると拡大します

スタックの名前」に任意の名前 (例:WorkSpacesCostOptimizerMultiAccount) を入力します。

クリックすると拡大します

ページ下部に 「AWS Organizations ID (組織 ID)」と「AWS Organizations の管理アカウントのアカウント ID」を入力する箇所があるので、AWS Organizations のコンソール画面 を別タブで開き、「組織 ID」 と「管理アカウントのアカウント ID」 を取得しておきます。

クリックすると拡大します

CloudFormation スタック作成のタブに戻り、「組織 ID」 と「管理アカウントのアカウント ID」を入力し、「次へ」をクリックします。

以降は スタックのパラメータ設定 の手順と同じで CloudFormation をデプロイします。

クリックすると拡大します

続いて、Organizations のメンバーアカウントでスポークテンプレートスタックをデプロイします。AWS アカウントを Organizations のメンバーアカウントに切り替えた後、こちらのリンク をクリックします (実装ガイド のスポークテンプレートは 2024/4/1 現在、実行できないためドキュメントのリンクを使用します)。

その際、root アカウントと同じリージョンであることを確認しておきます (今回はバージニア北部リージョンを使用)。

クリックすると拡大します

以降は、デプロイ方法・設定方法 と同様の手順でデプロイしていきます。
これでメンバーアカウントでも Cost Optimizer を使えるようになりました。

メンバーアカウントの利用状況も、分析結果の確認 と同様の手順で確認できるようになっています。


リソースの削除方法

Amazon WorkSpaces Cost Optimizer により作成されたリソースは、AWS CloudFormation のマネジメントコンソール画面 から「削除」を選択することで削除できます。

削除する場合には、root アカウント・メンバーアカウントの両方で削除してください。

クリックすると拡大します

また、本ソリューションでは、誤ってデータを損失しないようにするために、CloudFormation スタックを削除してもS3 バケットや CloudWatch Logs は削除されないように設定されています。それらのデータも削除する場合には、以下の手順を実施します。

Amazon S3 のマネジメントコンソール画面 にアクセスし、検索フィールドに、このソリューションのスタック名を入力すると、本ソリューションでデプロイされた S3 バケットが表示されますので、削除します。

クリックすると拡大します

次に、 Amazon CloudWatch のマネジメントコンソール画面 にアクセスし、検索フィールドに、このソリューションのスタック名を入力すると、本ソリューションでデプロイされたロググループが表示されますので、削除します。

クリックすると拡大します


まとめ

今回の記事では「Amazon WorkSpaces Cost Optimizer」ソリューションの概要や使い方を紹介しました。CloudFormation を用いてデプロイするだけで、WorkSpaces の使用状況を分析し、コスト効率の高い実行モードに自動変更できることをご理解いただけたのではないかと思います。

AWS ソリューションは日々アップデートされており、例えば 2023 年 4 月から 2024 年 4 月の間には、4 度のアップデートがされています。アップデートされた際には、アカウントにデプロイしているソリューションもアップデートして、新機能をぜひ試してみてください!

本ソリューションを活用される際には、Amazon WorkSpaces Cost Optimizer の 実装ガイド もご一読頂ければと思います。


builders.flash メールメンバーへ登録することで
AWS のベストプラクティスを毎月無料でお試しいただけます

筆者プロフィール

鈴木 大樹
2023 年 4 月に入社したソリューションアーキテクト。好きなサービスは Amazon Aurora です。趣味は筋トレ、フットサルで、猫が好きです。猫と暮らすためにペット可の物件に引っ越したものの、迎えられず 1 年が経過しました。

監修者プロフィール

山澤 良介
ソリューションアーキテクトとして、業種業態を問わず様々なお客様を支援させて頂いています。
前職では主にネットワーク案件を担当していたため、好きなサービスは、AWS Direct ConnectとAWS Transit Gatewayです。
休日はスノーボードが大好きなので、シーズン中は毎週スキー場に行っているほか、オフシーズン中もオフトレ施設に行っています。

AWS を無料でお試しいただけます

AWS 無料利用枠の詳細はこちら ≫
5 ステップでアカウント作成できます
無料サインアップ ≫
ご不明な点がおありですか?
日本担当チームへ相談する