R2
Apa itu ini
Bayangkan sebuah gudang online yang sangat besar tempat kamu menaruh kotak-kotak berisi file dan mengambilnya lagi nanti. R2 adalah object storage (penyimpanan objek) milik Cloudflare — gudang itu — tempat menaruh file: gambar, video, backup, unggahan pengguna, hasil build. R2 menggunakan (Application Programming Interface — kumpulan perintah yang dipakai alat untuk berkomunikasi dengannya) yang sama dengan Amazon S3, jadi sebagian besar alat dan SDK (Software Development Kit — pustaka kode siap pakai) untuk S3 bisa langsung dipakai tanpa perubahan. Perbedaan utamanya ada pada harga: R2 mengenakan biaya untuk penyimpanan dan operasi, tetapi tanpa biaya egress (tanpa biaya untuk data yang keluar dari gudang), sehingga menyajikan data keluar menjadi gratis.
Kelebihan
- Tanpa biaya egress — penghematan besar untuk aplikasi yang berat media atau berat unduhan.
- API yang kompatibel dengan S3, jadi tooling dan pustaka yang sudah ada langsung berfungsi.
- Bisa di-bind langsung ke Worker untuk baca dan tulis tanpa kredensial di dalam kode.
- Bisa berada di belakang CDN (Content Delivery Network — jaringan server di seluruh dunia yang menyimpan salinan file dekat dengan setiap pengunjung) milik Cloudflare untuk pengiriman yang cepat dan ter-cache.
- Bisa berkembang untuk objek besar dan bucket besar tanpa perlu provisioning.
Trade-off
- Ini object storage, bukan filesystem atau — tidak bisa melakukan query di dalam file.
- Operasi (PUT/GET/LIST) dikenakan biaya, jadi pola akses yang sering-sering akan bertambah biayanya.
- Konsistensi kuat dan fitur-fiturnya berbeda dalam beberapa detail dari S3; periksa kasus-kasus khususnya.
- Untuk nilai-nilai kecil yang sering berubah, KV (key-value store, seperti kamus raksasa) atau D1 (database ) lebih cocok.
Kapan menggunakannya
Gunakan R2 untuk unggahan pengguna, file yang dihasilkan, aset statis besar, ekspor data, dan backup — terutama di mana pun biaya bandwidth di S3 akan terasa menyakitkan.
Cocok untuk vibe coding
R2 cocok dengan pembangunan yang diarahkan AI karena binding menghilangkan ritual kredensial yang biasa — langsung menulis ke env.BUCKET. Beri tahu agent apakah file bersifat publik (disajikan lewat Worker atau kustom) atau privat (akses bertanda tangan/signed), supaya ia menyusun pengiriman dengan benar. Contoh berikut mem-bind sebuah bucket dan mengunggah file dari (Command Line Interface — antarmuka baris perintah).
# wrangler.toml
[[r2_buckets]]
binding = "BUCKET"
bucket_name = "uploads"
npx wrangler r2 bucket create uploads
npx wrangler r2 object put uploads/logo.png --file ./logo.png