Storage Transfer Service dapat digunakan untuk mentransfer data dalam jumlah besar antar-bucket Cloud Storage, baik dalam project Google Cloud yang sama, maupun antar-project yang berbeda.
Migrasi bucket berguna dalam sejumlah skenario. Lokasi ini dapat digunakan untuk menggabungkan data dari project yang terpisah, memindahkan data ke lokasi cadangan, atau mengubah lokasi data Anda.
Kapan menggunakan Storage Transfer Service
Google Cloud menawarkan beberapa opsi untuk mentransfer data antar-bucket Cloud Storage. Sebaiknya ikuti panduan berikut:
Mentransfer kurang dari 1 TB: Gunakan
gsutil
ataugcloud
. Untuk mengetahui petunjuknya, lihat Memindahkan dan mengganti nama bucket.Mentransfer lebih dari 1 TB: Gunakan Storage Transfer Service. Storage Transfer Service adalah opsi transfer terkelola yang memberikan keamanan, keandalan, dan performa siap pakai. Dengan tindakan ini, Anda tidak perlu mengoptimalkan dan mengelola skrip, serta menangani percobaan ulang.
Panduan ini membahas praktik terbaik saat mentransfer data antar-bucket Cloud Storage menggunakan Storage Transfer Service.
Menentukan strategi transfer
Tampilan strategi transfer Anda bergantung pada kompleksitas situasi Anda. Pastikan untuk menyertakan pertimbangan berikut dalam rencana Anda.
Pilih nama bucket
Untuk memindahkan data ke bucket penyimpanan dengan lokasi yang berbeda, pilih salah satu pendekatan berikut:
- Nama bucket baru. Update aplikasi Anda agar mengarah ke bucket penyimpanan dengan nama yang berbeda.
- Pertahankan nama bucket. Ganti bucket penyimpanan Anda dengan tetap menggunakan nama saat ini. Artinya, Anda tidak perlu mengupdate aplikasi.
Dalam kedua kasus tersebut, Anda harus merencanakan periode nonaktif, dan memberi tahu pengguna yang sesuai bahwa periode nonaktif akan segera terjadi. Tinjau penjelasan berikut untuk memahami pilihan mana yang terbaik bagi Anda.
Nama bucket baru
Dengan nama baru untuk bucket, Anda harus mengupdate semua kode dan layanan yang menggunakan bucket Anda saat ini. Cara melakukannya bergantung pada cara aplikasi dibangun dan di-deploy.
Untuk penyiapan tertentu, pendekatan ini mungkin memiliki periode nonaktif yang lebih sedikit, tetapi memerlukan lebih banyak upaya untuk memastikan transisi yang lancar. Tahap ini melibatkan langkah-langkah berikut:
- Menyalin data Anda ke bucket penyimpanan baru.
- Memulai periode nonaktif Anda.
- Mengupdate aplikasi agar mengarah ke bucket baru.
- Memverifikasi bahwa semuanya berfungsi seperti yang diharapkan, serta bahwa semua sistem dan akun yang relevan memiliki akses ke bucket.
- Menghapus bucket asli.
- Mengakhiri periode nonaktif Anda.
Pertahankan nama bucket
Gunakan pendekatan ini jika Anda memilih untuk tidak mengubah kode agar mengarah ke nama bucket baru. Tahap ini melibatkan langkah-langkah berikut:
- Menyalin data Anda ke bucket penyimpanan sementara.
- Memulai periode nonaktif Anda.
- Menghapus bucket asli.
- Membuat bucket baru dengan nama yang sama seperti bucket asli.
- Menyalin data ke bucket baru dari bucket sementara.
- Menghapus bucket sementara.
- Memverifikasi bahwa semuanya berfungsi seperti yang diharapkan, serta bahwa semua sistem dan akun yang relevan memiliki akses ke bucket.
- Mengakhiri periode nonaktif Anda.
Meminimalkan periode nonaktif
Storage Transfer Service tidak mengunci pembacaan atau penulisan pada bucket sumber atau tujuan selama proses transfer.
Jika memilih untuk mengunci pembacaan/penulisan secara manual di bucket, Anda dapat meminimalkan periode nonaktif dengan mentransfer data dalam dua langkah: seed dan sinkronisasi.
Transfer seed: Melakukan transfer massal tanpa mengunci operasi baca/tulis pada sumber.
Transfer sinkronisasi: Setelah operasi pertama selesai, kunci baca/tulis di bucket sumber dan lakukan transfer lagi. Transfer Storage Transfer Service bersifat inkremental secara default, sehingga transfer kedua ini hanya mentransfer data yang berubah selama transfer seed.
Mengoptimalkan kecepatan transfer
Saat memperkirakan waktu yang diperlukan untuk tugas transfer, pertimbangkan kemungkinan bottleneck. Misalnya, jika sumber memiliki miliaran file kecil, kecepatan transfer Anda akan terikat QPS. Jika ukuran objek besar, bandwidth mungkin menjadi bottleneck.
Batas bandwidth ditetapkan pada tingkat region dan dialokasikan secara adil di semua project. Jika tersedia bandwidth yang cukup, Storage Transfer Service dapat menyelesaikan sekitar 1.000 tugas per tugas transfer per detik. Dalam hal ini, Anda dapat mempercepat transfer dengan membagi tugas menjadi beberapa tugas transfer kecil, misalnya menggunakan sertakan dan kecualikan awalan untuk mentransfer file tertentu.
Jika lokasi, kelas penyimpanan, dan kunci enkripsi sama, Storage Transfer Service tidak membuat salinan baru byte; melainkan membuat entri metadata baru yang mengarah ke blob sumber. Akibatnya, salinan class dan lokasi yang sama dari korpus besar diselesaikan dengan sangat cepat dan hanya terikat QPS.
Penghapusan juga merupakan operasi khusus metadata. Untuk transfer ini, memparalelkan transfer dengan membaginya menjadi beberapa tugas kecil dapat meningkatkan kecepatan.
Mempertahankan metadata
Metadata objek berikut dipertahankan saat mentransfer data antara bucket Cloud Storage dengan Storage Transfer Service:
- Metadata kustom buatan pengguna.
- Kolom metadata kunci tetap Cloud Storage, seperti Cache-Control, Content-Disposition, Content-Type, dan Custom-Time.
- Ukuran objek.
- Nomor generasi dipertahankan
sebagai kolom metadata kustom dengan kunci
x-goog-reserved-source-generation
, yang dapat diedit atau dihapus nanti.
Secara opsional, kolom metadata berikut dapat dipertahankan saat mentransfer menggunakan API:
- ACL (
acl
) - Kelas penyimpanan (
storageClass
) - CMEK (
kmsKey
) - Penangguhan sementara (
temporaryHold
) - Waktu pembuatan objek (
customTime
)
Lihat referensi API TransferSpec
untuk detail selengkapnya.
Kolom metadata berikut tidak dipertahankan:
- Waktu terakhir diperbarui (
updated
) etag
componentCount
Jika dipertahankan, waktu pembuatan objek akan disimpan sebagai kolom kustom,
customTime
. Waktu updated
objek direset saat transfer, sehingga
waktu objek yang dihabiskan di kelas penyimpanannya juga direset. Artinya, objek dalam Coldline Storage setelah transfer harus ada lagi selama 90 hari di tujuan untuk menghindari biaya penghapusan lebih awal.
Anda dapat menerapkan kebijakan siklus proses berbasis createTime
menggunakan customTime
. Nilai customTime
yang ada akan ditimpa.
Untuk detail selengkapnya tentang hal yang dipertahankan dan yang tidak dipertahankan, lihat Penyimpanan metadata.
Menangani objek berversi
Jika ingin mentransfer semua versi objek penyimpanan dan bukan hanya yang terbaru, Anda harus menggunakan CLI gcloud
atau REST API untuk mentransfer data, yang dikombinasikan dengan fitur manifes Storage Transfer Service.
Untuk mentransfer semua versi objek:
Buat daftar objek bucket dan salin ke dalam file JSON:
gcloud storage ls --all-versions --recursive --json [SOURCE_BUCKET] > object-listing.json
Perintah ini biasanya mencantumkan sekitar 1.000 objek per detik.
Bagi file JSON menjadi dua file CSV, satu file dengan versi lama, dan satu lagi dengan versi aktif:
jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted") | not)) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > live-object-manifest.csv jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted"))) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > non-current-object-manifest.csv
Aktifkan pembuatan versi objek di bucket tujuan.
Transfer versi lama terlebih dahulu dengan meneruskan file manifes
non-current-object-manifest.csv
sebagai nilai kolomtransferManifest
.Kemudian, transfer versi aktif dengan cara yang sama, dengan menentukan
live-object-manifest.csv
sebagai file manifes.
Mengonfigurasi opsi transfer
Beberapa opsi yang tersedia bagi Anda saat menyiapkan transfer adalah sebagai berikut:
Logging: Cloud Logging menyediakan log mendetail untuk setiap objek, sehingga Anda dapat memverifikasi status transfer dan melakukan pemeriksaan integritas data tambahan.
Pemfilteran: Anda dapat menggunakan awalan sertakan dan mengecualikan untuk membatasi objek yang dioperasikan oleh Storage Transfer Service. Opsi ini dapat digunakan untuk membagi transfer menjadi beberapa tugas transfer agar dapat berjalan secara paralel. Lihat Mengoptimalkan kecepatan transfer untuk mengetahui informasi selengkapnya.
Opsi transfer: Anda dapat mengonfigurasi transfer untuk menimpa item yang sudah ada di bucket tujuan; untuk menghapus objek di tujuan yang tidak ada di set transfer; atau untuk menghapus objek yang ditransfer dari sumbernya.
Mentransfer data Anda
Setelah menentukan strategi transfer, Anda dapat melakukan transfer itu sendiri.
Buat bucket baru
Sebelum memulai transfer, buat bucket penyimpanan. Lihat location_considerations untuk mendapatkan bantuan dalam memilih lokasi bucket yang sesuai.
Anda mungkin ingin menyalin beberapa metadata bucket saat membuat bucket baru. Baca artikel Mendapatkan metadata bucket untuk mempelajari cara menampilkan metadata bucket sumber, sehingga Anda dapat menerapkan setelan yang sama ke bucket baru.
Menyalin objek ke bucket baru
Anda dapat menyalin objek dari bucket sumber ke bucket baru menggunakan Google Cloud Console, gcloud
CLI, REST API, atau library klien.
Pendekatan yang Anda pilih bergantung pada strategi transfer Anda.
Petunjuk berikut ditujukan untuk kasus penggunaan dasar mentransfer objek dari satu bucket ke bucket lainnya, dan harus dimodifikasi agar sesuai dengan kebutuhan Anda.
Jangan sertakan informasi sensitif seperti informasi identitas pribadi (PII) atau data keamanan dalam nama tugas transfer Anda. Nama resource dapat diterapkan ke nama resource Google Cloud lainnya dan dapat diekspos ke sistem internal Google di luar project Anda.
Konsol Google Cloud
Gunakan Cloud Storage Transfer Service dari dalam Konsol Google Cloud:
Buka halaman Transfer di konsol Google Cloud.
- Klik Buat tugas transfer.
Ikuti panduan langkah demi langkah, dengan mengklik Langkah berikutnya saat Anda menyelesaikan setiap langkah:
Memulai: Gunakan Google Cloud Storage sebagai Source Type dan Destination Type.
Pilih sumber: Masukkan nama bucket yang diinginkan secara langsung, atau klik Browse untuk menemukan dan memilih bucket yang diinginkan.
Pilih tujuan: Masukkan nama bucket yang diinginkan secara langsung, atau klik Jelajahi untuk menemukan dan memilih bucket yang Anda inginkan.
Pilih setelan: Pilih opsi Hapus file dari sumber setelah file ditransfer.
Opsi penjadwalan: Anda dapat mengabaikan bagian ini.
Setelah menyelesaikan panduan langkah demi langkah, klik Buat.
Tindakan ini akan memulai proses penyalinan objek dari bucket lama ke bucket baru. Proses ini mungkin memakan waktu. Namun, setelah mengklik Buat, Anda dapat keluar dari konsol Google Cloud.
Untuk melihat progres transfer:
Buka halaman Transfer di konsol Google Cloud.
Untuk mempelajari cara mendapatkan informasi error mendetail tentang operasi Storage Transfer Service yang gagal di Konsol Google Cloud, lihat Pemecahan masalah.
Setelah transfer selesai, Anda tidak perlu melakukan apa pun untuk menghapus objek dari bucket lama jika telah memilih kotak centang Hapus objek sumber setelah transfer selesai selama penyiapan. Namun, Anda mungkin juga ingin menghapus bucket lama, yang harus dilakukan secara terpisah.
gcloud CLI
Menginstal gcloud CLI
Instal alat command line gcloud jika Anda belum melakukannya.
Kemudian, panggil gcloud init
untuk menginisialisasi alat tersebut dan menentukan project ID dan akun pengguna Anda. Baca bagian Melakukan Inisialisasi Cloud SDK untuk mengetahui detail selengkapnya.
gcloud init
Tambahkan akun layanan ke folder tujuan
Anda harus menambahkan akun layanan Storage Transfer Service ke bucket
tujuan sebelum membuat transfer. Untuk melakukannya, gunakan gsutil iam ch
:
gsutil iam ch serviceAccount:project-12345678@storage-transfer-service.iam.gserviceaccount.com:roles/storage.admin gs://bucket_name
Untuk petunjuk menggunakan konsol Google Cloud atau API, lihat Menggunakan izin IAM dalam dokumentasi Cloud Storage.
Membuat tugas transfer
Untuk membuat tugas transfer baru, gunakan perintah gcloud transfer jobs create
.
Membuat tugas baru akan memulai transfer yang ditentukan, kecuali jika jadwal atau --do-not-run
ditentukan.
gcloud transfer jobs create SOURCE DESTINATION
Dengan keterangan:
SOURCE adalah sumber data untuk transfer ini, dalam format
gs://BUCKET_NAME
.DESTINATION adalah bucket baru Anda, dalam format
gs://BUCKET_NAME
.
Opsi tambahan mencakup:
Informasi pekerjaan: Anda dapat menentukan
--name
dan--description
.Jadwal: Tentukan
--schedule-starts
,--schedule-repeats-every
, dan--schedule-repeats-until
, atau--do-not-run
.Kondisi objek: Gunakan kondisi untuk menentukan objek mana yang ditransfer. Situasi tersebut mencakup
--include-prefixes
dan--exclude-prefixes
, serta kondisi berbasis waktu di--include-modified-[before | after]-[absolute | relative]
.Opsi transfer: Tentukan apakah akan menimpa file tujuan (
--overwrite-when=different
ataualways
) dan apakah akan menghapus file tertentu selama atau setelah transfer (--delete-from=destination-if-unique
atausource-after-transfer
); tentukan metadata [nilai metadata yang perlu dipertahankan]; dan tetapkan kelas penyimpanan secara opsional pada objek yang ditransfer (--custom-storage-class
).Notifications: Konfigurasikan notifikasi Pub/Sub untuk transfer dengan
--notification-pubsub-topic
,--notification-event-types
, dan--notification-payload-format
.
Untuk melihat semua opsi, jalankan gcloud transfer jobs create --help
.
Misalnya, untuk mentransfer semua objek dengan awalan folder1
:
gcloud transfer jobs create gs://old-bucket gs://new-bucket \
--include-prefixes="folder1/"
REST
Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari satu bucket Cloud Storage ke bucket lainnya. Misalnya, Anda dapat memindahkan data ke bucket di lokasi lain.
Minta menggunakan transferJobs create:
POST https://storagetransfer.googleapis.com/v1/transferJobs { "description": "YOUR DESCRIPTION", "status": "ENABLED", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2025 }, "startTimeOfDay": { "hours": 1, "minutes": 1 }, "scheduleEndDate": { "day": 1, "month": 1, "year": 2025 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME" }, "gcsDataSink": { "bucketName": "GCS_SINK_NAME" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } }
Respons:
200 OK { "transferJob": [ { "creationTime": "2015-01-01T01:01:00.000000000Z", "description": "YOUR DESCRIPTION", "name": "transferJobs/JOB_ID", "status": "ENABLED", "lastModificationTime": "2015-01-01T01:01:00.000000000Z", "projectId": "PROJECT_ID", "schedule": { "scheduleStartDate": { "day": 1, "month": 1, "year": 2015 }, "startTimeOfDay": { "hours": 1, "minutes": 1 } }, "transferSpec": { "gcsDataSource": { "bucketName": "GCS_SOURCE_NAME", }, "gcsDataSink": { "bucketName": "GCS_NEARLINE_SINK_NAME" }, "objectConditions": { "minTimeElapsedSinceLastModification": "2592000.000s" }, "transferOptions": { "deleteObjectsFromSourceAfterTransfer": true } } } ] }
Library klien
Dalam contoh ini, Anda akan mempelajari cara memindahkan file dari satu bucket Cloud Storage ke bucket lainnya. Misalnya, Anda dapat mereplikasi data ke bucket di lokasi lain.
Untuk informasi selengkapnya tentang library klien Storage Transfer Service, lihat Mulai menggunakan library klien Storage Transfer Service.
Java
Mencari sampel lama? Lihat Panduan Migrasi Storage Transfer Service.
Python
Mencari sampel lama? Lihat Panduan Migrasi Storage Transfer Service.
Verifikasi objek yang disalin
Setelah transfer selesai, sebaiknya lakukan pemeriksaan integritas data tambahan.
Validasi bahwa objek telah disalin dengan benar, dengan memverifikasi metadata pada objek, seperti checksum dan ukuran.
Pastikan bahwa versi objek yang benar telah disalin. Storage Transfer Service menawarkan opsi siap pakai untuk memverifikasi bahwa objek adalah salinan. Jika Anda telah mengaktifkan logging, lihat log untuk memverifikasi apakah semua objek berhasil disalin, termasuk kolom metadata yang sesuai.
Mulai menggunakan bucket tujuan
Setelah migrasi selesai dan diverifikasi, perbarui aplikasi atau workload yang ada agar menggunakan nama bucket target. Periksa log akses data di Cloud Audit Logs untuk memastikan bahwa operasi Anda memodifikasi dan membaca objek dengan benar.
Menghapus bucket asli
Setelah semuanya berfungsi dengan baik, hapus bucket asli.
Storage Transfer Service menawarkan opsi untuk menghapus objek setelah
ditransfer dengan menentukan deleteObjectsFromSourceAfterTransfer: true
dalam
konfigurasi tugas, atau memilih opsi di Konsol Google Cloud.
Menjadwalkan penghapusan objek
Untuk menjadwalkan penghapusan objek Anda di kemudian hari, gunakan kombinasi tugas transfer terjadwal, dan opsi deleteObjectsUniqueInSink = true
.
Tugas transfer harus disiapkan untuk mentransfer bucket kosong ke dalam bucket yang berisi objek Anda. Hal ini menyebabkan Storage Transfer Service mencantumkan objek dan mulai menghapusnya. Karena penghapusan adalah operasi khusus metadata, tugas transfer hanya terikat QPS. Untuk mempercepat prosesnya, bagi transfer menjadi beberapa tugas, yang masing-masing bertindak pada kumpulan awalan yang berbeda.
Sebagai alternatif, Google Cloud menawarkan penjadwal cron job terkelola. Untuk mengetahui informasi selengkapnya, lihat artikel Menjadwalkan Tugas Transfer Google Cloud STS dengan Cloud Scheduler.