AWS検証環境のコスト見直し(前編)

    AWS検証環境のコスト見直し(前編)

    サムネ出典URL:https://burst.shopify.com/photos/money-pile?c=money

    今回は我々が検証用に利用しているAWSのコストが高騰してしまった際に、コスト削減のために取った検討事項や対策について前編ではコスト利用状況の把握、後編ではコスト削減対策について紹介させていただきます。


    目次

      経緯

      私が所属するクラウドインテグレーション部では、学習やお客様提案時に必要な検証などをメンバーが自由に行うことができるAWSの検証環境を保有していますが、運用費用が高額になることがありました。

      過去に1度月額100万円近くのコストが発生したことがあるのですが(普段は20万円前後)、当時は定期的に不要なリソースの棚卸をすることで、しばらくは一定の金額に落ち着いていました。

      しかしながら、その後も突発的にコストが高騰することが何度かあり、対策に本腰を入れることになりました。

      以下は2月中旬にAWSコンソールのホーム画面に表示されたコストと利用状況です。

       

      2022071201

       

      また、昨今の急速な円安の影響もあり、昨年と同等の利用状況でも円換算にするとコストが増加している状況で、かつ新しいメンバーを迎える時期でもありましたので、この機会に以下のコスト削減策を部内で検討しました。

      • コスト高騰の検知
      • 利用状況の把握
      • インスタンス利用料の削減
      • ネットワーク構成の見直し
      • アカウントのリセット
      • アカウントの分割
      • 利用リージョンの検討

      前編では「コスト高騰の検知」「利用状況の把握」について紹介させていただきます。

      コスト高騰の検知

      コストが高騰しても検知する仕組みがなく、気づけばコストが跳ね上がっていることがあったため、以下の機能を有効にしました。

       

      Cost Anomaly Detection 支出を継続的にモニタリングし、機械学習を使用して異常を検知し、アラートを発報します。
      Budgets アラーム 月の予算額を設定し、閾値を超えたらアラートを発報します。

      閾値を超えた場合にはChatbot経由でSlackに通知を行うように設定しています。

       

      2022071202

      設定の手順等については以下のブログなどを参照してください。

      参考:How-to Guide: Slack integrations for Cost Anomaly Detection using AWS Chatbot
      https://aws.amazon.com/jp/aws-cost-management/resources/slack-integrations-for-aws-cost-anomaly-detection-using-aws-chatbot/?nc1=h_ls

      参考:Amazon Chime および Slack で予算アラートを受け取る
      https://docs.aws.amazon.com/ja_jp/cost-management/latest/userguide/sns-alert-chime.html

      実際にSlackに以下のような通知が来るため非常に分かりやすく、素早くコストの高騰を検知することができます。

       

      【Cost Anormalry DetectionのSlack通知】

      2022071203

       

      【Budgets アラームのSlack通知】


      2022071204

      上記とは別にアカウントの請求設定で「請求アラームを受け取る」というオプションを有効にすると、CloudWatch経由で請求アラームを設定することもできます。
      ただしアラームごとに課金が発生するため、ほぼ同様のことが無料でできるBudgets のアラートのみを設定すれば問題ないかと思います。

      利用状況の把握

      AWSのコストが跳ね上がるときは、一部の高額サービス・リソースの削除・停止漏れが原因であったことが多々ありました。また「誰がいくら利用しているのか」はデフォルトの設定では分からないので、別途設定を行う必要がありました。


      AWS 請求コンソール(Billing)を使った高額リソースの特定

      サービスごとの詳細な利用状況はCost Explorerでも確認できますが、詳細な内訳はBillingの請求書から確認することができます。そこで異常に費用が高騰しているサービスにあたりを付けて棚卸しを行いました。
      どのリソースが対象かは実際にコンソール画面を見ないと分からないのが手間ですが、削除漏れの高額リソースから優先的に対処する方法としては一番効果的でした。

      例えばRDSのBillingを確認するとTokyoリージョンにあるr6gとr5インスタンスタイプのAurora MySQLのコストが合計500ドルを超えていることが分かります。



      【RDSのBilling】

      2022071205

       

      コスト配分タグの設定

      デフォルトの設定ではサービスごとの利用料しか確認することができず、「誰がいくら利用しているか」を把握するために「コスト配分タグ」の設定を行いました。

      コスト配分タグの詳細については以下のブログを参照してください。

      参考:コスト配分タグを用いた効率的なコスト管理 | Amazon Web Services ブログ
      https://aws.amazon.com/jp/blogs/news/cost-allocation-tag/

      以下のタグを各リソースに付与しておくことで、ユーザ毎/プロジェクト毎の利用状況をCost Explorerから確認することができます。

       

      タグ
      User 作成者のメールアドレス
      PJ プロジェクト名

       

      【コスト配分タグ設定後のCost Explorer】

      2022071206

      AWS Organizationsを利用している環境ではメンバーアカウントでコスト配分タグを設定できないため、マスターアカウントからアクティブ化する必要があります。

      1. AWS 請求コンソール (https://console.aws.amazon.com/billing/) を開きます。
      2. ナビゲーションペインで、[Cost Allocation Tags] (コスト配分タグ) を選択します。
      3. アクティブ化するタグを選択します。
      4. [Activate] を選択します。(有効になるまで最大24時間かかります)

      参考:ユーザー定義のコスト配分タグのアクティブ化 - AWS 請求
      https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/activating-tags.html

      タグを付ける習慣が定着していないため、コスト配分タグについては現時点ではあまり効果が出ていない状況です。

      まとめ

      今回はコストの把握方法として、「コスト高騰の検知」「利用状況の把握」を紹介させていただきました。

      後編では把握したコストに対する削減対策を紹介させていただきます。