Storage Transfer Service dapat digunakan untuk mentransfer data dalam jumlah besar antara bucket Cloud Storage, baik dalam project Google Cloud yang sama, maupun di antara project yang berbeda.
Migrasi bucket berguna dalam sejumlah skenario. Fungsi ini dapat digunakan untuk menggabungkan data dari project terpisah, memindahkan data ke lokasi pencadangan, atau mengubah lokasi data Anda.
Kapan harus 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
gcloud
. 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 demikian, Anda tidak perlu mengoptimalkan dan memelihara 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.
Memilih nama bucket
Untuk memindahkan data ke bucket penyimpanan dengan lokasi yang berbeda, pilih salah satu pendekatan berikut:
- Nama bucket baru. Perbarui aplikasi Anda agar mengarah ke bucket penyimpanan dengan nama yang berbeda.
- Keep bucket name. Ganti bucket penyimpanan untuk mempertahankan nama saat ini, yang berarti Anda tidak perlu mengupdate aplikasi.
Dalam kedua kasus tersebut, Anda harus merencanakan periode nonaktif, dan memberi tahu pengguna tentang periode nonaktif yang akan datang. Tinjau penjelasan berikut untuk memahami pilihan mana yang paling cocok untuk Anda.
Nama bucket baru
Dengan nama bucket baru, Anda perlu memperbarui semua kode dan layanan yang menggunakan bucket saat ini. Cara melakukannya bergantung pada cara aplikasi Anda dibuat dan di-deploy.
Untuk penyiapan tertentu, pendekatan ini mungkin memiliki lebih sedikit periode nonaktif, tetapi memerlukan lebih banyak pekerjaan untuk memastikan transisi yang lancar. Proses ini melibatkan langkah-langkah berikut:
- Menyalin data Anda ke bucket penyimpanan baru.
- Memulai periode nonaktif.
- Memperbarui aplikasi Anda agar mengarah ke bucket baru.
- Memverifikasi bahwa semuanya berfungsi seperti yang diharapkan, dan bahwa semua sistem dan akun yang relevan memiliki akses ke bucket.
- Menghapus bucket asli.
- Mengakhiri periode nonaktif.
Pertahankan nama bucket
Gunakan pendekatan ini jika Anda tidak ingin mengubah kode untuk mengarah ke nama bucket baru. Proses ini melibatkan langkah-langkah berikut:
- Menyalin data Anda ke bucket penyimpanan sementara.
- Memulai periode nonaktif.
- Menghapus bucket asli Anda.
- Membuat bucket baru dengan nama yang sama dengan bucket asli Anda.
- Menyalin data ke bucket baru dari bucket sementara.
- Menghapus bucket sementara.
- Memverifikasi bahwa semuanya berfungsi seperti yang diharapkan, dan bahwa semua sistem dan akun yang relevan memiliki akses ke bucket.
- Mengakhiri periode nonaktif.
Meminimalkan periode nonaktif
Storage Transfer Service tidak mengunci operasi baca atau tulis pada bucket sumber atau tujuan selama transfer.
Jika memilih untuk mengunci operasi baca/tulis secara manual di bucket, Anda dapat meminimalkan downtime 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 operasi baca/tulis di bucket sumber dan lakukan transfer lain. Transfer Storage Transfer Service adalah 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 dibatasi oleh QPS. Jika ukuran objek besar, bandwidth mungkin menjadi bottleneck.
Batas bandwidth ditetapkan di tingkat region dan dialokasikan secara adil di semua project. Jika bandwidth yang memadai tersedia, 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 dengan menggunakan include and exclude prefixes untuk mentransfer file tertentu.
Jika lokasi, class penyimpanan, dan kunci enkripsi sama, Storage Transfer Service tidak akan membuat salinan byte baru; tetapi membuat entri metadata baru yang mengarah ke blob sumber. Akibatnya, lokasi dan salinan class yang sama dari korpus besar diselesaikan dengan sangat cepat dan hanya terikat dengan QPS.
Penghapusan juga merupakan operasi khusus metadata. Untuk transfer ini, paralelisasi 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 disimpan
sebagai kolom metadata kustom dengan kunci
x-goog-reserved-source-generation
, yang dapat Anda edit nanti atau hapus.
Kolom metadata berikut dapat dipertahankan secara opsional saat mentransfer menggunakan API:
- ACL (
acl
) - Kelas penyimpanan (
storageClass
) - CMEK (
kmsKey
) - Penangguhan sementara (
temporaryHold
) - Waktu pembuatan objek (
customTime
)
Lihat referensi API TransferSpec
untuk mengetahui 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 setelah transfer, sehingga waktu objek yang dihabiskan di kelas penyimpanannya juga direset. Artinya, objek di
Coldline Storage, setelah transfer, harus ada lagi selama 90 hari di
tujuan untuk menghindari biaya penghapusan awal.
Anda dapat menerapkan kebijakan siklus proses berbasis createTime
menggunakan customTime
. Nilai customTime
yang ada akan ditimpa.
Untuk mengetahui detail selengkapnya tentang hal yang dipertahankan dan tidak dipertahankan, lihat Preservasi metadata.
Menangani objek berversi
Jika ingin mentransfer semua versi objek penyimpanan, bukan hanya versi terbaru, Anda harus menggunakan gcloud
CLI atau REST API untuk mentransfer data, yang digabungkan dengan fitur manifes Storage Transfer Service.
Untuk mentransfer semua versi objek:
Buat daftar objek bucket dan salin ke file JSON:
gcloud storage ls --all-versions --recursive --json [SOURCE_BUCKET] > object-listing.json
Perintah ini biasanya mencantumkan sekitar 1.000 objek per detik.
Pisahkan 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 non-saat ini terlebih dahulu dengan meneruskan file manifes
non-current-object-manifest.csv
sebagai nilai kolomtransferManifest
.Kemudian, transfer versi live dengan cara yang sama, dengan menentukan
live-object-manifest.csv
sebagai file manifes.
Mengonfigurasi opsi transfer
Beberapa opsi yang tersedia saat menyiapkan transfer adalah sebagai berikut:
Logging: Cloud Logging menyediakan log mendetail dari setiap objek, sehingga Anda dapat memverifikasi status transfer dan melakukan pemeriksaan integritas data tambahan.
Pemfilteran: Anda dapat menggunakan awalan serta mengecualikan awalan untuk membatasi objek yang dioperasikan oleh Storage Transfer Service. Opsi ini dapat digunakan untuk membagi transfer menjadi beberapa tugas transfer sehingga dapat berjalan secara paralel. Lihat Mengoptimalkan kecepatan transfer untuk mengetahui informasi selengkapnya.
Opsi transfer: Anda dapat mengonfigurasi transfer untuk menimpa item yang ada di bucket tujuan; untuk menghapus objek di tujuan yang tidak ada di set transfer; atau untuk menghapus objek yang ditransfer dari sumber.
Mentransfer data
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 dapat menyalin beberapa metadata bucket saat membuat bucket baru. Lihat 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
konsol Google Cloud, gcloud
CLI, REST API, atau library klien.
Pendekatan yang Anda pilih bergantung pada strategi transfer Anda.
Petunjuk berikut adalah untuk kasus penggunaan dasar transfer objek dari satu bucket ke bucket lainnya, dan harus diubah 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 di-propagasi 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 Jenis Sumber dan Jenis Tujuan.
Pilih sumber: Masukkan nama bucket yang diinginkan secara langsung, atau klik Jelajahi untuk menemukan dan memilih bucket yang Anda inginkan.
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 mencentang kotak 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
Jika Anda belum melakukannya, instal alat command line gcloud.
Kemudian, panggil gcloud init
untuk menginisialisasi alat dan menentukan project ID
dan akun pengguna Anda. Lihat Menginisialisasi Cloud SDK untuk mengetahui detail selengkapnya.
gcloud init
Menambahkan akun layanan ke folder tujuan
Anda harus menambahkan akun layanan Storage Transfer Service ke bucket tujuan
sebelum membuat transfer. Untuk melakukannya, gunakan
gcloud storage buckets add-iam-policy-binding
:
gcloud storage buckets add-iam-policy-binding gs://bucket_name \ --member=serviceAccount:project-12345678@storage-transfer-service. \ --role=roles/storage.admin
Untuk petunjuk penggunaan konsol atau API Google Cloud, lihat artikel 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 bentuk
gs://BUCKET_NAME
.
Opsi tambahan mencakup:
Informasi tugas: 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. Hal ini mencakup
--include-prefixes
dan--exclude-prefixes
, dan 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 values to preserve]metadata; dan secara opsional tetapkan class penyimpanan pada objek yang ditransfer (--custom-storage-class
).Notifikasi: 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 mengetahui informasi selengkapnya tentang library klien Storage Transfer Service, lihat Memulai library klien Storage Transfer Service.
Java
Mencari sampel yang lebih lama? Lihat Panduan Migrasi Storage Transfer Service.
Python
Mencari sampel yang lebih lama? Lihat Panduan Migrasi Storage Transfer Service.
Memverifikasi objek yang disalin
Setelah transfer selesai, sebaiknya lakukan pemeriksaan integritas data tambahan.
Validasi bahwa objek disalin dengan benar, dengan memverifikasi metadata pada objek, seperti checksum dan ukuran.
Pastikan 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 beban kerja yang ada agar menggunakan nama bucket target. Periksa log akses data di Cloud Audit Logs untuk memastikan bahwa operasi Anda mengubah 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
di
konfigurasi tugas, atau memilih opsi di konsol Google Cloud.
Menjadwalkan penghapusan objek
Untuk menjadwalkan penghapusan objek pada lain waktu, gunakan kombinasi tugas transfer terjadwal, dan opsi deleteObjectsUniqueInSink = true
.
Tugas transfer harus disiapkan untuk mentransfer bucket kosong ke 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 proses, bagi transfer menjadi beberapa tugas, yang masing-masing bertindak pada kumpulan awalan yang berbeda.
Atau, Google Cloud menawarkan penjadwal tugas cron terkelola. Untuk mengetahui informasi selengkapnya, lihat Menjadwalkan Tugas Transfer Google Cloud STS dengan Cloud Scheduler.