SRE部 佐竹です。
AWS Cost Anomaly Detection が generally available したため、ここ数カ月の運用実績と共にご紹介します。
- はじめに
- Cost Anomaly Detection (コスト異常検出) とは
- Cost Anomaly Detection を設定する
- 2~3ヶ月間運用してみた結果
- AWS Budgets との兼ね合い
- まとめ
はじめに
以下のリリースの通り、Cost Anomaly Detection が GA しました。
Cost Anomaly Detection (コスト異常検出) は、2020年9月25日にプレビューとしてリリースされました。
サーバーワークスでは、プレビューが発表された翌日の2020年9月26日より検証目的と実益を兼ね、社内検証アカウントでコストの異常検出を実際に利用してきています。
本機能のご紹介と共にここ2~3ヶ月間に実際に検出された結果も合わせてご紹介します。
Cost Anomaly Detection (コスト異常検出) とは
コスト異常検出は「利用料金及びAWSリソースの使用状況」を継続的に監視・機械学習し、異常な支出を検出することが可能となる AWS Cost Management のファンクションの1つです。
例えば、毎日 $1 しか利用されていない AWS のあるサービスが突然 $100 に膨れ上がるような場合に、異常検出が発砲され SNS による通知が送信されます。ようは、AWS 利用料が突然大きく増加したらアラートが来るという機能です。
また、異常検出は「機械学習」を用いているため「利用パターン」を学習します。これにより「誤検出」を最小限に抑えることに成功しています。例えば月初に必ず増大するコストや、年単位であれば季節的な増減を学習します。
異常検出が有効なのは、その即時性です。多くの場合、コストの異常(意図しない増大)に気付くのは、おおよそ AWS 利用料の請求が来るタイミングです。つまり、2020年11月の異常に気付くのは12月になってしまいます。これではあまりにも気付くタイミングが遅すぎるわけです。
加えて、コストの増大を気にしすぎるあまり毎日 Cost Explorer を見に行くのは手間です。それに AWS 利用料が大きくなっていく過程で、普段使っていないサービスが突然利用されはじめても「小さい額」だと気づけないでしょう。
しかし「異常検出機能」があれば、これらの異常が AWS のコストとして反映されたタイミングですぐにアラートがあがるため、スピーディに対応が開始可能です。
補足:Amazon CloudWatch Anomaly Detection
という機能もあります。これも似た機能で、機械学習による異常を検出するものです。この検出機能が AWS 利用料でも活用されるようになったと考えて頂いても良いかと存じます。
Cost Anomaly Detection を設定する
AWS マネジメントコンソールから設定します。今回この設定を行っているのは Organizations の Payer アカウントであり Root です。そのため、Organizations 内の全 AWS アカウントに対して一斉に異常検出を仕掛けるということになります。
AWS Cost Management > Cost Anomaly Detection から設定に進みます。Cost monitors
から「Create monitor」を押下して設定を追加します。
本アカウントでは、既に AWS Services - Recommended
の設定がされているためグレーアウトして選択できませんが、これを選択して設定するだけです。
次に Alert subscription を紐づけます。これは SNS や Email との紐付けなのですが、閾値となるコストが何ドルなのかを合わせて設定します。レポートのタイミングは以下から選択します。
- 個々のアラート - 異常が検出されるとすぐに通知されます。1 日に複数のアラートを受信する場合があります。これらの通知には Amazon SNSトピックが必要です。
- 日単位のサマリー - 異常が検出されると、アラートは日単位の概要を通知します。その日に発生した複数の異常に関する情報を含む E メールを1通受信します。通知には、少なくとも 1 つの E メールアドレスが必要です。
- 週単位のサマリー - 異常が検出されると、アラートは週単位の概要を通知します。その週に発生した複数の異常に関する情報を含む E メールを1通受信します。通知には、少なくとも 1 つの E メールアドレスが必要です。
今回は「Individual alerts」を設定しているため、SNS との紐付けを持っています。
閾値は先に設定した通り $100.00 になっています。日本円にして1万円を超えるサービスの利用料が発生したらそれは異常だと認識して通知が欲しいということです。
2~3ヶ月間運用してみた結果
結論からお伝えすると、かなり有用なのではと感じます。正直なところ、コストにシビアな全てのお客様で設定を推奨したいとすら感じます。
実際に SNS に来た通知をご紹介します。まず SNS より通知されるメールの件名は以下の通りでした。
AWS Cost Management: Cost anomaly detected on 2020-11-05T16:47:28.991Z
中身は以下の json です。
{ "accountId": "PayerAccountID", "anomalyStartDate": "2020-11-02T00:00:00Z", "anomalyEndDate": "2020-11-04T00:00:00Z", "anomalyId": "ef42c24c-16a1-4343-af7e-a77a12a86379", "dimensionalValue": "Amazon DynamoDB", "monitorArn": "arn:aws:ce::PayerAccountID:anomalymonitor/6a48afbb-1498-4224-9f3e-b7449fb2ca94", "anomalyScore": { "maxScore": 0.68, "currentScore": 0.41 }, "impact": { "maxImpact": 464.91, "totalImpact": 872.47 }, "rootCauses": [ { "service": "Amazon DynamoDB", "region": "ap-southeast-1", "linkedAccount": "123456123456", "usageType": "APS1-WriteCapacityUnit-Hrs" } ], "anomalyDetailsLink": "https://console.aws.amazon.com/cost-management/home#/anomaly-detection/monitors/6a48afbb-1498-4224-9f3e-b7449fb2ca94/anomalies/ef42c24c-16a1-4343-af7e-a77a12a86379" }
掲載されている URL リンクを押下することで、コンソールにジャンプできます。
json に記載がある通りなのですが、以下のアカウントとサービスで、異常が検出されています。
項目 | 値 |
---|---|
Service | Amazon DynamoDB |
Linked account | 123456123456(IDは一例です) |
Region | ap-southeast-1 |
Usage type | APS1-WriteCapacityUnit-Hrs |
この検出結果を用いて社内 Slack にて利用者に状況を確認したところ、これは検証において高コストになってしまったものだということがわかりました(確認した時点で対処が完了していた)。
また「View in Cost Explorer」を押下することで Cost Explorer にて利用料をグラフとして表示可能です。
Cost Explorer でみても明らかなように、突然の利用料増加が発生しています。これぞ異常検出といったようなグラフです。
このように、実際に本機能は役に立っており「突然の大きな利用料の増加」を異常として検出してくれています。
Detection history
Detection history で、90日間の異常検出結果を一覧で確認できます。
画像は Total cost impact
が高い順に並び替えています。先ほどの DynamoDB のものが最も高額であり、その下に $100 を超える異常がいくつか検出されていることがわかります。
反対に金額が低い異常検出も確認してみると、かなり少額の異常も検出されていることがわかります。上画像は数ドル程度の利用料の異常検出なのですが、それぞれのサービス名を見ると「普段使っていない新しいサービスなどを検証しているのだろう」とわかるサービス名が並んでいます。
このように小さい異常も検出されるため、額が非常に小さいものについては基本的には不問とすべきでしょう。
なお、今回は通知の閾値設定を $100.00
としてみましたが、値をいくつにするのかというのはお客様・利用者様ごとに適切な値が異なります。閾値は使いながら微調整してみてください。
注意点
Billing 系機能への AWS 利用料の反映は通常「2日間から3日間程度遅延する仕様」が判明しています。これは Cost Explorer, Budgets 含め全ての Billing に関する機能の仕様です。
そのため、この異常検出機能も最大2日かから3日の遅延が発生してしまうことは避けられません。リアルタイムではないのが少々残念ではあるのですが、この遅延をご理解の上ご利用ください。
AWS Budgets との兼ね合い
AWS Budgets は AWS アカウント等の単位で予算を設定し、年月日別等でいくらまでコストが増加したらアラートをあげるという機能です。
例えば、とあるアカウントでは「月額10万円」で予算を取っているとします。そのような場合、Budgets を利用いて、その月のAWS利用料が8万円を超えたら一次アラート、9万円を超えたら二次アラート、10万円で三次アラートとするようなことが可能です。
AWS Budgets は本機能同様にコストを通知する機能ではありますが「予算管理」の側面が強く、異常を検出してくれるものではありません。コスト異常検出の機能は、突発的なコスト増という異常事態にフォーカスした機能です。
そのため、AWS Budgets は AWS Budgets で設定を行い、加えてコスト異常検出も設定されるのがより良い運用と考えます。
AWS Budgets については以下のブログも合わせてご覧ください。
まとめ
今回のブログでは AWS Cost Anomaly Detection が GA したことをご紹介するとともに、サーバーワークス社内検証アカウントで実際に運用してきた結果をお伝えしました。
結果としては、非常に優秀な機能であり、コストにシビアなお客様には特にお勧めしたいと感じます。また複数の AWS アカウントを運用されているユーザ様にも推奨したく存じます。
実際 AWS アカウントが100を超えてくると、どのアカウントが何をしているのか把握するのは困難です。弊社の社内検証アカウントも 300 アカウント程度は存在するため、SCP によるガバナンスなどはされているものの、基本的に各 AWS サービスの利用は自由にできます。
このような状況下での「突然の利用料の増加」はそれが発生したらすぐにでも把握したいものです。世の中には「クラウド破産」なんて言葉もありますが、この異常検出の機能はそれを食い止めてくれる1つの機能でしょう。
「AWS 利用料が突然大きく増加したらアラートが欲しかったんだ!」とお困りであった AWS 管理者様はすぐにでも設定してみてください!
2022年3月17日追記
通知先として AWS Chatbot に対応しました!Slack への連携は Chatbot のほうが可読性が高くお勧めです。合わせてご覧ください。
では、またお会いしましょう。
佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ
マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。