静的サイトホスティング
Object Storage にビルド成果物を置き、前段の WAF エッジポリシー(OCI のエッジ配信)でキャッシュ・TLS・WAF を効かせて、安全・高速・低コストに静的サイトを配信する構成。
このパターンは?
HTML/CSS/JS(やSPA、静的サイトジェネレータの出力)を、サーバーを1台も持たずに世界配信する最小・最安構成の OCI 版です。ビルド成果物を Object Storage に置き、その前段に WAF エッジポリシー(OCI のエッジ配信レイヤ) を置いて、キャッシュ・TLS 終端・アプリ層防御を一手に担わせます。
AWS でいう「S3 + CloudFront(OAC)+ Route 53 + ACM」の構成を、OCI のサービスに置き換えたものです。OCI には CloudFront のような独立した「CDN」メニューが現在なく、エッジ配信は WAF エッジポリシー(oci waas) が担う、という1点だけ最初に押さえてください。
構成
[ユーザー]
│ HTTPS
▼
OCI DNS (権威DNS, Anycast) ──► WAF エッジポリシー (エッジ配信: キャッシュ + TLS終端 + WAF)
CNAME/ALIAS │ オリジンフェッチ(PAR 経由 / 限定公開)
▼
Object Storage (Private バケット: ビルド成果物)
CI/CD: 任意のパイプライン ─(build)→ out/ ─(sync)→ Object Storage
(エッジは TTL ベース。即時反映はファイル名ハッシュで世代管理)
各コンポーネントの役割
- Object Storage: ビルド成果物(オリジン)を保存。バケットは既定の Private のまま置き、エッジには PAR(Pre-Authenticated Request) か限定公開で読ませる
- WAF エッジポリシー: エッジでのキャッシュ+TLS 終端+WAF。OCI における CloudFront 相当の入口
- OCI DNS: 独自ドメインの権威 DNS。配信用 FQDN をエッジの CNAME ターゲットへ向ける(apex は ALIAS)
- TLS 証明書: エッジで終端する PEM 形式(フルチェーン)の証明書+秘密鍵。TLS 1.2 以上
S3 と同じく、Object Storage を Public バケットにして直接配信するのはアンチパターン。バケットは Private のままにし、WAF エッジポリシーを唯一の入口にして、オリジンへは PAR か限定公開経由でアクセスさせます(CloudFront + OAC で S3 を非公開のまま配信するのと同じ意図)。
各レイヤの責務
| レイヤ | OCI サービス | 主な責務 |
|---|---|---|
| DNS | OCI DNS | FQDN をエッジへ解決。apex は ALIAS、サブドメインは CNAME |
| エッジ | WAF エッジポリシー | TLS 終端・キャッシュ・WAF(OWASP/ボット/レート制限) |
| オリジン | Object Storage | ビルド成果物の保管(Private)。PAR/限定公開でエッジにだけ読ませる |
| 鍵管理 | Vault | 保存時暗号化の顧客管理鍵(任意)。既定は Oracle 管理鍵 |
| 可観測性 | Monitoring | リクエスト数・キャッシュヒット・WAF ブロックの監視とアラーム |
設計の勘所
- デプロイは
build → Object Storage へ sync。アップロード後はエッジの TTL に従って配信される - キャッシュは TTL 制御が基本。エッジ(WAF エッジポリシー)には CloudFront の Invalidation のような「即時パス無効化」がなく、ポリシー変更の伝播に約 10〜30 分かかる
- そのため即時反映が要るアセットはファイル名にハッシュを付けて別 URL 化(
app.abc123.js)し、index.htmlのような入口ファイルだけ短い TTL に寄せる - キャッシュルールはパス単位で設計:静的アセット(
/assets/)は TTL 長め、SPA の HTML は短めに分ける - ディレクトリ風 URL(
/blog/)をindex.htmlに対応させたい場合、Object Storage 側のオブジェクト名やエッジのルールで吸収する(S3 の "default root object" のような自動補完はオリジン側で設計が必要)
?v=2 のクエリ更新ではなく、ファイル名そのものにハッシュを入れると、エッジの TTL を長く取ってもデプロイのたびに別 URL になり、安全にキャッシュヒット率を上げられます。伝播時間(〜30 分)に依存しない運用ができます。
Well-Architected の観点
- コスト最適化: サーバーレスで固定費がほぼ無い。OCI は egress 無料枠が比較的大きく、エッジのキャッシュヒットでオリジンへの往復と転送量をさらに削減できる
- パフォーマンス効率: Anycast の DNS とエッジキャッシュで、地理的に近い拠点から低遅延配信
- セキュリティ: Private バケット + PAR + エッジ TLS に加え、同じエッジで WAF(OWASP ルール・ボット対策・レート制限) が一体で効く。保存時暗号化は既定で有効、要件次第で Vault の顧客管理鍵に
- 運用上の優秀性: Monitoring と Logging でリクエスト・キャッシュ・WAF ブロックを可視化し、アラームで異常検知
Object Storage への put を Events サービスで捕捉し、Functions を起動すれば、デプロイ通知・画像最適化・キャッシュ整合チェックなどの自動化を疎結合に追加できます(S3 イベント → Lambda と同じ発想)。
よくある落とし穴
- バケットを Public にして直配信(エッジを迂回され WAF もキャッシュも素通り)。バケットは Private のまま、PAR/限定公開でエッジにだけ読ませる
- オリジンをエッジと「並べて」インターネット直公開。ユーザーがエッジを飛ばしてオリジンを直接叩けてしまう。エッジを唯一の入口にする
- CloudFront の Invalidation 感覚で即時無効化に頼る設計。エッジは伝播に〜30 分かかる。ハッシュ命名で世代管理する
- PAR の有効期限切れでオリジンフェッチが 5xx 化。期限管理とローテーションを運用に組み込む
- TLS 証明書のチェーン不備(中間証明書欠落・パスフレーズ付き秘密鍵)でエッジに登録できない。PEM フルチェーン・パスフレーズなしで用意する
AWS との対応(早見表)
| 役割 | OCI | AWS |
|---|---|---|
| オリジン(成果物保管) | Object Storage(Private + PAR) | S3(Block Public Access + OAC) |
| エッジ配信 | WAF エッジポリシー | CloudFront |
| オリジン秘匿 | PAR / 限定公開 + NSG・許可リスト | OAC(S3 を非公開のまま) |
| アプリ層防御 | WAF を同一エッジに内包 | AWS WAF(CloudFront に付与) |
| 即時反映 | ファイル名ハッシュ推奨(伝播〜30分) | Invalidation(パス無効化) |
| DNS / apex | OCI DNS / ALIAS レコード | Route 53 / Alias レコード |
| 証明書 | PEM をエッジに登録 | ACM(us-east-1) |
| 鍵管理 | Vault | KMS |
| 監視 | Monitoring + Logging | CloudWatch + ログ |
アクセス分析・キャッシュ状況の調査は Monitoring と WAF ログで。「ブロックされたのか・キャッシュから返ったのか・オリジンまで行ったのか」をログで切り分けると、配信トラブルの原因に早く辿り着けます。
OCI Pattern
静的サイトホスティングを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
cost
比較で見る軸
クラウド: OCI / 難易度: intermediate / 関連サービス: 5件
導入後に効く点
Object Storage にビルド成果物を置き、前段の WAF エッジポリシー(OCI のエッジ配信)でキャッシュ・TLS・WAF を効かせて、安全・高速・低コストに静的サイトを配信する構成。
先に潰すリスク
パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。
- クラウド
- OCI
- 難易度
- intermediate
- 関連サービス
- 5件
- 設計柱
- cost / performance / security / operational
判断チェックリスト
- 自社の用途が「cost / performance」に近いか確認する。
- 強みである「Object Storage にビルド成果物を置き、前段の WAF エッジポリシー(OCI のエッジ配信)でキャッシュ・TLS・WAF を効かせて、安全・高速・低コストに静的サイトを配信する構成。」が本当に評価軸になるか確認する。
- 注意点の「パターンをそのまま写すのではなく、可用性、権限、ネットワーク境界、運用手順を自分の要件に合わせる必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。