AWS Compute Optimizer で EC2 Instance を最適化する

記事タイトルとURLをコピーする

SRE2課 佐竹です。
コスト削減関連で、AWS Compute Optimizer をご紹介します。

はじめに

Compute Optimizer は2020年2月4日から東京リージョンで利用可能になりました。

AWS Compute Optimizer がさらに 11 のリージョンで利用可能に
https://aws.amazon.com/jp/about-aws/whats-new/2020/02/aws-compute-optimizer-available-in-11-additional-regions/

今回はこの Compute Optimizer について「有効化する方法」と「結果を確認する方法」をご紹介します。

Compute Optimizer とは何か?

Compute Optimizer は、EC2 Instance  (Auto Scaling Group 下の EC2 Instance 含む) においてその Instance が CloudWatch メトリクスの使用率的に「適切かどうか」を推奨事項として表示してくれるサービスになります。なお以前ブログに記載しました「Resource Optimization Recommendations」とは異なり、「CloudWatch Agent 等を利用してメモリの監視データを収集する」ことで、メモリを含めた推奨事項にもできます。
Resource Optimization Recommendations は現在 Cost Explorer の Recommendations に存在するように利用料側からの分析です。Compute Optimizer はCloudWatchと機械学習によって成り立っており、独立した機能として提供されていますが、EC2 とは連携しています。分析期間が14日間なのは両者とも同様です。

結果の分類

現在表示される推奨項目は「AWS Compute Optimizer の結果の分類」にも記載ありますが、以下の通りです。

  1. EC2 Instance
    1. Under-provisioned: プロビジョニング不足
    2. Optimized: 最適化
    3. Over-provisioned: 過剰プロビジョニング
  2. Auto Scaling Group
    1. Not optimized: 最適化されていない
    2. Optimized: 最適化

Compute Optimizer を Opt-in する

前準備として、「Compute Optimizer の利用を開始する」必要があります。ただし本機能はAWS Organizationsに統合されているため、スタンドアロンのAWSアカウントを除いて「Organizationsの全機能が有効化されている」必要があります。参考までに、以下はOrganizationsで全ての機能を有効化するときに表示されるポップアップ画面になります。

Organizations において all features が Enable かどうかは、Organizations の画面右上にある「Settings」から以下の「Feature set」の項目をご確認ください。

画像の通り、 Your organization has all features enabled. となっていれば問題ありません。
比較として記載しますが、「Resource Optimization Recommendations」はOrganizationsとは統合されていないため、単体で機能します。

Opt-in を実行する場合、AWS Compute Optimizer のコンソールトップ画面右上の「Get started」を押下したのち、

遷移した次の画面右下の「Opt in」を押下すれば完了です。マスターアカウントの場合は上画像のように「組織内のすべてのアカウント」か「マスターアカウントのみ」かを選択可能ですが、マスターアカウントに EC2 Instance が存在しているアカウントは稀と思われますので、基本的には「All accounts within this organization」を選んで頂くことになると思われます。

また、Opt-in 実行後12時間は最低待つ必要があります。以下ご参考ください。

ダッシュボードページの結果と推奨事項は、毎日更新されます。これらは、過去 14 日間のリソースの仕様と使用率メトリクスを分析することによって生成されます。最初にオプトインすると、結果と推奨事項が生成されるまでに最大 12 時間かかることがあることに注意してください。また、リソースの実行が 30 時間未満の場合、推奨事項は生成されません。

https://docs.aws.amazon.com/ja_jp/compute-optimizer/latest/ug/viewing-dashboard.html

また以下のエラーが出た場合、IAM の権限不足の場合が多いため、権限を見直してください。

Opt in failed
Something went wrong. Please make sure you have appropriate compute-optimizer IAM permissions and try again. If this error persists, please contact AWS Support or email aws-compute-optimizer-feedback@amazon.com.

CLIで Opt-in しなおす方法

マスターアカウントで「Only this account」を間違えて押下した場合どうすればいいでしょうか?対応として、子アカウント全てのCompute Optimizer のコンソールから「Opt-inを押下して回る」のは大変です。そのような時はCLIで対応することが可能です。

$ aws compute-optimizer update-enrollment-status --status='Active' --include-member-accounts

このように「update-enrollment-status」コマンドが利用可能となっています。調べてみたのですが、マネジメントコンソールから一度 Opt-out (オフに)して、再度 Opt-in する機能は提供されていないようでした。

