Menulis ulang objek di Cloud Storage akan menyalin atau mengubah objek yang ada,
seperti memindahkannya ke berbagai lokasi, merotasi kunci enkripsinya, atau mengubah
kelas penyimpanannya. Bergantung pada ukuran objek dan parameter penulisan ulang, Cloud Storage dapat menyelesaikan operasi dalam satu panggilan atau menampilkan progres perantara dengan rewrite_token. Saat panggilan menampilkan rewrite_token, teruskan token tersebut ke permintaan berikutnya hingga penulisan ulang selesai.
Dokumen ini menunjukkan cara mengonfigurasi permintaan penulisan ulang dan mendorong loop penulisan ulang menggunakan helper rewrite_until_done atau loop manual di Library Klien Cloud untuk Rust. Jika Anda baru menggunakan library klien, lihat
Menggunakan Cloud Storage dengan Rust terlebih dahulu.
Sebelum memulai
Sebelum menjalankan kode dalam dokumen ini, selesaikan prasyarat berikut:
- Buat atau pilih projectGoogle Cloud dengan penagihan diaktifkan.
- Buat bucket Cloud Storage pengujian khusus di project Anda.
- Konfigurasikan Kredensial Default Aplikasi untuk lingkungan Anda.
- Berikan peran Identity and Access Management (IAM) kepada akun utama Anda dengan izin untuk
membaca, menulis, dan menghapus objek di bucket, seperti Storage Admin
(
roles/storage.admin).
Dependensi
Tambahkan library klien Cloud Storage dan crate pendukung ke file Cargo.toml Anda:
cargo add google-cloud-storage google-cloud-gax anyhow bytes
cargo add tokio --features macros,rt-multi-thread
Menyiapkan klien dan permintaan penulisan ulang
Helper otomatis dan loop manual dimulai dari klien StorageControl dan builder permintaan RewriteObject yang dikonfigurasi. Di dalam cakupan yang
menerima bucket_name dalam format
projects/_/buckets/BUCKET_ID, selesaikan langkah-langkah
berikut:
Lakukan inisialisasi klien
StorageControldengan kebijakan percobaan ulang. Sebaiknya berikan waktu minimal 30 detik per permintaan. Contoh ini menggunakanRetryableErrorsdengan batas 5 percobaan dan tanpa batas waktu keseluruhan per operasi:Buat builder permintaan
rewrite_object, tandai permintaan sebagai idempoten agar klien dapat mencoba lagi error sementara, dan tetapkan nama bucket serta objek sumber dan tujuan:Opsional: Batasi jumlah maksimum byte yang ditulis ulang per panggilan sehingga setiap permintaan menampilkan progres lebih cepat, bukan memerlukan waktu tunggu permintaan yang lebih lama. Contoh ini menetapkan batas kecil 1 MiB untuk memaksa beberapa iterasi; gunakan nilai yang lebih besar dalam produksi:
Opsional: Tentukan metadata objek tujuan, seperti mengubah kelas penyimpanan menjadi Nearline (
NEARLINE):
Menjalankan loop penulisan ulang secara otomatis
Untuk sebagian besar kasus penggunaan, masukkan trait RewriteObjectExt ke dalam cakupan dan panggil
rewrite_until_done pada builder permintaan. Helper ini mengelola
rewrite_token di seluruh iterasi dan me-resolve ke metadata Object
tujuan setelah penulisan ulang selesai:
Menjalankan loop penulisan ulang secara manual
Jika Anda perlu mencatat jumlah byte perantara, progres checkpoint, atau melanjutkan penulisan ulang dari proses lain, jalankan loop penulisan ulang secara manual:
Tentukan fungsi bantuan yang mengirim satu permintaan
RewriteObject, mencatat progres, dan menampilkan metadataObjectyang telah selesai saatresp.doneadalahtrueataurewrite_tokenberikutnya:Panggil helper dalam loop, dengan meng-clone builder permintaan pada setiap iterasi dan meneruskan token yang ditampilkan ke
set_rewrite_tokensetiap kalimake_one_requestmenampilkanRewriteProgress::Incomplete:
Kode lengkap
Contoh berikut mengupload objek sumber 3 MiB dan menulisnya ulang ke kelas penyimpanan Nearline dalam penambahan 1 MiB menggunakan loop manual. Setelah penulisan ulang selesai, contoh akan menghapus objek pengujian dan bucket pengujian kosong:
Outputnya mirip dengan berikut ini, yang menunjukkan progres di tiga iterasi dan metadata objek tujuan:
PROGRESS: total_bytes_rewritten=1048576; object_size=3145728
PROGRESS: total_bytes_rewritten=2097152; object_size=3145728
DONE: total_bytes_rewritten=3145728; object_size=3145728
dest_object=Object { name: "rewrite-object-clone", ... }
Pembersihan
Jika sampel keluar lebih awal atau Anda menjalankan cuplikan individual tanpa helper pembersihan, hapus semua objek pengujian yang tersisa dan hapus bucket pengujian setelah selesai agar Anda tidak dikenai biaya berkelanjutan pada akun Google Cloud Anda.