9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Cloudflare Meet-up Tokyo Vol.9のLTで発表した内容をベースに、実装の詳細を加えてまとめたものです。

  • LT時の資料

先日、技術書典19でOCIの本を共同執筆して頒布したんですが、その宣伝もかねてサンプルサイトを作りたい!と思ったのがきっかけです。

  • 【宣伝】AWS経験者が秒で理解する Oracle Cloud 爆速構築バイブル【宣伝】
    ※現在、下記サイトからは電子版のみ購入可

  • サンプルページ(Cloudflare - OCI構成)

実は... OCIにはCDNサービスがないんですよね...

そこで、CloudflareとOCIを組み合わせて実装してみたら、めちゃくちゃ良い構成ができたので紹介します!

OCIの課題:CDNがない

他のクラウドと比較してみると:

クラウド CDN
AWS Amazon CloudFront
Azure Azure CDN
Google Cloud Cloud CDN
OCI ❌ なし

どうすればいいの...?って思いますよね。

解決策:Cloudflareとの提携!

実は、OCIとCloudflareは提携関係にあります!

Bandwidth Alliance

  • 2021年11月にOCIが参加
  • OCI Object StorageからのEgress料金が無料

OCIにCDNがなくても大丈夫!

これがOCIの戦略なんですね。自前で全て作るのではなく、協力関係を築く。

クラウド CDN戦略
AWS CloudFront(自前)
Azure Azure CDN(自前)
Google Cloud Cloud CDN(自前)
OCI Cloudflareと提携 ⭕️

個人的には、この戦略はOCIの強みになると考えています。

CloudflareとOCIの組み合わせの利点

1. コスト削減

  • Bandwidth Alliance: Object Storage直接なら転送料無料
  • OCIはOutbound転送量が月10TBまで無料
  • 組み合わせ次第で大幅なコスト削減

2. パフォーマンス向上

  • Cloudflareの世界中のエッジネットワーク活用
  • レイテンシ削減

3. セキュリティ強化

  • DDoS保護、WAF、Bot軽減
  • Cloudflareの強力なセキュリティ機能

実装:Cloudflare Workers + OCI連携

アーキテクチャ

CleanShot 2025-12-14 at 21.25.20@2x.png

ユーザー
  ↓
Cloudflare Workers(プロキシ + キャッシュ + アクセス制御)
  ↓
OCI Flexible Load Balancer
  ↓
Container Instances(nginx)
  ↓
Object Storage(PAR経由でPDF配信)

各コンポーネントの役割

Cloudflare Workers(フロント)

  • エッジでのリバースプロキシ
  • 世界中のエッジでキャッシュ
  • Refererチェックでアクセス制御

OCI Load Balancer

  • Container Instancesの前段に配置
  • ヘルスチェック

OCI Container Instances

  • nginxでプロキシ・配信
  • サーバーレスでコンテナ起動
  • スケーラブルな構成

OCI Object Storage

  • プライベートバケットにPDFを保存

技術的なポイント

1. Refererチェック

PDF URLへの直接アクセスをブロックする仕組みを実装しました。

export default {
  async fetch(request, env) {
    const referer = request.headers.get('Referer');

    // Refererチェック
    if (!referer || !referer.includes('samplepdf.araidon.com')) {
      return new Response('403 Forbidden', { status: 403 });
    }

    // プロキシ処理...
  }
}

動作

  • PDF をブラウザで直接開く → ブロック
  • Workers経由でのアクセス → 許可

簡単な実装ですが、基本的なアクセス制御として有効です。

2.エッジキャッシュ

Workersでキャッシュを実装して、OCIへのリクエストを大幅に削減しました。

const cache = caches.default;
const cacheKey = new Request(url, request);

// キャッシュチェック
let response = await cache.match(cacheKey);

if (response) {
  // キャッシュHIT - エッジから即座に返す
  console.log('Cache HIT');
  return response;
}

// キャッシュMISS - OCIから取得
console.log('Cache MISS - fetching from OCI');
response = await fetch(backendUrl);
response = await fetch(backendUrl, {
    method: request.method,
    headers: {
          'User-Agent': request.headers.get('User-Agent') || 'Cloudflare-Workers',
    },
}

// キャッシュに保存(24時間)
const responseToCache = response.clone();
await cache.put(cacheKey, responseToCache);

return response;

※コードサンプルで実際にはもう少し複雑な処理を実施してます。

効果

  • 世界中のエッジでキャッシュ
  • 2回目以降のアクセスは超高速
  • OCIへのリクエストを大幅に削減(コスト削減!)

③:PAR活用

Object StorageのPAR(事前認証済みリクエスト)を活用しました。

PARとは?

  • Object Storageをプライベートに保持
  • 一時的なアクセスURLを発行
  • 有効期限や権限を細かく制御可能

nginx経由でプロキシ

Container Instances上のnginxで、PARを使ってObject Storageにプロキシしています。

location /pdf/ {
  proxy_pass https://objectstorage.ap-tokyo-1.oraclecloud.com/p/{PAR-TOKEN}/n/{namespace}/b/{bucket}/o/;
  proxy_set_header Host objectstorage.ap-tokyo-1.oraclecloud.com;
  proxy_ssl_server_name on;
}

PDFへの直接アクセスを防ぎ、nginx経由でのみ配信する仕組みです。

この構成の効果とコスト

1. エッジキャッシュでコスト削減

  • Workersで大半のリクエストをキャッシュ
  • OCIへのリクエストが大幅に削減
  • 2回目以降はエッジから即座に配信

2. Bandwidth Allianceについて

重要な注意点:今回の構成、Cloudfrare と Container Instances経由は 無償対象外です!

  • Cloudflare → Object Storage : 無料
  • Cloudflare → Container Instances : 対象外

今回の構成ではContainer Instancesを経由しているため、Bandwidth Allianceの対象外です。

ただし、OCIには月10TB無料枠(標準)があるので、小〜中規模のサイトなら問題ありません。

2. 実際のコスト

  • Workers: 無料枠内(月100,000リクエスト)
  • Egress: OCIの無料枠内(月10TB)
  • Container Instances: 約$10-15/月(常時起動の場合)

今回の構成、Cloudfrare と Container Instances経由は 無償対象外です!

  • Cloudflare → Object Storage : 無料
  • Cloudflare → Container Instances : 有償(Bandwidth Alliance 対象外)

ただし、OCIには月10TB無料枠(標準)があるので、小〜中規模のサイトなら実質無償です。

まとめ

CloudflareとOCIの組み合わせ、最高です!

OCIにCDNがないことは課題ではなく、Cloudflareとの協力関係によって、むしろ強力な構成を実現できると感じました。

今回作成したサンプルPDFビューアーは、技術書典の本の宣伝サイトとして実際に稼働中です。

みなさんもぜひ、CloudflareとOCIの組み合わせを試してみてください!

それでは良い Cloudflare × OCIライフを!

9
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?