S3
Amazon Simple Storage Service
概要(サマリー)
S3(Amazon Simple Storage Service:エススリー)とは、Amazonが提供するクラウドサービス(AWS)の1つで、インターネット上に写真、動画、PDF、プログラムなどのあらゆるファイルを「安全に」「ほぼ無限に」保存できる、世界最大規模のファイル置き場(ストレージ)である。
例えるなら、DropboxやGoogleドライブのような個人向けクラウドフォルダの「開発者向け・プログラム接続版」である。
容量制限がなく、どんなに多くのファイルを保存しても自動で拡張される。また、保存したファイルに特定の「URL」を自動発行して、ホームページ上の画像として世界中に瞬時に公開・配信することも簡単にできる。
詳細解説
S3の仕組みと重要概念
S3は、パソコンのようなフォルダ構造(ツリー構造)ではなく、「バケット」と「オブジェクト」という単位でデータをフラットに管理する「オブジェクトストレージ」である。
- バケット(Bucket):
ファイルを格納するための「バケツ(最上位のフォルダ)」。世界中のすべてのAWSユーザーの中で完全に重複しない、唯一のユニークなバケット名をつける必要がある。 - オブジェクト(Object):
バケットに保存される「ファイル本体」と、そのファイルに関する「データ情報(メタデータ)」をセットにしたもの。 - 高い耐久性:
保存したデータは、AWSの巨大なデータセンター群(複数の地域)へ自動的・物理的に何箇所もコピーして保管される。その耐久性は「99.999999999%(イレブンナイン)」とされており、データが消失するリスクが実質ゼロに近い。 - 権限管理(ポリシー設定):
バケットやファイルごとに「特定のプログラムからのみアクセスを許可する」「世界中に一般公開して閲覧可能にする」などの詳細なセキュリティ設定ができる。
Webアプリ開発におけるS3の役割
Webアプリでユーザーがアイコン画像をアップロードする際、サーバー(EC2など)の内部に直接保存すると、サーバーのハードディスク容量がすぐに一杯になってしまったり、サーバー台数を増やした(スケーリングした)際にもう片方のサーバーから画像が見えなくなったりする。
そのため、画像や動画などのメディアファイルは、すべてS3という外部の巨大ストレージに切り離して保存するのがモダンな開発のセオリーである。
AIコーディングとの関係
AIに「ユーザーが画像をアップロードして表示する機能」を依頼すると、画像の保存先としてS3が前提となることが多い。
AWSが提供するSDK(ソフトウェア開発キット)を使って、Node.jsやPythonからS3へファイルをアップロードするコードや、安全な一時ダウンロードURL(署名付きURL)を生成するロジックを、AIを使えば簡単に構築できる。
AIへ指示する際のポイント
- 「Node.js(AWS SDK v3)を使って、Webフォームからアップロードされた画像ファイルを指定のS3バケットに保存する非同期関数を書いて」
- 「S3バケット内のファイルを一般公開せず、特定のユーザーだけが10分間だけ閲覧できる『署名付きURL(Presigned URL)』を生成するPythonコードを作成して」
よくある勘違い
S3とEC2は何が違うの?
用途が全く異なる。
- EC2: プログラムを実行したり、データベースを動かしたりする「CPU(計算)やメモリ(脳)を持った仮想サーバー本体」。
- S3: 画像やPDF、HTMLファイルなどを大量に安く保存するための「ファイル置き場(ストレージ)」。
S3自体にはプログラムを計算・実行する「脳」はないため、プログラムの実行はEC2に任せ、重い静的ファイルの保管だけをS3に任せる形で役割分担させる。
S3はただのバックアップ用?
データのバックアップ先としても非常に優秀だが、本番運用のWebサイトの「画像配信元」としても日常的に使われる。
さらに、S3には「静的ウェブサイトホスティング」という機能があり、HTML/CSS/JSファイルをバケットに入れるだけで、EC2などのサーバーを一切立ち上げることなく、S3単体でホームページやSPA(シングルページアプリケーション)をインターネット上に公開・配信することができる。
S3は容量無制限だから保存しても費用は増えない?
S3はストレージ容量の上限こそ実質ないが、保存したデータ量(GB単位)と、ファイルへのアクセス回数に応じた料金が発生する従量課金制である。
たとえば大量の画像を保存して多くのユーザーがアクセスする場合、データ転送料が積み重なって予想以上の費用がかかることがある。
「容量無制限」はあくまでストレージの上限がないという意味であり、使えば使うほどコストが増えることを忘れてはいけない。Amazon CloudFront と組み合わせることで配信コストを大幅に削減できる。
まとめ
- S3は、AWSが提供する耐久性が極めて高い容量無制限のクラウドオブジェクトストレージ。
- バケットと呼ばれる仮想のコンテナの中に、オブジェクト(ファイルとメタデータ)を保存して管理する。
- Web開発では、サーバー(EC2)の負荷と容量を抑えるため、画像等のメディアデータをS3に逃がす設計が標準的である。
- AIを活用することで、複雑なAWS SDKを用いたS3へのファイルアップロード・セキュリティ制限のプログラムを正確に構築できる。
情報ソース
より詳しくAIに聞いてみよう
- AWSのS3で、バケット内のオブジェクトを「一般公開(パブリック)」にするための設定手順と、セキュリティ上の注意点を教えてください。
- S3の「バケットポリシー(Bucket Policy)」と「IAMポリシー」の違いと、特定のWebサーバーからのみ読み書きを許可するバケットポリシーの書き方を教えてください。
- S3に保存した画像を、コンテンツ配信ネットワークの「Amazon CloudFront(CDN)」と連携させて、世界中にさらに高速かつ低コストで配信する設定の全体像を教えてください。
- S3の「ライフサイクルルール」とは何ですか?古いバックアップファイルを30日後に自動削除したり、より安いストレージクラス(Glacier)に移行する設定方法を教えてください。
- S3へのアップロードを高速化・安定化させる「マルチパートアップロード」の仕組みと、大容量ファイルを扱う際の実装の注意点を教えてください。