TL

Cloud Service

OCI CDN

OCI のコンテンツ配信。世界中のエッジでキャッシュ・TLS 終端し、Object Storage やサーバーを高速配信する。AWS の Amazon CloudFront に相当。

中級パフォーマンス効率セキュリティコスト最適化
最終更新: 2026-06-03公式ドキュメント ↗
TL;DR要点だけ先に
  • 1.コンテンツを世界中のエッジにキャッシュし近くから高速配信。
  • 2.OCI では WAF エッジポリシーがキャッシュ・TLS・WAF を一体提供。
  • 3.独立 CDN メニューはなく WAF に統合。大規模配信は Akamai 連携。

解決する課題

  • 遠いユーザーにも 低遅延 でコンテンツを届けたい
  • オリジン(Object Storage / Load Balancer / 任意サーバー)の 負荷と egress を下げたい
  • 世界配信でも HTTPS(TLS 終端)とアプリ層防御(WAF) を一体で担保したい
  • 静的アセット(画像・JS/CSS・動画)を エッジで肩代わり したい

主要概念と用語

  • エッジポリシー (WAF Edge Policy): エッジ配信+防御の設定単位。CloudFront の「ディストリビューション」に相当
  • エッジノード: キャッシュと TLS 終端・WAF 評価を行う世界中の拠点(CloudFront のエッジロケーション相当)
  • オリジン (Origin) / オリジングループ: 配信元(Object Storage、Load Balancer、任意の HTTP サーバー)。複数オリジンでフェイルオーバー/分散可
  • プライマリドメイン / 追加ドメイン: ポリシーが受け付ける FQDN。ワイルドカードは追加ドメインとして API/CLI で指定
  • キャッシュルール (Caching Rule): パスやパターン単位でキャッシュ可否・TTL を制御。Cache-Control を尊重させる設定も可
  • 証明書 (Certificate): エッジで終端する TLS 証明書(PEM・フルチェーン、TLS 1.2 以上)
  • オリジン配信元としての Object Storage: バケットを PAR(Pre-Authenticated Request) や公開バケットで公開し、エッジのオリジンにする(S3 オリジン相当)

仕様・制限・クォータ

  • キャッシュ容量: 1 ポリシーあたり約 1 GB のレスポンスキャッシュ。大容量・ストリーミングはキャッシュ対象になりにくい点に注意(大規模配信は Media Streams / Akamai 側)
  • TLS: PEM 形式の証明書+秘密鍵(パスフレーズ不可)。TLS 1.2 以上(1.0/1.1 は非推奨)。HTTPS リダイレクトや HSTS を設定可
  • 変更の反映: ポリシー変更は全エッジへ伝播に約 10〜30 分(機能変更は 10〜15 分程度)。CloudFront の Invalidation のような「即時無効化」前提の運用とは粒度が異なる
  • ドメイン: プライマリ 1 つ+追加ドメイン(ワイルドカード可、API/CLI 経由)
  • テナンシ/リージョンごとに サービス制限(ポリシー数など)があり引き上げ申請可

内部の仕組み

ユーザーは最寄りの エッジノード にアクセスします。エッジは TLS を終端し、WAF ルールを評価したうえで、キャッシュがあれば即返し(キャッシュヒット)、なければ オリジンへ取りに行き(オリジンフェッチ) 以後キャッシュします。何をキャッシュするか・どれだけ保持するかは キャッシュルール(パターン+TTL) で決まります。

  • キャッシュ可否はキャッシュルールで明示。Cache-Control を尊重させると、オリジンのヘッダに従わせることも可能
  • オリジンは オリジングループ にまとめ、ヘルスに応じて切り替え(フェイルオーバー)できる
  • エッジは同時に アプリ層防御(OWASP ルール・ボット対策・レート制限・アクセス制御) も実施
更新が反映されない?

TTL が長いとエッジが古い内容を返し続けます。即時性が要るなら ファイル名にハッシュを付けて別 URL 化app.abc123.js)するのが定番。CloudFront の create-invalidation ほど即時のパス無効化に頼る設計は、伝播時間(〜30 分)を考えると避けるのが安全です。

設計パターン / ベストプラクティス

  • 静的サイト/メディア配信: Object Storage(PAR or 公開バケット)をオリジンにし、エッジポリシーでキャッシュ+TLS+WAF を前段に置く(S3 + CloudFront + WAF 相当)
  • パスごとに最適化: 静的アセットは TTL 長め、API/動的パスはキャッシュ無効に分ける
  • オリジン保護: オリジン(Load Balancer / インスタンス)はエッジ経由のみ許可。NSG やオリジンの許可リストで直アクセスを遮断(CloudFront の OAC に相当する考え方)
  • 冗長化: オリジングループでマルチオリジン化し、片系障害時にフェイルオーバー
  • 大規模・動画: エッジポリシーのキャッシュ上限を超える配信は Media Streams + OCI Edge / Akamai に寄せる

運用・監視・トラブルシュート

  • OCI Logging / Monitoring でリクエスト数・ヒット状況・WAF ブロックを可視化
  • WAF ログで「ブロックされたのか・キャッシュから返ったのか・オリジンまで行ったのか」を切り分け
  • 反映されない時は 伝播時間(〜30 分) をまず疑い、次にキャッシュルール/TTL とオリジンの Cache-Control を確認
  • 5xx が出る時はオリジン側(Object Storage の PAR 失効、Load Balancer/バックエンドの健全性)を確認

