本日も乙

ただの自己満足な備忘録。

S3のストレージクラスを一括で変更するとクラウド破産するかもという話

S3 のストレージコストを最適化する際に、S3 オブジェクトのストレージクラスを用途に合わせて変更するのがプラクティスのひとつとして提唱されています。ストレージクラスは「S3 Standard」「S3 Standard-IA」「S3 OneZone-IA」「S3 Glacier」「S3 Glacier Deep Archive」が提供されており、データアクセス頻度や可用性に応じて使い分けることでストレージコストを減らすことができます。下の表にストレージクラス別のストレージ料金をまとめました。S3 Glacier と S3 Glacier Deep Archive が特に安いですね。

ストレージクラス 料金(1GBあたり)
S3 Standard 0.025 USD(※)
S3 Stanadrd-IA 0.019 USD
S3 OneZone-IA 0.0152 USD
S3 Glacier 0.005 USD
S3 Glacier Deep Archive 0.002 USD

(※)最初の 50TB の場合、ストレージ量が増えるにつれて料金が下がります。

S3 オブジェクトのアクセス頻度がわからない、いちいち設定するのが面倒な場合は「S3 Intelligent-Tiering」によって30日間連続でアクセスがなかった S3 オブジェクトを自動的に S3 Standard-IA に移行してくれる便利機能も提供されています。S3 のライフサイクルポリシによって一定期間経過した S3 オブジェクトを S3 Glacier などに移行することで長期的にストレージコストを抑えることができます。例えば、アクセスログファイルを保管する S3 バケットがあり、直近のアクセスを分析するけれど数ヶ月経過したログは緊急時のみ分析するといった場合、以下のように設定することでコストを最適化できます。

  • S3 Intelligent-Tiering の有効化:一定期間(30日)アクセスがなかった S3 オブジェクトを S3 Standard-IA に移行
  • 1年以上経過した S3 オブジェクトを S3 Glacier に移行するライフサイクルポリシーを設定

うまく使えばかなりのコストを抑えることができるのですが、既存の S3 バケットに適用する際に気をつけないとクラウド破産をおこしてしまうというのは本記事の本テーマです。ここまでが前置きです。

S3 ストレージクラスの移行に料金がかかる

S3 の料金ページ の「リクエストとデータ取り出し」タブのところに「ライフサイクル移行リクエスト (1,000 リクエストあたり)」というのがあります。そうです、ストレージクラスを移行するのにお金がかかるのです!下の表にストレージクラス別の移行料金をまとめました。

ストレージクラス 料金(1,000リクエストあたり)
S3 Standard 無料
S3 Stanadrd-IA 0.01 USD
S3 Intelligent-Tiering 0.01 USD
S3 OneZone-IA 0.01 USD
S3 Glacier 0.0571 USD
S3 Glacier Deep Archive 0.065 USD

S3 Glacier と S3 Glacier Deep Archive が特に高くなっています(ストレージ料金と真逆ですね)。小さなファイルサイズの S3 オブジェクトがある S3 バケットでストレージクラスを移行すると思いがけぬ高額料金が請求されます。

たとえば、ファイル数が 1,000 万のログファイルが S3 Standard として 1年以上保管されている S3 バケットがあるとします。1年以上保管されているオブジェクトを S3 Glacier に移行するようにライフサイクルポリシを設定するとします。1オブジェクト = 1リクエストとすると、移行するのに 5,710 USD もかかってしまいます!日本円で 50万円以上です。

0.0571 USD × 1,000 万 ÷ 1,000 リクエスト = 5,710 USD

大量のオブジェクトが保管されている S3 バケットのストレージクラスを後から変えようとすると予想外のコストがかかるため、無理してストレージクラスを変更しないほうがいいでしょう。ストレージクラスを変更するなら、最初に S3 バケットを作る段階で非機能要件を確認し、用途に見合ったライフサイクルポリシを設定しましょう。

不要な S3 オブジェクトを削除できないかを検討する

S3 ストレージの最適化で最も効果的なのは、オブジェクトの削除です。DELETE リクエストは無料なので、削除することへのコスト的リスクは生じません。まずは、不要なファイルがないかを検討し、積極的に削除していきましょう。長期に渡って稼働しているシステムがある環境では、ログファイルやアプリケーションの設定ファイルなど数年以上に渡って保管されていることがあります。ログ保管の期間はセキュリティやコンプライアンス要件で定められていると思いますので、その期間より経過しているものは削除しましょう。指定された期間以上を削除するようなライフサイクルポリシーを設定すると漏れがなくてベターです。

まとめ

S3 のストレージクラスを変更すると思わぬコスト増につながる話をしました。私自身、過去に一度やらかしたことがありました。

blog.jicoman.info

また、S3 のコスト最適化に関しては、自著の「Amazon Web Services コスト最適化入門」でも取り上げています。

ohsawa0515.booth.pm