AWS CloudFrontは、CDN(Content Delivery Network)として静的コンテンツや動的コンテンツを世界中のエッジロケーションを通じて高速配信するためのサービスです。本記事では、CloudFrontの基本概念、設定方法、キャッシュ戦略について解説します。
1. CDN(Content Delivery Network)とは?
CDNとは、ユーザーの地理的な位置に応じて、最も近いサーバーからコンテンツを配信する技術です。
CDNのメリット
コンテンツ配信の高速化:エッジロケーションを利用し、遅延を最小化
オリジンサーバーの負荷軽減:キャッシュを活用し、オリジンへのリクエスト数を削減
高可用性と耐障害性:分散されたネットワークによりサービスの継続性を向上
セキュリティ強化:DDoS攻撃対策やSSL/TLSによる暗号化が可能
2. AWS CloudFrontの基本
AWS CloudFrontは、AWSが提供するCDNサービスで、S3やEC2などのAWSリソースだけでなく、外部のオリジンサーバーとも連携可能です。
CloudFrontの主要なコンポーネント
コンポーネント | 説明 |
---|---|
オリジン(Origin) | コンテンツの元となるサーバー(S3, EC2, ALB, カスタムサーバーなど) |
ディストリビューション(Distribution) | CloudFrontが管理する配信設定の単位 |
エッジロケーション(Edge Location) | 世界中に配置されたキャッシュサーバー |
キャッシュビヘイビア(Cache Behavior) | キャッシュのポリシーを制御するルール |
CloudFrontの主なユースケース
- S3 + CloudFront:静的ウェブサイトの高速配信
- EC2/ALB + CloudFront:動的コンテンツの最適化
- Lambda@Edge:リクエストやレスポンスを動的に処理
3. CloudFrontの設定手順
S3をオリジンとするCloudFrontの作成(AWSマネジメントコンソール)
- S3バケットを作成
- バケットの作成(
my-static-site
など) - 公開設定は「プライベート」のまま
- バケットの作成(
- CloudFrontディストリビューションの作成
- AWSマネジメントコンソールで CloudFront を開く
- 「ディストリビューションを作成」をクリック
- オリジンの設定 → オリジンタイプに「S3バケット」を指定
- デフォルトのキャッシュ動作 → 「キャッシュ可能」なコンテンツを設定
- CNAME(カスタムドメイン) → 必要に応じて設定
- SSL/TLS証明書 → AWS Certificate Manager (ACM) で管理
- ディストリビューションをデプロイし、提供されたCloudFrontのURLを使用してアクセスを確認
AWS CLIでCloudFrontディストリビューションを作成
aws cloudfront create-distribution --origin-domain-name my-static-site.s3.amazonaws.com
4. CloudFrontのキャッシュ戦略
CloudFrontのキャッシュ設定を適切に行うことで、パフォーマンスとコストの最適化が可能です。
キャッシュポリシーの設定
CloudFrontのキャッシュ動作は、以下の要素によって決まります。
設定項目 | 説明 |
---|---|
TTL(Time To Live) | キャッシュの有効期間(デフォルト24時間) |
キャッシュキー | URLパス、クエリパラメータ、ヘッダーなど |
圧縮 | Gzip/Brotliによるデータ圧縮 |
キャッシュ設定の最適化例
aws cloudfront update-distribution --id EXAMPL3D1ST --default-cache-behavior "{ \\"MinTTL\\": 3600, \\"DefaultTTL\\": 86400, \\"MaxTTL\\": 31536000 }"
動的コンテンツの最適化(オリジンリクエストポリシー)
- 静的コンテンツ(画像、CSS、JS) → キャッシュTTLを長め(例:7日以上)
- 動的コンテンツ(APIレスポンス) → キャッシュTTLを短め(例:1分~1時間)
- ログインページやパーソナライズされたページ → キャッシュしない設定
キャッシュの無効化(Invalidation)
CloudFrontのキャッシュを即座にクリアするには、Invalidation
を使用します。
aws cloudfront create-invalidation --distribution-id EXAMPL3D1ST --paths "/index.html"
5. CloudFront + Lambda@Edge の活用
Lambda@Edgeを活用すると、CloudFrontリクエストの前後で動的な処理を追加できます。
ユースケース
動的なリダイレクト(例:国ごとのページへリダイレクト)
セキュリティ強化(例:JWTトークンの検証)
カスタムレスポンスヘッダーの追加
Lambda@Edgeの簡単なコード例(リダイレクト処理)
'use strict';
exports.handler = async (event) => {
const response = event.Records[0].cf.response;
response.headers['x-custom-header'] = [{ key: 'X-Custom-Header', value: 'Hello World' }];
return response;
};
CloudFrontの動作を変更できるため、高度なカスタマイズが可能です。
6. まとめ
CloudFrontとCDNを活用することで、
- Webサイトの表示速度向上(エッジロケーションによるキャッシュ)
- サーバー負荷の軽減(オリジンへのリクエスト削減)
- セキュリティの強化(DDoS防御、TLS暗号化)
次のステップでは、「DynamoDB(NoSQL)のデータモデリングとインデックス設計」について詳しく解説していきます!