Compute Optimizer をマネジメントコンソールで確認

1つ目の確認方法はCompute OptimizerのHomeから確認する方法です。これは鳥瞰的な視点での見え方になります。Compute Optimizer が Opt-in され時間が経過すると Home 画面に以下のように表示されます。

EC2 Instance 側をみると、半分程度が過剰プロビジョニング状態であることがわかります。これを掘り下げてみましょう。

「View recommendations for EC2 instances」を押下して、リストを表示してみます。もしくは Instance の数の部分がリンクになっているのでそちらを押下ください。

リストを見ると、「Over-provisioned」では現在のInstance Typeに対して「Recommended instance type」が1つ表示されています。ラジオボタンでInstanceを選択し「View details」で詳細を確認します。

詳細を見ると、このInstanceではOptionが3つ出ていました。このRecommendationの面白いところは「m4」に対して同スペックの「m5」が推奨されているところです。これは「新世代のインスタンスタイプを推奨することがあります」とドキュメントにある通りの推奨ですが、これによりPriceが少し下がっている(- $0.0100 per hour)のがわかります。またこの画像では「メモリが取得できていない」ため、メモリによる推奨がない点注意してください。そのため、Optionも「メモリは下げない」提案で揃っています。もしメモリについて問題がなければ、掲載がない「m5.large」も選択肢に入ってくるでしょう。

EC2 のマネジメントコンソールから追いかける

もう1つの確認方法として Compute Optimizer を EC2 Instance の1台単位から追いかけることも可能です。具体的には以下の通りマネジメントコンソールから EC2 Instance の Description タブを確認してください。

「Finding」項目が新たに増えており、「View detail」から Compute Optimizer にジャンプできます。このリンクを押下することで、「View details」のページにジャンプできます。各 EC2 Instance の管理者は、ここをみるだけで自分の EC2 Instance が適切なスペックで運用されているのかすぐに判断可能で、最適化されていない場合にのみ詳細を見に行くという使い方が想定されます。

補足ですが、 Compute Optimizer 側から EC2 Instance のスペック変更などを実行する機能は提供されておりません。実際に Instance Type 変更を行うには各 EC2 Instance において「停止(Stop)⇒Type変更⇒再開(Start)」が必要になります。詳しくは「インスタンスタイプを変更する」をご参考ください。

残念なところ

  1. ダッシュボードの一覧がCSVなどでダウンロードできない(取り出せない) ⇒ 2020年6月10日に可能になりました
    1. S3にしか出力できないため、「こちら」を参考に Bucket Policy を設定してから出力ください
  2. ダッシュボードの Filter が現在 Region のみで Instance id でさえ検索できない
  3. ダッシュボードがAWSアカウントごとにしか閲覧できず、アカウント串刺しのリストが取れない
  4. RDS DB.Instance には対応していない

このあたりは今後強化されることを期待しています!
[2] はFilterがあまり機能しないため現状は EC2 Instance の Finding からジャンプするのが効果的に作用します。

まとめ

Compute Optimizer について今回記載しました。要点は以下の通りです。

  • Compute Optimizer は Organizations に統合されているため、Organizationsの機能が有効化されていないと利用できない
  • 分析が完了すると、EC2 Instance は「Under-provisioned, Optimized, Over-provisioned」の何れかにマッチする
  • Over-provisioned となっている EC2 Instance においては Instance Type を下げる検討余地がある
  • メモリを推奨値に含めたい場合は CloudWatch Agent 等を利用しメモリのメトリクスを収集する必要がある
  • Instance Type で旧世代を利用している場合、最新の世代が推奨される
  • AWSアカウントを串刺しにして結果を閲覧することができない
  • EC2 Instance 個別の Description ⇒ Finding 項目にも同様の分析結果が表示される

東京リージョンでも利用可能になりましたので、気になる方はOpt-inして状況を確認してみてください。特にEC2 Instanceが数百台から数千台あるようなお客様では1台1台状況を見るのは難しい状況と思われますため、本機能の利用を検討されてはいかがでしょうか。
なお、メモリの値も含めた推奨事項にされたい場合は以下の記事も合わせてご参考ください。

blog.serverworks.co.jp

それではまたお会いしましょう。

佐竹 陽一 (Yoichi Satake) 記事一覧はコチラ

SRE2課所属。AWS資格12冠。2010年1月からAWSを利用してきました。
AWSのコスト削減、最適化を得意としています。