פרק 12
Cloudflare R2 ואחסון אובייקטים
שירות Cloudflare R2 מאפשר למפתחים לאחסן כמויות גדולות של נתונים לא מובנים ללא עמלות רוחב הפס היקרות של תעבורה יוצאת (egress bandwidth fees), הנהוגות בשירותי אחסון ענן רגילים. השירות מציע תאימות לממשק S3 וביטול מלא של דמי תעבורה יוצאת (Zero Egress).
משלמים על נפח האחסון ועל פעולות הגישה (קריאה וכתיבה). לא משלמים על תעבורת הורדה של נתונים לגולש.
| מודל | מה מחייבים |
|---|---|
אחסון S3 קלאסי | נפח, פעולות API, ותעבורה יוצאת לכל GB |
R2 | נפח ופעולות API בלבד. אין דמי תעבורה יוצאת |
#לפני שמתחילים
לפי התיעוד הרשמי (עודכן ב-21 באפריל 2026), כדי ליצור דלי ראשון ולשמור אובייקטים צריך חשבון Cloudflare עם מנוי R2. אם אין לכם מנוי:
- נכנסים ל-
Cloudflare Dashboard. - בוחרים
Storage & databases > R2 > Overview. - משלימים את תהליך ה-
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.