【簡単】AWS Compute Optimizerでリソース分析

まえがき

はじめまして。TechDivのOGAWAです。
AWSのリソース設定は、スペックが良すぎたり、足りなかったりしてしまったりと、悩ましい問題でもありますね。
そこで、無料で簡単に最適化判断ができるサービス「AWS Compute Optimizer」を今回ご紹介します。

目次は以下の通りです。

AWS Compute Optimizerとは
AWS Compute Optimizerの開始方法
分析結果確認
分析結果の詳細画面(EC2)
複数環境の分析結果を一度に取得できる?
CLIを使って分析結果を取得できる?
リソース変更前の確認
まとめ

AWS Compute Optimizerとは

AWS Compute Optimizerとは、最近のリソースの使用状況を機械学習で分析し、
適切なリソースを提示してくれるサービス
です。
リソースを変更することで減らせるコストや、パフォーマンスの向上なども画面上で一目で分かります。

サポート対象のリソースは、以下の4つとなります。

  {  EC2インスタンス・EC2 AutoScaling・EBSボリューム・Lambda関数  }

基本利用料は無料です。
分析の対象期間は通常過去2週間なのですが、3か月に延長する場合のみ有料となります。
料金は1時間あたり、$0.0003360215/1リソース(1か月でも$0.01ドルに満たないくらい)です。

開始にあたり、もっと詳しい情報を確認してみたい方は以下公式ユーザガイドをご覧ください。
*****************************
・AWS Compute Optimizer
 https://aws.amazon.com/jp/compute-optimizer/

・AWS Compute Optimizer ユーザーガイド
 https://docs.aws.amazon.com/ja_jp/compute-optimizer/latest/ug/what-is-compute-optimizer.html
*****************************

AWS Compute Optimizerの開始方法

それでは、早速AWS Compute Optimizerを開始してみます。ボタン操作4ステップのみで簡単です!

【操作手順

①AWSマネジメントコンソールにサインインします。

②ナビゲーションバーの「サービス」から「AWS Compute Optimizer」を選択します。

③「AWS Compute Optimizer」の説明画面が表示されます。「ご利用開始」を選択します。

④アカウントのオプトイン説明画面が表示されます。「オプトイン」を選択します。

これでAWS Compute Optimizerの開始設定は完了です。

開始後すぐ、過去14日間の Amazon CloudWatchのリソースと使用状況の分析が始まります。

【注意!】
AWS Compute Optimizer開始後、分析結果が表示されるはずが、なかなか表示されず焦りました……
原因を調べたところ、二つありました。

原因① 分析・反映に3日ほどかかる 
推奨情報を受け取るのに最低30時間、分析結果がダッシュボードに反映されるまで
最長12時間かかるため、反映まで合計3日程かかることが分かりました。
実際に、2日程何も反映されない状態が続き焦りましたが、3日目に結果が表示されていました。

参考:https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/ce-rightsizing.html#rr-getting-started

原因② EC2のスポットインスタンスは分析対象外
AWS Compute Optimizer開始から3日経過しても分析結果が上がってこないEC2があったのですが、
AWSサポートに確認したところ、スポットインスタンスは分析対象外とのことでした。

開始から結果確認できるまで少し時間がかかりますので、お気をつけください!

分析結果確認

さて、分析結果が反映されたダッシュボードを確認してみます。

上の青枠がAWS Cost Explorerを使用していると表示される画面、
下の赤枠がAWS Cost Explorerを使用していなくても表示される画面です。※2022年3月時点

AWS Cost Explorerを使用していると、具体的な節約額やパフォーマンスの向上機会
数値化して確認できます。

AWS Cost Explorerの連携なしでも、詳細なAWSリソースの設定と使用状況
各サービスの右上にある「レコメンデーションを表示」ボタンから詳細画面に遷移することで判別できます
※元々利用していないサービスはデータを利用できませんと表示されます

上記環境では画面表示から2インスタンスがプロビジョニング不足であることが分かりますね。

分析結果の詳細画面(EC2)

「レコメンデーションを表示ボタン」から各インスタンスの抽出結果の結果を確認した場合も見てみましょう。

こちらは先ほどと他環境ですが、画面から過剰なプロビジョニングの理由を確認することができます。

右にスクロールしていくと推奨インスタンスタイプや料金なども確認できます。

また結果のリンクを押すと、現在のインスタンスと推奨オプションの比較や、
EC2使用状況のグラフも表示されます。

複数環境の分析結果を一度に取得できる?

このように、リソース状況の確認に便利なAWS Compute Optimizerですが、
管理環境が数十規模になると、一環境づつ確認するのは大変です……
そこで、一度に分析結果を取得できる方法を探してみることにしました。

ところが、CLIやバッチを使用して抽出した結果を一環境に集められないか確認したのですが、
AWSの仕様の関係により、上手く情報を取得することができませんでした。

