✅第一部:前提条件の準備
準備チェックリスト
- AWSアカウント(支払い方法が有効化されている)
- 独自ドメイン(例:example.com)
- ウェブサイトファイルの準備完了(HTML/CSS/JS)
- ブラウザでAWSコンソール (console.aws.amazon.com) を開く
重要な概念の理解
- S3バケット:ウェブサイトファイルを保存するコンテナ
- CloudFront:グローバルCDN、コンテンツ配信を加速
- Route53:DNS解決サービス、ドメインを関連付け
- ACM:無料のSSL/TLS証明書サービス
- OAC:Origin Access Control、CloudFrontのみがS3にアクセス可能
💾第二部:S3バケットの作成と設定
1S3バケットの作成
パス:AWSコンソール ホーム → S3 → バケット → バケットを作成
詳細ステップ
- AWSコンソールにサインイン
- 上部の検索ボックスに
S3と入力 → S3サービスに入る - 左側のサイドバーで「バケット」をクリック
- 「バケットを作成」ボタン(青色)をクリック
フォームの入力
2静的ウェブサイトホスティングを有効にする
パス:S3バケット → プロパティ → 静的ウェブサイトホスティングを編集
詳細ステップ
- 作成したばかりのバケット名(example-com-website)をクリック
- 「プロパティ」タブ(右側から5番目)をクリック
- 下にスクロールして「静的ウェブサイトホスティング」セクションを見つけます
- 「編集」ボタンをクリック
設定項目
- ページに「✓ 更新完了」と表示される
- 「静的ウェブサイトホスティング」の下に「有効」と表示される
- ウェブサイトエンドポイントのURLが表示される
3ウェブサイトファイルをアップロード
パス:S3バケット → オブジェクト → アップロード
ファイル構造の例
アップロード方法
ウェブサイトフォルダをアップロード領域にドラッグ、サブフォルダの再帰的なアップロードに対応
方法B:クリックして選択
「ファイルを追加」または「フォルダを追加」をクリックして、ファイルを1つずつ選択
- アップロード進度が100%に達したことを確認
- バケットに戻った後、すべてのファイルリストが表示されます
🔐第三部:Origin Access Control(OAC)の作成
4OACの作成
パス:CloudFront → セキュリティ → Origin Access
詳細ステップ
- 上部の検索ボックスに
CloudFrontと入力 → CloudFrontサービスに入る - 左側のサイドバーで「セキュリティ」メニューを展開
- 「Origin Access」をクリック
- 「Origin Access Controlを作成」ボタンをクリック
フォームの入力
- 新しく作成されたOACがページに表示される
- 表示されたOAC IDをコピー(例:E127EXAMPLE51Z)
⚡第四部:CloudFrontディストリビューションの作成
5CloudFrontディストリビューションの作成
パス:CloudFront → ディストリビューション → ディストリビューションを作成
オリジン設定 - Origin部分
デフォルトキャッシュ動作設定
ディストリビューション設定
6CloudFrontドメイン名をコピー
パス:CloudFront → ディストリビューション → ディストリビューション詳細
- ディストリビューション作成後、ディストリビューションIDをクリック
- 「ディストリビューション詳細」タブで以下の情報を表示
- ディストリビューションドメイン名をコピー(d111111abcd.cloudfront.net)
7S3バケットポリシーを適用
パス:S3 → バケット → 権限 → バケットポリシー
操作ステップ
- S3サービスに戻る
- ウェブサイトバケット(example-com-website)を選択
- 「権限」タブをクリック
- 下にスクロールして「バケットポリシー」を見つけ、「編集」をクリック
- 以下のJSONを編集ボックスに貼り付け
バケットポリシーJSON(修正が必要)
example-com-website→ バケット名に置き換え123456789012→ AWSアカウントIDに置き換えE1234ABCD→ CloudFrontディストリビューションIDに置き換え
🔒第五部:ACM証明書のリクエスト
8SSL/TLS証明書をリクエスト
パス:ACM(AWS Certificate Manager) → 証明書 → 証明書をリクエスト
重要な注記
詳細ステップ
- 上部の検索ボックスに
Certificate Managerと入力 → ACMサービスに入る - リージョンがUS East(N. Virginia)であることを確認
- 「証明書をリクエスト」ボタンをクリック
フォームの入力
その後のDNS検証
リクエスト後、ページはドメイン検証を実行するよう求めます:
- 「ドメイン検証」セクションで検証レコードが表示されます
- 「Route53レコードを作成」ボタンをクリック
- AWSが自動的にRoute53にCNAMEレコードを追加
- 5~30分待つと、ステータスが「発行済み」に変わります
🌐第六部:Route53 DNS設定
9Route53ホストゾーンを作成
パス:Route53 → ホストゾーン → ホストゾーンを作成
詳細ステップ
- 上部の検索ボックスに
Route53と入力 → Route53サービスに入る - 左側のサイドバーで「ホストゾーン」をクリック
- 「ホストゾーンを作成」ボタンをクリック
フォームの入力
重要な情報を記録
10ドメインレジストラのDNS設定を更新
ドメインレジストラで操作(GoDaddy、Namecheap、Aliyunなど)
ステップ
- ドメインレジストラアカウントにログイン
- 「DNS管理」または「ドメイン管理」を見つける
- ネームサーバー(NSレコード)を上でコピーした4つに変更
- 変更を保存
11Route53でエイリアスレコードを作成
パス:Route53 → ホストゾーン → レコードを作成
最初のレコードを作成(ルートドメイン)
2番目のレコードを作成(wwwサブドメイン)
上記のステップを繰り返しますが、「レコード名」をwwwに変更し、他の設定は同じです。
12CloudFront CNAMEと証明書を設定
パス:CloudFront → ディストリビューション → 編集
ステップ
- CloudFrontサービスに戻る
- ディストリビューションを選択(ディストリビューションIDをクリック)
- 「編集」ボタンをクリック
- 「代替ドメイン名(CNAME)」フィールドを見つけます
- 入力ボックスをクリックして、2つのドメイン名を追加
SSL証明書を選択
⚙️第七部:キャッシュポリシーの設定
13異なるファイルタイプのキャッシュを設定
パス:CloudFront → ディストリビューション → 動作 → 編集
このステップはコストとパフォーマンスを最適化するために使用されます。異なるファイルタイプに異なるキャッシュ時間を設定します。
デフォルト動作設定
オプション:HTMLの個別動作を作成
より細かい制御が必要な場合は、異なるファイルタイプに対して異なる動作ルールを作成できます:
✔️第八部:テストと検証
14ウェブサイトアクセスをテスト
テストURL
成功の指標
- ✅ ページが正常に読み込まれる
- ✅ HTTPSが有効(アドレスバーにロックアイコンが表示される)
- ✅ 証明書情報が正しい(ロックアイコンをクリックして表示)
トラブルシューティング表
| 問題 | 原因 | 解決策 |
|---|---|---|
| AWS S3エラーページが表示される | S3バケットポリシーが正しく設定されていない | バケットポリシーのディストリビューションIDを確認 |
| 「Access Denied」と表示される | OACが正しく適用されていない | S3バケットポリシーにOACが存在することを確認 |
| カスタムドメイン名が機能しない | Route53 DNSが有効になっていない | DNS伝播を待つ(最大48時間) |
| SSL証明書が無効 | ACM証明書がCloudFrontにデプロイされていない | CloudFrontで正しい証明書を選択 |
| アクセスが遅い | キャッシュが機能していない | Cache-Controlヘッダ設定を確認 |
🚀第九部:パフォーマンス最適化
15キャッシュヘッダ最適化を設定
S3のファイルに適切なCache-Controlヘッダを設定すると、コストを大幅に削減し、パフォーマンスを向上させることができます。
方法A:AWSコンソール経由
- S3 → バケット → オブジェクト
- ファイルを選択 → 「オブジェクトアクション」 → 「メタデータを編集」
- カスタムメタデータを追加(キー:Cache-Control)
キャッシュ時間の推奨
| ファイルタイプ | Cache-Control値 | 説明 |
|---|---|---|
| HTMLファイル | public, max-age=300, must-revalidate |
5分、再検証が必須 |
| CSS/JS/画像 | public, max-age=31536000, immutable |
1年、ファイル名のバージョン化が必要 |
| APIレスポンス | public, max-age=0 |
キャッシュなし、毎回最新を取得 |
方法B:AWS CLI経由
16Gzip圧縮を有効にする
CloudFrontで自動圧縮を有効にすると、トラフィックを60~70%削減できます。
ステップ
- CloudFront → ディストリビューション → 編集
- 「デフォルトキャッシュ動作」を見つけます
- 「圧縮を有効にする」をチェック ✓
📊第十部:監視とコスト管理
17監視アラートを設定
CloudFrontコストを監視
- CloudWatchまたはコスト管理に入る
- 予算アラートを設定
主要パフォーマンス指標を監視
CloudFrontディストリビューションで以下のメトリクスを表示:
- リクエスト数:1日あたりの総リクエスト数
- データ転送量:アウトバウンドトラフィックのサイズ
- キャッシュヒット率:90%以上であること
- エラー率:0%に近いこと
コスト見積表(月額)
| サービス | コスト | 説明 |
|---|---|---|
| S3ストレージ | $0.23 | 10GB × $0.023 |
| S3 GETリクエスト | $0.04 | 1M ÷ 1000 × $0.0004 |
| CloudFrontアウトバウンド | 無料 | 1TBフリーティア(100GB使用) |
| CloudFrontリクエスト | 無料 | 10Mフリーティア(1M使用) |
| Route53 | $0.50 | ホストゾーン月額料金 |
| ACM証明書 | 無料 | AWS内部使用は無料 |
| 合計 | $0.77/月 |
よくある質問
Q1:ウェブサイトファイルをどのように更新しますか?
Q2:CloudFrontキャッシュをクリアしますか?
- CloudFront → ディストリビューション → 無効化
- 無効化を作成 → パスに
/*を入力 → 作成
Q3:S3 + CloudFrontのデータ転送フローは何ですか?
Q4:HTTPSリダイレクトをどのように実装しますか?
既にCloudFrontで設定済み:
- ビューアプロトコルポリシー:HTTPからHTTPSへリダイレクト
すべてのHTTPリクエストは自動的にHTTPSにリダイレクトされます。
✅サマリーチェックリスト
デプロイ後、以下のアイテムを確認
- S3バケットが作成され、ファイルがアップロードされている
- 静的ウェブサイトホスティングが有効(index.html、error.html)
- OACが作成されている
- CloudFrontディストリビューションが作成・デプロイされている
- ACM証明書がリクエスト・検証されている
- Route53ホストゾーンが作成されている
- ドメインレジストラのDNSがRoute53 NSに更新されている
- エイリアスレコード(Aレコード)が作成されている
- CloudFront CNAMEが設定されている
- CloudFrontにACM証明書が適用されている
- https://example.com が通常にアクセスできる
- キャッシュポリシーが最適化されている
- 圧縮が有効になっている
- コスト監視が設定されている
その後のメンテナンス
日常操作
- CloudFrontキャッシュヒット率を定期的に確認(90%以上であること)
- 月額コストを監視
- ウェブサイトコンテンツを更新する際に
aws s3 syncコマンドを使用
定期メンテナンス
- ACM証明書の有効期限を確認(自動更新)
- Route53 DNS設定が正しいことを確認
- 古いS3オブジェクトバージョンをクリーンアップ(バージョニングが有効な場合)
パフォーマンス最適化
- CloudFrontのリアルタイムログを使用してキャッシュヒット率を分析
- Cache-Controlヘッダ設定を定期的に調整
- エッジコンピューティング用にLambda@Edgeの使用を検討
🎉 デプロイ完了
本番級の低コストな静的ウェブサイトホスティングソリューションが完成しました
📊 コスト:月額平均$0.50~$5
⚡ パフォーマンス:グローバル < 500ms読み込み時間
🔒 セキュリティ:HTTPS + DDoS保護
📈 スケーラビリティ:トラフィック増加を自動処理