👋 Chào mừng đến với Blog - Thành Nam Nguyễn

Cloudflare R2 Storage – Giải pháp lưu trữ không phí egress dành cho developer

Cloudflare R2 Storage – Giải pháp lưu trữ không phí egress dành cho developer

Web Development

1. Cloudflare R2 Storage là gì?

Cloudflare R2 là dịch vụ object storage do Cloudflare phát triển, được thiết kế như một giải pháp thay thế cho Amazon S3, nhưng không tính phí egress (băng thông tải dữ liệu ra).

R2 được xây dựng trên WorkersDurable Objects, giúp các developer truy cập và lưu trữ dữ liệu quy mô lớn với độ trễ thấp, bảo mật cao và chi phí cực kỳ cạnh tranh.

Điểm khác biệt chính:

  • Không phí egress: Tải dữ liệu ra (ra khỏi R2) hoàn toàn miễn phí.

  • Chi phí lưu trữ thấp

  • Tích hợp mượt với Cloudflare Workers: Có thể xử lý dữ liệu ngay tại edge mà không cần server trung gian.

  • API tương thích với S3: Dễ dàng chuyển đổi ứng dụng đang dùng S3 sang R2 mà không phải viết lại code.

Bản free cho chúng ta tới tận 10GB lưu trữ mỗi tháng, thay vì tính phí egress, họ tính dựa theo số lượng đọc (Class B Operations) và ghi (Class A Operations) mỗi tháng. Xem chi tiết tại đây

2. Kiến trúc tổng quan của R2

Cloudflare R2 means removing ridiculous fees

R2 được xây dựng trên nền tảng Cloudflare Edge Network – một trong những mạng phân phối dữ liệu lớn nhất thế giới, với hơn 300+ data centers toàn cầu.
Khi bạn lưu trữ dữ liệu lên R2, Cloudflare sẽ:

  • Phân bổ dữ liệu lên hệ thống lưu trữ phân tán.

  • Sao chép (replicate) dữ liệu giữa nhiều vùng để đảm bảo độ bền.

  • Cung cấp truy cập trực tiếp thông qua API tương thích với AWS S3 SDK.

Vì nằm trong cùng hệ sinh thái với WorkersPages, R2 có thể kết hợp trực tiếp để xử lý file, resize ảnh, hoặc tạo CDN động ngay tại edge mà không cần gọi API từ bên thứ ba.

3. Cách sử dụng Cloudflare R2

3.1. Sử dụng bằng API

Cloudflare R2 cung cấp giao diện S3-compatible API, nghĩa là bạn có thể dùng bất kỳ SDK nào hỗ trợ Amazon S3 để kết nối với R2.

Ví dụ: Kết nối R2 bằng Node.js (AWS SDK v3)

Trước hết, tạo Access Key từ Cloudflare Dashboard → R2 → Manage API Tokens.

npm install @aws-sdk/client-s3

Sau đó cấu hình SDK:

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

const client = new S3Client({
  region: "auto",
  endpoint: "https://<your-account-id>.r2.cloudflarestorage.com",
  credentials: {
    accessKeyId: "R2_ACCESS_KEY",
    secretAccessKey: "R2_SECRET_KEY"
  }
});

const upload = async () => {
  const command = new PutObjectCommand({
    Bucket: "my-r2-bucket",
    Key: "hello.txt",
    Body: "Hello Cloudflare R2!"
  });

  await client.send(command);
  console.log("File uploaded successfully!");
};

upload();

Tương tự, bạn có thể dùng GetObjectCommand, ListObjectsCommand, hoặc DeleteObjectCommand y hệt như khi làm việc với Amazon S3.

👉 Toàn bộ tài liệu hướng dẫn bạn có thể tham khảo tại Cloudflare R2

3.2. Sử dụng bằng giao diện trên dashboard

Truy cập vào dashboard của Cloudlfare và vào mục Storage & databases → R2 để tiến hành tạo bucket cũng như upload.

4. Kết hợp R2 với Cloudflare Workers

Điểm mạnh nhất của R2 là khả năng tích hợp trực tiếp với Cloudflare Workers – giúp bạn xử lý dữ liệu tại edge mà không cần backend truyền thống.

Ví dụ dưới đây minh họa cách đọc file từ R2 trong Worker:

export default {
  async fetch(request, env) {
    const object = await env.MY_BUCKET.get("hello.txt");
    if (!object) {
      return new Response("File not found!", { status: 404 });
    }
    return new Response(object.body);
  },
};

Ở đây, env.MY_BUCKET được cấu hình trong wrangler.toml như sau:

[[r2_buckets]]
binding = "MY_BUCKET"
bucket_name = "my-r2-bucket"

Khi deploy, Worker sẽ có quyền truy cập trực tiếp vào bucket mà không cần gọi API qua mạng – giúp tốc độ đọc/ghi nhanh hơn rất nhiều.

5. So sánh Cloudflare R2 với Amazon S3

Tiêu chíCloudflare R2Amazon S3
Phí egressMiễn phíTính phí (khá cao)
APITương thích S3Native
Tích hợp EdgeCó (Workers)Không trực tiếp
Tốc độ truy cậpCực nhanh tại EdgePhụ thuộc region
Dễ dàng di chuyển dữ liệu
Mục tiêu chínhGiảm chi phí, tăng hiệu năngLưu trữ đám mây truyền thống

R2 lý tưởng cho developer muốn tối ưu chi phí phân phối file tĩnh (ảnh, video, dữ liệu JSON…) hoặc làm backend lưu trữ cho ứng dụng chạy trên Cloudflare Workers / Pages.

6. Một số trường hợp sử dụng thực tế

  • Static file hosting: Lưu ảnh, video, script cho web hoặc ứng dụng di động.

  • Backup & archival: Lưu trữ dữ liệu lâu dài với chi phí thấp.

  • Serverless backend: Kết hợp với Workers để tạo REST API cho file upload/download.

  • AI & ML storage: Lưu dataset cho các ứng dụng AI inferencing chạy ở edge.

7. Giám sát và bảo mật

Cloudflare cung cấp các tính năng quản lý truy cập chi tiết cho R2 thông qua Access PoliciesAPI Tokens.

Bạn có thể:

  • Giới hạn quyền read/write theo bucket hoặc theo prefix.

  • Theo dõi log truy cập qua Cloudflare Analytics.

  • Dễ dàng tích hợp với Zero Trust Access để bảo vệ endpoint nội bộ.

Tóm lại

Cloudflare R2 Storage là cách giúp dev giảm chi phí, loại bỏ egress, và tăng tốc phân phối nội dung toàn cầu. Đây là giải pháp tuyệt vời để xây dựng backend serverless, hệ thống phân phối file, hoặc nền tảng dữ liệu lớn với chi phí tối ưu và hiệu năng vượt trội.

Tài liệu tham khảo