S3成長記録
2024年3月14日に開催されたStorage-JAWS#3で登壇させていただきました。Storage-JAWS初のハイブリッド開催🎉、そしてPiDayの記念日づくしでした。資料はSpeaker Deckで公開済みですが、あれじゃただの年表なので登壇時にお話ししきれなかったところも含めて内容をざっくりまとめておきます。
資料
内容
“What's New with AWS” と “AWS Blog” からS3に関する過去のアップデートを掘り起こして、S3の18年間を機能カットで振り返ってみました。登壇申込時点では年表に整理しようと思ってたのですが、NRIネットコムさんの2021アドカレで小西さんが素晴らしい記事を書かれていたのを知り、15周年の時にAWSが公式で出していた"15 launches that defined 15 years of storage innovation"(公式のリンクが見つからず)をマネて、機能の目的別に整理することにしました。
今回公式の記事を500件ほど確認しました。取りこぼしたもの、また古いものはリンクが切れていたり、サービスの分類が行われてなかったりと、私の判断で整理したものもあり、不正確な情報が含まれているかもしれない点はご容赦ください。また、同じ機能のアナウンス日が両者で異なっていることが多く(Blogが1〜2日先行することが多い)、公式なリリース日が分からなかったので月単位で丸めています。
アップデートは、純粋な機能追加や料金改定、利用可能リージョンの拡大、他のサービスとの連携など様々です。また、複数の機能がまとめてアナウンスされている場合もあり、何を持って1つのアップデートとカウントするのは難しいところですが、S3がメインのアップデートと言えそうなものが216件。そのうち、S3にそれなりの変更が行われただろうと思われるアップデートは146件でした。雑い見方をすると18年間(=216ヶ月)にわたってほぼ毎月何かアップデートを続けている。すごい!
定番のオブジェクト数の推移です。サービスインから半年も経たずに8億オブジェクトに達しているのも驚きですが、その後7年ほどで2500倍に増加しています。
なんと、2021年には100兆個に到達しました。2013年までもすごい伸びでしたが、全期間で見るとほぼ一定のようにしかみえず、直近10年間での伸び方が尋常ではないことがわかります。すごすぎる。
ここからは機能別に振り返っていこうと思います。
まず最初はストレージクラス。現役のストレージクラスはRRSとOutposts関係を除くと8個ですね。Standardに続いて2010年に登場したのが現在非推奨になっているRRS、そしてその次が2015年に登場したStandard-IAです。2012年にはGlacierが登場しますが、この時点ではまだ別サービスで2018年にS3に統合されます。Glacierは2012年11月にS3からのアーカイブをサポートし、たくさん利用されるようになったようです。統合時のブログでJeff BarがGlacierのオブジェクトの多くがS3からアーカイブされたものと発言しています。ちなみに迅速取り出しは2016年11月でした。2020年頃に多くのストレージクラスが登場しており、S3が広範なユースケースで使われるようになったことが伺えます。ちょうど12-14才の多感な時期ということもあり?一気に複雑に。2021年のアップデートを最後に落ち着いたかと思いきや、2023年にこれまた異質なExpress One Zoneが発表されました。データ分析やMLでの需要を踏まえてのエンハンスだと思いますが、まだまだ成長中ですね。ちなみに、RSSがいつ非推奨になったか公式情報は見つけられませんでした。ネット上の情報を見る限り、2017年1月時点で料金面で優位性がなくなっていたようですので、2016年11月の料金改定をもって使用する理由がなくなったのかもしれません。
つづいて、アクセスコントロール周りです。わかりにくいと言われるS3のアクセス制御ですが、アップデートが盛りだくさんですね。
2006年3月の登場時はACLしかありませんでした。2009年にOAIを使用してCloudFrontからのアクセスを制御できるようになったようですが、この時点ではまだバケットポリシが存在せずACLを使用していたようです。2010年にバケットポリシ、2011年にIAMでのアクセス制御がサポートされ、一気に複雑に。ちなみにIAMは2010年9月にベータ版でサービスインしていたようです。今でもよく使われている署名付きURLは2011年に登場しました。2015年にはゲートウェイ型VPC Endpointが発表され、VPCからS3への閉域アクセスが可能になりました。インタフェース型VPC Endpointを用いたPrivateLink経由でのアクセスは2021年で、S3は2種類のVPC Endpointが使用できる珍しいサービスとなりました。2018年にはObject Lockが発表されますが、Glacierでは3年以上前の2015年7月にVault Lockが登場していました。
2018年にはお馴染みのパブリックアクセスブロックも発表されており、意図せぬバケットの公開を防止できるようになりました。それだけ事故が多かったということかと。2020年のObject Ownershipでは、バケット所有者がアップロード時に自動的にオブジェクト所有権を引き継げるようになりました。PutBucktするときに--acl bucket-owner-full-control
をつけ忘れてハマった人は少なくないはず。2022年にはCloudFrontがOACをサポートしたことで、SSE-KMSを使用しているバケットをOriginとして使用できるようになりました。2021年にはACLを無効化できるようになり、翌年にはサーバアクセスログやCloudTrailでACLに依存したアクセスを特定できるようになりました。2022年末には、新規バケットのACL無効化とパブリックアクセスブロックの有効化を行うとのアナウンスがあり、2023年4月から適用が開始されました。ACLの利用シーンはほぼなくなってきており、今後も廃止に向けて変更が続くと思われます。2023年11月には既存バケットでもObject Lockが利用可能になりました(これまでもサポートに依頼してトークンを発行してもらうことでやるにはやれた)。
レプリケーション周りでは、最初に登場したのはCRRです。その後4年ほどCRRの地道な機能改善がつづいた後、2019年9月にSRRが登場します。2019年11月にはアップロードしたほとんどのオブジェクトを数秒でレプリケートし、オブジェクトの99.99%を15分以内にレプリケートできるというRTC (Replication Time Control) が発表されました。同期状況がわかるメトリクスが提供され、RPOが厳しいシステムではそのメトリクスを監視して対処することができるようになったようです。2020年2月にMulti-Region Asynchronous Object Replication Solution (MARS) というソリューションが発表されたようです。マルチリージョンでオブジェクトのレプリケーションを行うためのもので、SQSやDynamoDBなど必要なリソースをデプロイするためのCFnテンプレートが提供されていたようです。2020年11月にはRTCで提供されていたメトリクスがすべてのレプリケーションルールで利用可能になったようです。2022年2月にはBatch Operationsを使用したBatch Replicationが登場し既存オブジェクトのレプリケーションが可能になりました。それまでもサポートに依頼すればできたようです。2023年4月に登場したOperationFailedReplication
メトリクスでは、レプリケーションルールごとにデスティネーションバケットに複製されなかったオブジェクトの数を1分単位で確認できるようになりました。
暗号化は周りはシンプルです。S3登場から5年以上の間サーバサイド暗号化はサポートされておらず、2011年10月にようやくAWS管理鍵(AES256-GCM)を用いたSSE-S3がサポートされました。2014年にはSSE-KMSやSSE-Cも利用可能になりました。2017年にデフォルト暗号化の設定が可能となり、2023年には暗号化方式を指定していない新規オブジェクトもSSE-S3で自動的に暗号化されるようになりました。2023年には米国政府などの機密データの取り扱いに対応するためにDSSE-KMSが登場しました。
年表ばかりじゃ飽きてくるので、UCベースでも振り返ってみたいと思います。
2010年に登場したS3 Access Pointでアクセスポイントポリシを用いて効率的にバケットへのアクセス制御を行うことができるようになりました。2021年9月には、Global Acceleratorを用いたグローバルエンドポイントを提供可能なS3 Multi-Region Access Pointが利用可能になり、レイテンシの小さいバケットにアクセスをルーティングすることができるようになりました。これらのアクセスポイントはクロスアカウントでの利用も可能です。2021年3月にはObject Lambdaが登場し、Object Lambda Access Point経由でS3バケットから取得したオブジェクトをオンデマンドで加工して返すことができるようになりました。ちょっとややこしいですが、Object Lambda Access Pointへのリクエストによって起動したLambda関数は先述のS3 Access Point経由でバケット内のオブジェクトを取得します。Object Lambdaにより、バケットに保存されているオブジェクトの一部のデータをマスキングしたいとか、画像データに権利者情報を埋め込みたい等のUCが実現しやすくなりました。2023年3月にはCloudFrontのオリジンにObject Lambda Access Pointを指定できるようになり、キャッシュを用いることでObject Lambdaの実行回数を減らすこともできるようになりました。2023年10月にはAthenaでObject Lambdaで加工したオブジェクトにクエリできるようになっています。
S3のアップデートを振り返ってきましたが、登場時はたしかにシンプルだった(マネコンもなかったし)S3も、18年の時を経た今シンプルと言えるかは悩ましいところですね。
S3はシンプルなオブジェクトストレージからAWSのエコシステムの中核サービスへと進化しつづけていて、18年の重みを改めて実感しました。アップデートの多さに心折れそうになりましたが、結構知ってるつもりのS3にまだ知らない機能があったりと新たな発見もあり、振り返ってみてよかったです。今回紹介しきれなかった機能がまだたくさんありますが、懐かしかったとか、この機能知らなかったとか、懇親会のクイズに出そうとか、何かのお役にたてばうれしいです。
Discussion