מדריך קלאודפלייר בעברית

פרק 12

Cloudflare R2 ואחסון אובייקטים

שירות Cloudflare R2 מאפשר למפתחים לאחסן כמויות גדולות של נתונים לא מובנים ללא עמלות רוחב הפס היקרות של תעבורה יוצאת (egress bandwidth fees), הנהוגות בשירותי אחסון ענן רגילים. השירות מציע תאימות לממשק S3 וביטול מלא של דמי תעבורה יוצאת (Zero Egress).

משלמים על נפח האחסון ועל פעולות הגישה (קריאה וכתיבה). לא משלמים על תעבורת הורדה של נתונים לגולש.

מודלמה מחייבים
אחסון S3 קלאסינפח, פעולות API, ותעבורה יוצאת לכל GB
R2נפח ופעולות API בלבד. אין דמי תעבורה יוצאת

#לפני שמתחילים

לפי התיעוד הרשמי (עודכן ב-21 באפריל 2026), כדי ליצור דלי ראשון ולשמור אובייקטים צריך חשבון Cloudflare עם מנוי R2. אם אין לכם מנוי:

  1. נכנסים ל-Cloudflare Dashboard.
  2. בוחרים Storage & databases > R2 > Overview.
  3. משלימים את תהליך ה-checkout כדי להוסיף מנוי R2 לחשבון.

R2 חינמי להתחלה, עם שימוש חודשי כלול ללא תשלום. החיוב על השימוש מתבצע על בסיס חודשי. פרטים מדויקים מופיעים בעמוד Pricing הרשמי.

#איך ניגשים ל-R2

R2 תומך בכמה שיטות גישה, כך שאפשר לבחור את השיטה המתאימה ביותר לפי הצורך:

שיטהמתי להשתמש
Workers APIבונים אפליקציה על Cloudflare Workers שצריכה לקרוא או לכתוב מ-R2
S3רוצים להשתמש ב-SDK תואם S3 כדי לתקשר עם R2 באפליקציות קיימות
כלי CLIרוצים להעלות, להוריד או לנהל אובייקטים מהטרמינל
Dashboardרוצים לצפות ולנהל במהירות דליים ואובייקטים בדפדפן

אם בונים על Workers, מתחילים מ-Workers API. אם יש כבר קוד קיים עם S3, נשארים בנתיב S3 ומעדכנים endpoint ומפתחות. אם רוצים להעלות, להוריד או לנהל אובייקטים מהטרמינל, משתמשים בכלי CLI. לצפייה ולניהול מהיר בדפדפן, משתמשים ב-Dashboard.

#יכולות מרכזיות

  • תאימות ל-S3 API: אפשר לעבוד עם SDK מוכר (למשל AWS SDK ו-Boto3) ועם כלי שורת פקודה תואמים, כגון AWS CLI, rclone ו-Cyberduck.
  • דליים ציבוריים ודומיינים מותאמים: אפשר לחבר דלי לדומיין מותאם אישית (למשל cdn.example.com) עם תעודת SSL, הגנת WAF ומטמון CDN בקצה.
  • רמזי מיקום (Location Hints): בחירת אזור מועדף (צפון אמריקה, אירופה, אסיה) כדי לקרב את האחסון למשתמשים.
  • כללי CORS: מאפשרים העלאה ישירה מהדפדפן ל-R2 בלי להעביר את הקובץ דרך שרת ה-Backend.
  • אסימונים מוגבלים לדלי (Bucket-Scoped Tokens): מפתחות עם הרשאות קריאה או כתיבה לדלי אחד בלבד.

#מלכודות נפוצות

  • בלי מנוי R2 אי אפשר להתחיל. גם כשיש שימוש חינמי כלול, חובה להשלים checkout בלוח הבקרה.
  • החיוב מתבצע חודשית לפי שימוש. אחרי ניצול המכסה הכלולה, השימוש כרוך בתשלום.
  • ב-Workers עדיף להשתמש ב-Binding. לא שמים מפתחות S3 בקוד אם אפשר לגשת לדלי ישירות דרך env.
  • כלי CLI וערכות SDK חיצוניות עובדים מול ממשק S3 (באמצעות endpoint ומפתחות). זהו מנגנון נפרד מ-Workers API.
  • לוח הבקרה (Dashboard) מתאים לצפייה ולניהול מהיר. לוגיקת אפליקציה מורכבת שייכת ל-Workers או ל-SDK.

#עבודה עם R2 מתוך Cloudflare Workers

זו הדרך היעילה ביותר כשהקוד רץ על Workers. אין צורך בספריות צד שלישי או במפתחות סודיים בקוד.

#הגדרה בקובץ wrangler.jsonc

{
  "r2_buckets": [
    {
      "binding": "STORAGE",
      "bucket_name": "my-app-media"
    }
  ]
}

#קוד Worker לקריאה וכתיבה של קבצים

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);
    const key = url.pathname.slice(1);

    // העלאת קובץ (PUT)
    if (request.method === "PUT") {
      await env.STORAGE.put(key, request.body, {
        httpMetadata: { contentType: request.headers.get("content-type") || "application/octet-stream" },
      });
      return new Response(`הקובץ ${key} נשמר בהצלחה ב-R2`, { status: 201 });
    }

    // קריאת קובץ (GET)
    if (request.method === "GET") {
      const object = await env.STORAGE.get(key);
      if (!object) return new Response("הקובץ לא נמצא", { status: 404 });

      const headers = new Headers();
      object.writeHttpMetadata(headers);
      headers.set("etag", object.httpEtag);

      return new Response(object.body, { headers });
    }

    return new Response("Method Not Allowed", { status: 405 });
  },
};

#עבודה עם AWS SDK v3 ב-Node.js

כשיש אפליקציה קיימת מחוץ ל-Workers, מתחברים ל-R2 עם SDK תואם S3:

import { S3Client, PutObjectCommand, GetObjectCommand } from "@aws-sdk/client-s3";

const s3 = new S3Client({
  region: "auto",
  endpoint: `https://${process.env.CLOUDFLARE_ACCOUNT_ID}.r2.cloudflarestorage.com`,
  credentials: {
    accessKeyId: process.env.R2_ACCESS_KEY_ID!,
    secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
  },
});

// העלאת קובץ לדלי R2
await s3.send(
  new PutObjectCommand({
    Bucket: "my-app-media",
    Key: "images/logo.png",
    Body: fileBuffer,
    ContentType: "image/png",
  })
);

#ניתוח נתונים ואגמי מידע (R2 Data Catalog)

לארכיטקטורות Data Lake ועיבוד נתונים בקנה מידה גדול, Cloudflare מציעה את R2 Data Catalog: קטלוג מנוהל בפורמט Apache Iceberg.

אפשר להריץ שאילתות SQL על קובצי Parquet ב-R2 דרך מנועים כמו DuckDB, Apache Spark, Snowflake ו-Trino, בלי להוציא את הנתונים ובלי לשלם על תעבורה יוצאת.

בפרק הבא נסקור את לוח הבקרה של Cloudflare, מנוע החוקים (Rules), מערכת הניטור והאנליטיקה וניהול אסימוני API.