はじめまして、 STORES 決済 でバックエンドエンジニアをしている東瀬野です。
STORES 決済 では定期的にAWSリソースの利用状況の分析を行い、不要リソースの削除やスペックの見直しを行っています。
この取り組みを始めてからもうすぐで1年になるので、取り組んできた内容について書いていきます。
はじめに
本記事では意識的にコスト削減、という言葉は使わずにリソース最適化。という言葉を使っています。
サービス規模に合わせたリソースにすることで無駄遣いを極力減らし、結果としてコスト削減につなげることを目的としています。
STORES 決済 における取り組み
STORES 決済 で取り組んだ内容について順を追って書いていきます。
現状のコスト分析
まずは現状のコスト分析を行いました。
これに関しては特別なことはしておらず、AWSのマネジメントコンソールの請求書を上から順に1つずつ追って「どのサービスにいくら料金がかかっているか」
「AWSの課金体系がどのようになっているか」をチームメンバーと追っていきました。
コスト関連は何となく知っているようで案外知らないことが多く、誰が教えてくれるわけでもないので定期的にチームで見直すことにしています。
利用状況を追うことで現状のシステム構成の把握などもできるため、今後のアーキテクチャ設計などにも役立ちます。
STORES 決済 では、RDS、CloudWatch、ECSでおよそ半分のコストを占めています。
コスト分析は 2〜3ヶ月毎とある程度の期間をもたせて行っており、利用料金の差分とその理由を紐付けて社内に公開しています。
リソース最適化の取り組み
次に利用割合の多いサービスから順に実際に行った取り組みについて記載していきます。
RDS
RDSは基本的にスペックの見直し、RIの適用しか行っていません。
明らかにオーバースペックなRDSのインスタンスタイプを下げる。というのが一番効果的です。
また、新しい世代のインスタンスタイプを選択することでも少しではありますが金額を抑えることができます。
今はRDS Blue/Green deploymentsがあるためサービスダウンも最低限の時間で行えます。
CloudWatch
CloudWatchはDataProcessing-Bytesが大半を占めていた時期がありこれが問題となっていました。
DataProcessing-BytesはCloudWatchLogsへのデータ転送量により金額が変わります。
CloudWatchに各アプリケーションからのログ転送量を表示するダッシュボードを作成することで現状の把握を行いました。
2つのアプリケーションだけ異常に多いことが分かります。
問題となったアプリケーションの特定はできたため、アプリケーション側のログ出力を精査し、今では下のようにログ転送量は大幅に減らすことができています。
基本的なことしかできていませんが、これだけでも元の利用料から50%ほど削減ができています。
ECS
ECSは各ECSサービス毎のタスク数の調整が一番効果的です。
ECSのメトリクスからCPUやメモリの使用率をみつついい塩梅のタスク数調整を行います。
vCPUの割当を減らすのも効果としては大きいはずですが、 CI/CDを共通化している関係で今の所はそこまでできていません。
最近はFargate Spotの活用もはじめています。
また、Savings Planを購入することでメモリの利用料はほぼ相殺できるのでおすすめです。
リソース全般の改善
STORES 決済 は前身のコイニー時代から含めるとサービス提供から10年経過しています。
そうなると当然、いるのか要らないのか分からないリソースが大量に放置されています。
具体的には以下の改善やリソースの削除などを行いました。
EC2群
EC2は以下のものを削除。
- test-hogehoge のようなテスト用途や試験的に立ち上げたであろうEC2。
- タグなどがついていないEC2。
- コンテナ移行前に使用していたEC2。
- 過去に使用されていたビルドサーバー、認証用サーバー、VPNサーバー。
LoadBalancer
LoadBalancerについても見直しを行いました。
- 未使用のLoad Balancerを削除 。
- Classic Load Balancer -> Application Load Balancerへ変更。
- 複数のLoad Balancerを1つのApplication Load Balancerへまとめる。
ElastiCache
利用状況に応じてインスタンスタイプを下げる。
Nat Gateway
未使用のNat Gatewayを削除。
あまり意識しないかもしれませんが、Nat Gatewayは立ち上げているだけで月 $45 ほど料金がかかります。
おわりに
STORES 決済 におけるAWSリソース最適化の取り組みを紹介させていただきました。
どれも特別なことはしておらず、1つずつコツコツと今のサービス状況に対してリソースが適切か。といった地道なことしかしていません。
この取り組みを始めてから結果として利用料金はピーク時から30%ほど削減することができました。
こういった地味ですが大切な取り組みを継続していきたいと思います。