見出し画像

Amazon S3のコスト削減実録

この記事はjig.jp Advent Calendar 2023の12月21日(木)の記事です


こんにちは。今回はふわっちで使用しているAmazon S3のコスト削減についてお話ししたいと思います。

ふわっちではAWSの様々なサービスを利用しているのですが、サービスごとのコストを調べると、S3がかなりの部分を占めています。

S3の月ごとのコストをCost Explorerで見ると増加傾向にあることがわかります。

S3の月ごとのコスト

S3のコストについてUsageTypeごとに見ると、APN1-TimedStorage-ByteHrsが最も多いことが分かります。これは保存容量に対する時間課金です。


UsageType別のコスト

S3のStorage Lensで保存容量が最も多いバケットを調べることができます。

保存容量が最も多いバケットは、配信の録画データ保存用バケットでした。

そこで、録画データ保存用バケットのストレージクラス分析を実行しました。

※ちょっとわかりにくいですがこれはAmazon S3 > バケット > (バケット名) > メトリクス > ストレージクラス分析 にあります

ストレージクラス分析とは、S3の機能の一つで、オブジェクトのアクセス頻度やサイズなどをもとに、最適なストレージクラスを推奨してくれるものです。
オブジェクト登録から30日後に標準ストレージクラスから標準-IAストレージクラスへの移行が推奨されていることがわかります。

S3 Standard-IA は、アクセス頻度は低いが、必要に応じてすぐに取り出すことが必要なデータに適しています。S3 Standard-IA は、S3 Standardと同じ高い耐久性、高スループット、低レイテンシーを低価格のストレージ料金 (GB 単位) および取り出し料金 (GB 単位) で提供します。低コストかつ高パフォーマンスのこの組み合わせは、S3 Standard-IA は長期保存、バックアップ、災害対策ファイルのデータストアとして理想的です。S3 ストレージクラスはオブジェクトレベルで構成でき、1 つのバケットには S3 標準、S3 Intelligent-Tiering、S3 標準 IA、S3 1 ゾーン IA に格納されたオブジェクトを含めることができます。また、S3 ライフサイクルポリシーを使用して、アプリケーションを変更せずに、ストレージクラス間でオブジェクトを自動的に移行することもできます。

参考: AWS - 標準-IAストレージクラス

※ドキュメントによって以下のような表記ゆれがあるので注意。以降の文章では標準-IAに統一します。

  • 標準-IA

  • Standard-IA

  • 標準-低頻度アクセス

S3の標準と標準IAのコストの主な違いは以下の通りです。

  • 保管料が安い(0.025USD/GB → 0.0138USD/GB)

    • 標準-IAの場合は30日以内に削除しても30日分の料金がかかる

  • PUT, COPY, POST, LIST のAPI使用料が高い(0.0047USD/1000req → 0.01USD/1000req)

  • 容量に応じたデータ取り出し料金がかかる(0USD/GB → 0.01USD/GB)

参考: AWS - Amazon S3の料金

そして、実際に30日後に標準-IAに移行するようにライフサイクルポリシーを設定しました。

これでコストが減るだろうと思い、数日後に(Cost Explorerへの反映に数日かかる)確認したところ、何とコストが激増していました。

UsageType内訳を見るとAPN1-Request-Tier4が増加していました。これはライフサイクル移行コストでした。
参考: AWS - Amazon S3 の AWS 請求および使用状況レポートを理解する

標準IAの1000リクエストあたりのライフサイクル移行は無料であると勘違いしていました。勘違いの原因はS3の料金表にあり、「低頻度アクセス」のライフサイクル移行リクエストのコストが「該当なし」となっている(スクショの黄色の部分)ためでした。

しかしこの「低頻度アクセス」は「S3 Intelligent-Tiering」の低頻度アクセスだったようで、よく見ると下の方に「S3標準 - 低頻度アクセス」があり、これは0.01USDとなっていました(赤の部分)。

※ちなみにこの料金表におけるライフサイクル移行コストは「入」と書かれている通りそのストレージクラスに移行するときのコストになっているので注意が必要です。S3標準のコストが「該当なし」と書かれていても(オレンジの部分)、他のストレージクラスに移行するときには対象ストレージへの移行コストがかかります。

つまり標準-IAのライフサイクル移行コストは1000件あたり0.01USDであり、ライフサイクルポリシー設定によってその分のコストが一気にかかってしまったというわけです。

このコストは今まで溜め込んでいた標準ストレージのデータを標準-IAにするためのコストであり、平均オブジェクトサイズをもとに計算すると大体2ヶ月ほどで元が取れる計算になりました。
しかし問題は大半の録画データは一定期間後に削除することになっている(非公開録画データの一定期間経過後の削除)ということであり、移行時点から見ると平均で30日後に削除されることになります。しかも標準IAは30日以内に削除されると削除時にEarlyDeleteのコスト(30日間データを保持した場合と同じコスト)がかかります。

つまり一時的ではありますが無駄なコストを発生させてしまったということになります。
ライフサイクル移行条件を、大半のファイルが削除されたあとのタイミングにしておくのが最適解だったというわけです。

最終的にライフサイクル移行タイミングを登録から70日後に変更しました。
また、不要ファイルの削除のバッチタスクに取りこぼしがあることがわかり、その対処も行いました。

その結果、直近1年間のコストは以下のようになりました。

直近1年間の月別コスト

点線の矢印は何も対処しなかった場合に想定されるコストの推移です。
8月に(手違いで)コストが無駄に増えた部分はあるものの、その後はある程度まで減少しました。増加傾向も恐らく緩くなっているはずです。
※10月に少し増えているのは別件の問題によるもの

S3のストレージクラス変更によりコストダウンが見込めますが、ライフサイクルポリシー設定タイミングや設定条件次第では思わぬコストがかかることもあることがわかりました。
ストレージクラスの選択やライフサイクルポリシーの設定は慎重に行う必要があります。

以上がふわっちで行ったS3のコスト削減事例です。
今後もふわっちのサーバ開発チームは、ユーザーの皆様に快適な配信体験を提供するためにさまざまな技術的課題に挑戦していきます。
最後までお読みいただきありがとうございました。


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