見出し画像

AWSのコストを20%削減した話

今年の夏にAWSのコスト削減に取り組みましたので、
どのようなアプローチを行ったかを書きます。


何に費用がかかっている?

AWS Cost Explorer を使用してどのサービスの何に費用が膨らんでいるのか調査します。
まずは右のタブのレポートパラメータの粒度を「日別」、ディメンションを「サービス」に設定してサービスごとの日別コストを確認します。

これでどのサービスの費用が膨らんでいるか可視化出来ました。

次に該当サービスの課金状況の詳細を見ていきます。
レポートパラメータのフィルターのサービスから該当サービスを選択。
ディメンションを使用タイプに変更します。

そうするとサービスの課金状態の詳細が確認出来ます。この課金状態から削減案を検討していきました。

実際の削減案

費用が膨らんでいたEC2, DynamoDB, Elasticacheに対しては下記削減案を検討・実施しました。
効果的であった対応をいくつか紹介します。

EC2

基本的にはステージング環境の整理を行いました。

  • ステージング環境起動制限

ステージング環境に使用している複数台のサーバーが24時間稼働状態だったので平日の業務時間に合わせて自動で起動・停止するようにしました。
停止方法についてはこちらの記事でも紹介していますが
Auto ScalingとEventBridgeで実現しました。

  • 不要なインスタンスの停止

使用していないインスタンスがいくつかあったので停止。
また、年に数回しか検証で使用していないインスタンスに関しては検証時だけ起動するようにチームに説明し停止しました。

  • インスタンスの性能ダウン

ステージング環境で本番相当のインスタンスタイプのものはインスタンスタイプの性能を下げる対応を行いました。

  • リザーブドインスタンスの購入

AWSにはリザーブドインスタンスというサーバーの一括購入をすることでサーバー費用を36~40%削減できる仕組みありますのでそれを活用しました。
従来も使用していましたが、ここ数年購入台数が見直されていなかったので購入台数を洗い出し購入しました。
購入数の検討では係数によって適用先のインスタンスが変わるので注意です。

AWS Cost ExplorerにてEC2を確認した際にBoxUsage、HeavyUsageと表示されますが、

BoxUsage・・・オンデマンド
HeavyUsage・・・リザーブドインスタンス

なのでBoxUsageのコストが膨らんでいる場合はリザーブドインスタンス購入の購入を検討出来るかと思います。

DynamoDB

  • 作り替えの停止

  • バックアップに停止

こちらはAWS Cost Explorerで調査したところ、

「TimedBackupStorage」「RestoreDatasize」
これで毎日60$弱かかっていることが発覚しました。
全く覚えが無かったのですが、調査したところ毎日ステージング環境用DynamoDBを本番から復元・バックアップを取るバッチが流れていることが原因でした。
ステージング用のDynamoが毎日最新である必要性はないと考えたため、復元は週1回のみ実行するようにバッチのスケジュールを調整し、検証等で当日最新にする必要がある場合は手動でバッチを実行する運用に変えました。

Elasticache

  • リザーブドノードの購入

  • 性能ダウン

こちらに関してもEC2と同様の対応が多いですが、
ステージング用のmemcachedの性能ダウン、
またこちらに関してはリザーブドノードの更新も数年前から行われていなかったため購入数を洗い出し購入しました。

結果と所感

結果としては月当たり約20%程度のコスト削減を達成する事ができました!
日々開発に追われているとAWSのコスト最適化まで手が回らないのが正直なところでしたが、
削減可能な部分が想像以上に多くもっと早く取り組むべきだった思いました。
今回コスト削減対応を実施してみての気づきは以下の3点でした。

  • ステージング環境をどこまで本番相当にするのかの検討の重要性

→ 性能をどこまで落とせるか、データが最新である必要があるのかなど検討によってステージングのコストを圧縮する。
今回のプロダクトではステージング環境が最新のデータでならなければならないタイミングは限られていましたのでデータの作り替え頻度を落とすことでコスト削減に繋げました。

  • 日々のエンジニアのコスト意識を持つことの重要性

→ 不要になった物は片付ける、定期的にコストをチェックする、AWSサービスの料金体系の理解
今回調査を進める中でAWS内のゴミが散見されました。
(昔検証で使用していたEC2や数年前に作られたAMI、ボリュームなど)
塵も積もれば山となるのでチームの意識をコスト面にも向ける必要性があると思いました。

  • AWSの長期間予約(リザーブ)を有効活用

→ 今後のインスタンスの世代アップのスケジュールを考えながら活用することで料金を36~40%カット可能なので使用していない場合は要検討かなと思いました。

他の対策としては以下がまだ実施出来ていないので今後チャレンジしていきたいと思っています。
・古いEC2インスタンスの世代アップ
・Dynamoのリザーブドキャパシティの購入
・S3のライフサイクル設定


この記事が気に入ったらサポートをしてみませんか?