Cloud Service
OCI CDN
OCI のコンテンツ配信。世界中のエッジでキャッシュ・TLS 終端し、Object Storage やサーバーを高速配信する。AWS の Amazon CloudFront に相当。
- 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/許可リストでエッジ限定 + PAR | OAC(S3 を非公開のまま) |
| アプリ層防御 | WAF を同一エッジに内包 | AWS WAF(CloudFront に付与) |
| 即時反映 | ハッシュ命名推奨(伝播〜30分) | Invalidation(パス無効化) |
| 大規模/動画配信 | Media Streams + OCI Edge / Akamai | CloudFront + 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、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。
他クラウドの同等サービス
役割が近いサービスです。設計の置き換えや比較検討の参考に。