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

פרק 12

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

שירות Cloudflare R2 הוא אחסון אובייקטים מבוזר, תואם לממשק 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 או בלוח הבקרה.

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

  • תאימות ל-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.
  • לוח הבקרה מתאים לצפייה ולניהול מהיר. לוגיקת אפליקציה שייכת ל-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 ועיבוד נתונים בקנה מידה גדול, קלאודפלייר מציעה את R2 Data Catalog: קטלוג מנוהל בפורמט Apache Iceberg.

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

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