コスト

要素課金ポイント
WAF エッジポリシーポリシー単位 + リクエスト量エッジ配信・キャッシュ・WAF を含む基本課金
データ転送(egress)従量(無料枠あり)OCI は egress 無料枠が比較的大きい。エッジ肩代わりでオリジン egress を削減
オリジン側(Object Storage 等)ストレージ + リクエスト + egressエッジでヒットするほどオリジンへの往復が減りコスト減
Akamai 連携(大規模配信)Akamai 契約に依存OCI ではなく自身の Akamai アカウント課金
コスト削減

キャッシュヒット率を上げるほど オリジンへの往復と egress が減ります。静的アセットは TTL を長く取り、?v= ではなくファイル名ハッシュで世代管理すると、安全にキャッシュ寿命を伸ばせます。

セキュリティ

  • HTTPS 強制: エッジで TLS 終端し、HTTP→HTTPS リダイレクトと HSTS を有効化
  • オリジン秘匿: オリジンはエッジ経由のみ到達可能にし、NSG/許可リストで直アクセスを遮断(CloudFront の OAC 相当の意図)
  • WAF 一体: 同じエッジで OWASP ルール・ボット管理・レート制限・地理/IP 制御を適用(DDoS/L7 緩和)
  • 権限分離: テナンシは コンパートメント + IAM ポリシー でポリシー/証明書の操作権限を分離
アンチパターン

オリジン(Load Balancer や Object Storage のバケット)をインターネットに直公開したままエッジポリシーを「並べて」置くのは危険。ユーザーがエッジを迂回してオリジンを直接叩けると、WAF もキャッシュも素通りされます。オリジンは NSG/許可リストでエッジからのアクセスのみ許可し、Object Storage は公開バケットではなく PAR や限定公開にして、必ずエッジを唯一の入口にしてください。

関連サービス・比較(AWS との対応)

観点OCI(エッジ配信)AWS
位置づけWAF エッジポリシー(旧 CDN/Edge の後継)Amazon CloudFront
配信単位エッジポリシーディストリビューション
エッジ拠点エッジノードエッジロケーション
オリジン秘匿NSG/許可リストでエッジ限定 + PAROAC(S3 を非公開のまま)
アプリ層防御WAF を同一エッジに内包AWS WAF(CloudFront に付与)
即時反映ハッシュ命名推奨(伝播〜30分)Invalidation(パス無効化)
大規模/動画配信Media Streams + OCI Edge / AkamaiCloudFront + MediaPackage 等

ハンズオン / CLI例

OCI ではエッジ配信は WAF(oci waas で構成します。最小構成は「オリジン定義 → ポリシー作成 → キャッシュルール設定」です。

# 1) オリジン定義(JSON)。ここでは Object Storage の公開/PAR ホストを配信元にする例
cat > origins.json <<'JSON'
{
  "primaryOrigin": {
    "uri": "https://objectstorage.ap-tokyo-1.oraclecloud.com",
    "httpsPort": 443
  }
}
JSON

# 2) WAF エッジポリシーを作成(プライマリドメイン = 配信したい FQDN)
oci waas waas-policy create \
  --compartment-id ocid1.compartment.oc1..xxxx \
  --domain cdn.example.com \
  --display-name demo-edge-policy \
  --origins file://origins.json

# 3) キャッシュルールを設定(/assets/ 配下を 1 時間キャッシュ)
oci waas caching-rule update \
  --waas-policy-id ocid1.waaspolicy.oc1..xxxx \
  --caching-rules '[{
    "name": "cache-assets",
    "action": "CACHE",
    "criteria": [{"condition": "URL_STARTS_WITH", "value": "/assets/"}],
    "cachingDuration": "PT1H",
    "isClientCachingEnabled": true
  }]' \
  --force

# 4) ポリシーの状態とエッジ向けの CNAME ターゲットを確認
oci waas waas-policy get \
  --waas-policy-id ocid1.waaspolicy.oc1..xxxx \
  --query "data.{state:\"lifecycle-state\", cname:cname, domain:domain}"
# (参考)動画など大規模配信は Media Streams 側で CDN を構成
# OCI Edge を使う場合
oci media-services stream-cdn-config create-edge-stream-cdn-config \
  --display-name demo-edge-cdn \
  --distribution-channel-id ocid1.streamdistributionchannel.oc1..xxxx

# Akamai を使う場合(自身の Akamai アカウントが必要)
oci media-services stream-cdn-config create-akamai-stream-cdn-config \
  --display-name demo-akamai-cdn \
  --distribution-channel-id ocid1.streamdistributionchannel.oc1..xxxx

OCI Service

OCI CDNを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

ネットワーキング

比較で見る軸

クラウド: OCI / カテゴリ: ネットワーキング / 難易度: intermediate

導入後に効く点

OCI では WAF エッジポリシーがキャッシュ・TLS・WAF を一体提供。

先に潰すリスク

サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。

数字・仕様の読み方
クラウド
OCI
カテゴリ
ネットワーキング
難易度
intermediate
関連資格
設計柱
performance / security / cost

判断チェックリスト

  • 自社の用途が「ネットワーキング / performance」に近いか確認する。
  • 強みである「コンテンツを世界中のエッジにキャッシュし近くから高速配信。」が本当に評価軸になるか確認する。
  • 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

ネットワーキングperformancesecuritycost

他クラウドの同等サービス

役割が近いサービスです。設計の置き換えや比較検討の参考に。