仮想デスクトップのコストを最適化 !
Amazon WorkSpaces Cost Optimizer を試してみる
山澤 良介, 佐藤 裕介
皆さん、こんにちは!テクニカルソリューションアーキテクトの山澤良介です。
AWS ソリューションの紹介シリーズも大分記事が増えてきましたね。
(これまでの記事は こちら の記事カテゴリーで「AWS ソリューション紹介」に絞ってご覧ください。) 今回も引き続き、活用しやすい AWS ソリューションを紹介しようと思います ! 本記事は、山澤とソリューションアーキテクトの佐藤の共同執筆となります。
さて、昨今、多くの企業や組織でリモートワーク (テレワーク) が急速に広まっておりますが、みなさまの中には、リモートワークを実現するために、Amazon WorkSpaces を利用されている方もいらっしゃるのではないでしょうか ? Amazon WorkSpaces は、フルマネージド型仮想デスクトップサービスであり、月額料金 (AlwaysOn) または時間料金 (AutoStop) の課金モードが提供されているため、利用状況に応じて、最適な課金モードを選択すること可能です。
利用時間によってどちらの課金モードがコスト効率が高いかは、使用するバンドルによって異なりますが、おおよその目安として、月に 80 時間以上 WorkSpaces を起動する場合には、月額料金 (AlwaysOn) の方が安くなる傾向があります。しかしその一方で、「全ユーザー分の利用状況を確認し、最適な課金モードを選択するのは難しい」という声を管理者の方からよく伺います。
そのような方のために今回、 WorkSpaces の使用状況をモニタリングし、コストを最適化するのにも役立つソリューションを紹介していこうと思います。
それでは、「Amazon WorkSpaces Cost Optimizer」がどんなソリューションなのか見ていきましょう !
ご注意
本記事で紹介する AWS サービスを起動する際には、料金がかかります。builders.flash メールメンバー特典の、クラウドレシピ向けクレジットコードプレゼントの入手をお勧めします。
この記事のデモを無料でお試しいただけます »
毎月提供されるデベロッパー向けアップデート情報とともに、クレジットコードを受け取ることができます。
Amazon WorkSpaces Cost Optimizer とは
「Amazon WorkSpaces Cost Optimizer」は、個々の WorkSpaces の使用状況を分析し、最もコスト効率の高い課金モード (時間課金または月額課金) に自動変更するソリューションです。
クリックすると再生します (英語)
本ソリューションをデプロイすると、 WorkSpaces の利用時間をモニタリングし、デプロイ時に指定したしきい値と比較することで、以下のような課金モードの変更を自動で行います。
利用時間のモニタリング | 課金モード変更時の料金 | |
時間課金から月額課金 | 日に一度 WorkSpaces の利用時間を集計し、その月の WorkSpaces の利用時間の累計がしきい値を超えた時点で月額課金に変更します。 |
変更が実施されると、その月は、「当月分として既に発生している時間料金 (基本月額料金を含む)」と「月の残りの日数分で日割りにした月額料金」 の合計が課金されます。 |
月額課金から時間課金 | 月末時点で WorkSpaces 利用の累計時間がしきい値を下回った場合は、時間課金に変更します。 |
変更が実施されると、翌月から時間課金となります。 |
また、 WorkSpaces の使用状況はモニタリングしたいが、課金モードの自動変更は行ないたくない場合には、「ドライランモード」でデプロイし、その結果をもとに手動で変更を実施することも可能です。これにより、事前に本ソリューションが推奨する変更内容を評価および分析することができます。
使用している AWS サービスは ?
AWS ソリューションは CloudFormation テンプレートが提供されています。本ソリューションをデフォルトのパラメーターで実行すると、以下のアーキテクチャーがデプロイされます。
- Amazon CloudWatch Events rule がデプロイされ、 24 時間ごとに AWS Lambda 関数を呼びします。
- Lambda 関数は、 Amazon Elastic Container Service (Amazon ECS) タスクを実行します。ECS タスクは、AWS Directory Service と WorkSpaces のリストを収集します。
- 次に、各 WorkSpaces の合計使用量を確認し、その結果に応じて、課金モードの変更を行います。
- 実行ログ、分析結果を CloudWatch Logs と Amazon S3 に出力します。
コスト試算の例
AWS CloudFormation でデプロイすると、規模感がわからず、利用料が不安・・・という方も多いと思います。そこで、コスト試算をご紹介します!このソリューションを実行するために発生する AWS サービスのコストは、このソリューションが監視する WorkSpaces の数によって異なります。
例えば、 25 個の WorkSpaces を対象に、バージニア北部リージョンにてデフォルト設定で本ソリューションをデプロイした場合、1 日あたり発生するコストは、約 0.005 ドル ( 月額約 0.15 ドル) です。
コスト試算の詳細やその他の試算例については、実装ガイド のコストページに記載がございますのでご参照ください。
※ これには、 AWS Lambda 、 Amazon CloudWatch 、および AWS Fargate、Amazon S3 の料金を含まれておりますが、個々の WorkSpaces のコストは含まれておりません。
※ 2021 年 9 月時点での試算です。
デプロイ方法 / 設定方法
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 パフォーマンスバンドル(ルートボリューム: 80GB, ユーザーボリューム : 10GB )の場合
・月額料金: 59.00 USD
・時間料金: 10.00 USD/月 + 0.61 USD/時間
しきい値: (59.00 - 10.00) ÷ 0.61 ≒ 80.32 時間
→ PerformanceLimit のセルに 80 と入力
クリックすると拡大します
[参考] 今回特に設定は変更しませんが、以下の機能も提供されています。
- 対象とする WorkSpaces のリージョンを制限する機能 (空欄の場合、全リージョンを対象)
- 1ヶ月間使用されなかったWorkSpacesを削除する機能(ドライランモードで分析結果のみ確認することも可能)
※その他各パラメータの詳細については、 実装ガイド をご参照ください。
クリックすると拡大します
レビューを下へスクロールし、「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) に自動変更されていることが確認できます。
クリックすると拡大します
リソースの削除方法
Amazon WorkSpaces Cost Optimizer により作成されたリソースは、Amazon CloudFormation のマネジメントコンソール画面 から「削除」を選択することで削除できます。
クリックすると拡大します
また、本ソリューションでは、誤ってデータを損失しないようにするために、CloudFormation スタックを削除しても、S3 バケットは削除されないように設定されています。データも削除する場合には、以下の手順で S3 バケットも削除します。
Amazon S3 のマネジメントコンソール画面 にアクセスし、検索フィールドに、このソリューションのスタック名を入力すると、本ソリューションでデプロイされた S3 バケットが表示されますので、削除します。
クリックすると拡大します
次に、 Amazon CloudWatch のマネジメントコンソール画面 にアクセスし、検索フィールドに、このソリューションのスタック名を入力すると、本ソリューションでデプロイされたロググループが表示されますので、削除します。
クリックすると拡大します
まとめ
今回の記事では「Amazon WorkSpaces Cost Optimizer」ソリューションの概要や使い方を紹介しました。 CloudFormation を用いてデプロイするだけで、WorkSpaces の使用状況を分析し、コスト効率の高い課金モードに自動変更できることをご理解いただけたのではないかと思います。
AWS ソリューション実装は日々アップデートされており、例えば、参考にご紹介した「1 ヶ月間未使用の WorkSpaces を自動削除する機能」は、 2021 年 9 月に追加された機能となりますので、興味のある方は是非そちらも試してみてください !
本ソリューションを活用される際には、Amazon WorkSpaces Cost Optimizer の 実装ガイド もご一読頂ければと思います。
今後もAWSソリューション紹介の記事を書いていきたいと思いますので、是非また読んでもらえたら嬉しいです。
それではまた次の記事でお会いしましょう !
筆者プロフィール
山澤 良介
アマゾン ウェブ サービス ジャパン合同会社
テクニカルソリューションアーキテクト
テクニカルソリューションアーキテクトとして、業種業態を問わず様々なお客様を支援させて頂いています。
前職では主にネットワーク案件を担当していたため、好きなサービスは、AWS Direct Connect と AWS Transit Gateway です。
休日はスノーボードが大好きなので、シーズン中は毎週スキー場に行っているほか、オフシーズン中もオフトレ施設に行っています。
佐藤 裕介
アマゾン ウェブ サービス ジャパン合同会社
ソリューションアーキテクト
ソリューションアーキテクトとして、製造業分野のお客様を中心に様々なお客様を支援させて頂いています。AWSと出会いクラウドの楽しさを知り、お客様にもクラウドの楽しさを知ってほしいと思い日々働いています。
好きなサービスは、AWS Lambda と Amazon Connect で、難しいことを考えずにシュッと使えるサービスが好きです。
プライベートでは3歳の双子男児の父で日々育児に翻弄されています。
AWS を無料でお試しいただけます