Amazon S3とAmazon CloudFrontは、同じAWSのサービスでも役割が違います。
S3はファイルを保管する場所であり、CloudFrontはそのファイルを利用者の近くから配信するための仕組みです。
画像、CSS、JavaScript、動画、ダウンロード用ファイルのような静的コンテンツを扱う場合、この2つを組み合わせると、保管、配信、アクセス制御を分けて設計しやすくなります。
まず押さえる役割の違い
S3とCloudFrontを同じ「配信の仕組み」として捉えると、設定の目的が見えにくくなります。
先に役割を分けると、構成を判断しやすくなります。
| 項目 | Amazon S3 | Amazon CloudFront |
|---|---|---|
| 主な役割 | ファイルやデータをオブジェクトとして保管する | 利用者に近い配信拠点からコンテンツを届ける |
| 向いている用途 | 画像、動画、ログ、静的ファイル、バックアップの保存 | Webサイトの高速化、静的コンテンツ配信、ダウンロード配信 |
| 設計で見るポイント | バケット、オブジェクト、権限、暗号化、保存期間 | オリジン、キャッシュ、HTTPS、アクセス制御、無効化 |
Amazon S3とは
Amazon S3(Simple Storage Service)は、AWSが提供するオブジェクトストレージサービスです。
オブジェクトストレージとは、ファイル本体とメタデータをひとまとまりの「オブジェクト」として保存する方式です。
S3では、オブジェクトを「バケット」と呼ばれる入れ物に保存します。
そのため、画像、動画、Webサイトの静的ファイル、ログデータなど、種類の違うデータをまとめて扱いやすいのが特徴です。
S3の主な特徴
- 高い耐久性:S3はデータを失いにくくするためのストレージとして設計されています。耐久性は「保存したデータが壊れたり失われたりしにくいこと」を指し、サービスに常に接続できることを表す可用性とは別の指標です。
- 容量を固定しない使い方:事前にディスク容量を決めておく運用ではなく、必要に応じてデータを追加していけます。アクセス増加やファイル数の増加に合わせて使いやすい構成です。
- アクセス管理:IAM、バケットポリシー、ブロックパブリックアクセスなどを使い、誰がどのデータにアクセスできるかを管理できます。
- 暗号化と保護機能:保存時の暗号化、バージョニング、ライフサイクル設定などを組み合わせることで、保存データの保護とコスト管理をしやすくなります。
Amazon CloudFrontとは
Amazon CloudFrontは、AWSが提供するCDN(コンテンツ配信ネットワーク)です。
CDNは、利用者に近い配信拠点からコンテンツを返すことで、Webページやファイルの読み込みを速くする仕組みです。
CloudFrontでは、S3バケットやWebサーバーなどをオリジンとして指定します。
オリジンとは、配信する元データを置く場所のことです。
利用者がCloudFrontのURLや独自ドメインにアクセスすると、CloudFrontはキャッシュがあれば近い配信拠点から返し、なければオリジンから取得して配信します。
CloudFrontの主な特徴
- 低レイテンシの配信:利用者に近いエッジロケーションからコンテンツを返すため、読み込み開始までの待ち時間を短くしやすくなります。
- キャッシュ制御:画像やCSSのように変更が少ないファイルは長めに、更新が多いファイルは短めにキャッシュするなど、コンテンツの性質に合わせて調整できます。
- HTTPS配信:HTTPSでの配信に対応し、証明書やアクセス制御の設定と組み合わせて安全な配信経路を作れます。
- セキュリティサービスとの連携:AWS WAFやAWS Shieldと組み合わせることで、Webアプリケーションへの攻撃やDDoS対策を設計に含めやすくなります。
S3とCloudFrontを組み合わせるメリット
S3だけでも静的ファイルを保存できますが、配信までS3に直接任せると、速度、キャッシュ、公開範囲の管理が単純になりすぎる場合があります。
CloudFrontを前段に置くと、保存場所と配信経路を分けて考えられます。
- 配信速度を上げやすい:CloudFrontがエッジロケーションから配信するため、利用者がオリジンから遠い場合でも応答を速くしやすくなります。
- オリジンへの負荷を減らせる:同じファイルへのアクセスをCloudFrontのキャッシュで返せるため、S3への直接アクセスを抑えられます。
- 公開範囲を制御しやすい:S3バケットを直接公開せず、CloudFront経由のアクセスだけを許可する構成にできます。
- HTTPSやセキュリティ設定をまとめやすい:利用者向けの入口をCloudFrontに集約することで、証明書、WAF、キャッシュ、ログの設計を整理しやすくなります。
基本的な連携手順
実際の設定値はドメイン、公開範囲、更新頻度、セキュリティ要件によって変わります。
ここでは、S3に置いた静的ファイルをCloudFront経由で配信する基本の流れを整理します。
- S3バケットを作成する
配信したいファイルを保存するバケットを作成します。バケット名は重複しない名前にし、公開する必要がない場合はパブリックアクセスを許可しない構成にします。 - ファイルをアップロードする
画像、CSS、JavaScript、ダウンロード用ファイルなどをS3に置きます。ブラウザで正しく扱えるように、必要に応じてContent-Typeなどのメタデータも確認します。 - CloudFrontディストリビューションを作成する
CloudFrontのオリジンとしてS3バケットを指定します。ディストリビューションは、CloudFrontがどこから取得し、どのように配信するかを定義する設定です。 - S3への直接アクセスを制限する
S3を非公開にしたい場合は、CloudFrontからのアクセスだけを許可する設定を行います。現在の構成では、OAC(Origin Access Control)を使う方法が主な選択肢です。既存環境ではOAI(Origin Access Identity)を見かけることもありますが、新しく設計する場合はOACを前提に検討します。 - キャッシュポリシーを決める
更新頻度の高いファイルは短めに、変更の少ない画像やライブラリファイルは長めにするなど、ファイルの性質ごとにキャッシュ期間を調整します。 - 独自ドメインとHTTPSを設定する
必要に応じて独自ドメインをCloudFrontに割り当て、HTTPSで配信します。公開サイトで使う場合は、この段階で証明書とリダイレクト方針も確認します。
キャッシュ設計で失敗しやすい点
CloudFrontの効果は、キャッシュの設計に大きく左右されます。
すべてのファイルを同じ期間でキャッシュすると、更新した内容が反映されにくくなったり、逆にキャッシュの効果が薄くなったりします。
- 頻繁に変わるファイル:HTMLや設定ファイルのように更新が多いものは、短めのキャッシュ期間にするか、更新時に無効化を行います。
- 変更が少ないファイル:画像、CSS、JavaScriptなどは、ファイル名にバージョンやハッシュを含めると長めにキャッシュしやすくなります。
- 公開してはいけないファイル:S3側の権限とCloudFront側のアクセス制御を分けて確認します。CloudFrontで見えないつもりでも、S3の直接URLが公開されていると意図しないアクセスが起きます。
活用例
静的コンテンツ配信
Webサイトで使う画像、CSS、JavaScriptをS3に保存し、CloudFrontで配信します。
アクセスが集中しても、CloudFrontのキャッシュが効いていればS3へのアクセスを抑えやすく、ページの表示速度も安定しやすくなります。
動画や大きなファイルの配信
動画ファイルや資料ファイルをS3に置き、CloudFrontを通じて配信します。
利用者が世界中にいる場合でも、CloudFrontの配信拠点を使うことで、オリジンに直接取りに行くよりも安定した配信を設計しやすくなります。
セキュアなファイルダウンロード
S3バケットを直接公開せず、CloudFrontを入口にしてダウンロードを提供します。
HTTPS、OAC、必要に応じた署名付きURLなどを組み合わせることで、公開範囲を絞ったファイル配信を設計できます。
導入前に確認したいこと
- 配信するファイルは公開してよいものか。
- S3バケットを直接公開する必要があるか、それともCloudFront経由に限定するか。
- 更新頻度に合ったキャッシュ期間になっているか。
- 更新時にキャッシュ無効化が必要か。
- HTTPS、独自ドメイン、WAFなどの入口設定をどこで管理するか。
- 転送量、リクエスト数、キャッシュヒット率を継続して確認できるか。
要点
Amazon S3は、データを保管するためのオブジェクトストレージです。
Amazon CloudFrontは、そのデータを利用者に近い場所から配信するCDNです。
2つを組み合わせると、静的コンテンツ配信、ファイルダウンロード、動画配信などで、速度、セキュリティ、運用の分担を整理できます。
特にS3を直接公開しない構成では、CloudFrontからのアクセスだけを許可する設計と、キャッシュポリシーの確認が欠かせません。