そこでAWSサポートにも問い合わせしたところ、有料サービスであるAWS Organizations※の導入が必要となり、
導入せずに確認することは難しいとのことでした。

※複数アカウントを一元的に管理し、統制できるようになるサービスです

・AWS Organizations
 https://aws.amazon.com/jp/organizations/

既にAWS Organizationsを導入していますが、所属チーム管理下の環境では複数理由により導入は見送りました。

確認頻度が短い、管理環境が多い方は導入を検討してみるのもありかもしれません。

CLIを使って分析結果を取得できる?

また上記に伴い、CLIを使って分析結果を取得できるかも確認しました。

結果として、以下に掲載されているコマンドで
AWS Compute Optimizerの分析結果が確認できることが分かりました。

*****************************
分析結果を取得しエクスポート(exportコマンド)
 export-auto-scaling-group-recommendations
 export-ebs-volume-recommendations
 export-ec2-instance-recommendations
 export-lambda-function-recommendations
*****************************

*****************************
分析結果を取得(getコマンド)
get-auto-scaling-group-recommendations
get-ebs-volume-recommendations
get-ec2-instance-recommendations
get-lambda-function-recommendations
get-recommendation-summaries(画面参照時に見える金額や参照したリソース数)
*****************************

参考:https://docs.aws.amazon.com/ja_jp/cli/latest/reference/compute-optimizer/index.html#cli-aws-compute-optimize

しかし、実際に使用するには以下のような主な問題がありました。

①コマンドを使用しても一部データしか出力されず、画面に表示される結果を網羅しきれていない

例えば、exportコマンドのCSVファイルですと、以下が確認できませんでした。

・検出結果の理由
・推定月間節約額 (オンデマンド)
・節約の機会 (%)
・価格差
・リージョン
・Auto Scaling グループ名
・オプション

逆にCSVのみで取得できる項目もあり、画面上で取得できる項目と差があることが分かりました。

②現在の費用及び推奨費用をAWS Compute Optimizer コマンドの推奨情報上で表示することはできない

AWSサポートの方によると、CLIでそれぞれの月額費用を確認したい場合
以下の方法が必要となるとのことでした。

*****************************
例:EBSの場合
①マネジメントコンソール上の EBS ボリュームの推奨情報ページの "monthly price" 項目から確認する
②get-ebs-volume-recommendations コマンド結果の"savingsOpportunityPercentage"
および"estimatedMonthlySavings"から算出する
== 計算方法例 ==
"savingsOpportunityPercentage (削減可能パーセンテージ)" : 50 ,
"estimatedMonthlySavings (削減可能金額)" : 2 USD のとき
現在のボリューム費用 = 2 * 100 / 50 = 4 USD
推奨のボリュームの費用 = 4 - 2 = 2 USD
*****************************

getコマンドもexportコマンドも、それぞれ抽出後に実際にかかる費用、
推奨費用との差額費用の再計算が必要でした。

上記の理由から所属チーム管理下の環境では、情報を確認するには画面を見た方が早いという結論に至りました。

画面上の情報を全て取得したい場合には、コマンド利用はおすすめできません。

リソース変更前に確認

AWS Compute Optimizerで推奨リソースの表示どおりに現状のリソースを変更すれば、
適切なリソースに変更できるはずです。

ですが、各環境の使用状況により、推奨リソースが常に100%正しいわけではありません

例えばEC2でしたら、定期的に一瞬CPUが上がるだけでも
それが原因で上のインスタンスを勧められていることもあります。

そこで、最近のリソース状況を確認するため、可能であれば
AWS CloudWatchのサービスを使用することをおすすめします。

・AWS CloudWatch

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html

AWS Compute Optimizerの画面でリソース過剰・不足の状況を
CloudWatchのメトリクス画面から、グラフで確認することができるので
リソースを本当に上げた方がいいか最終確認することができます。

まとめ

*AWS Compute Optimizerを使用することで、最近のリソースの分析結果から対象リソースが適切か判別できます

*AWS Compute Optimizerの使用開始はクリックのみで簡単にできます。

*複数アカウントの分析結果を一度に取得するには、基本的にAWS Organizationsの導入が必要です。

*CLIからも分析結果は取得できますが、取得できる情報に限りがあります

*AWS Compute Optimizerの分析結果はあくまで参考です。
  リソースの変更を行う場合は、AWS CloudWatchを使い、直近の使用状況を確認後に行うのがおすすめです。

作業を通しての感想

普段の作業ではIAMのみしか触っておらず、
まず「AWS Compute Optimizerとは何か」から調べる所からの調査でした。
AWS CloudWatchをここまで触るのも始めてで、想定以上の時間がかかってしまいました。
調査にご協力頂いた方々には本当に感謝しております。

今回、改めて自分で検証し確認する姿勢を作業を通して学習できたので、
今後の作業でも学んだことを生かしていこうと思います。