Halaman ini menjelaskan cara menyelesaikan migrasi sederhana dari Amazon Simple Storage Service (Amazon S3) ke Cloud Storage. Dalam migrasi sederhana, Anda menggunakan alat dan library yang sudah ada untuk menghasilkan permintaan REST yang diautentikasi ke Amazon S3 untuk mengirim permintaan yang diautentikasi ke Cloud Storage.
Jika Anda baru menggunakan Cloud Storage dan tidak akan menggunakan API secara langsung, pertimbangkan untuk menggunakan Konsol Google Cloud untuk menyiapkan dan mengelola transfer. Konsol Google Cloud menyediakan antarmuka grafis ke Cloud Storage yang memungkinkan Anda menyelesaikan banyak tugas penyimpanan hanya dengan menggunakan browser, termasuk migrasi data dari Amazon S3 ke Cloud Storage.
Jika Anda ingin Cloud Storage menyimpan cadangan data Amazon S3, sebaiknya gunakan transfer berbasis peristiwa, yang menggunakan Notifikasi Peristiwa Amazon S3 untuk otomatis menjaga agar bucket Cloud Storage tetap sinkron dengan sumber Amazon S3 Anda.
Bermigrasi dari Amazon S3 ke Cloud Storage dalam skenario migrasi yang sederhana
Untuk membuat permintaan ke Cloud Storage, Anda perlu menyelesaikan langkah-langkah berikut:
- Tetapkan project Google Cloud default.
- Dapatkan kunci HMAC (message authentication code berbasis hash).
Di alat atau library yang sudah ada, lakukan perubahan berikut:
- Ubah endpoint permintaan untuk menggunakan endpoint permintaan XML API Cloud Storage.
- Ganti akses dan kunci rahasia Amazon Web Services (AWS) dengan ID akses dan rahasia Cloud Storage yang sesuai (secara kolektif disebut kunci HMAC Cloud Storage).
Pastikan header
x-amz-
Anda menggunakan nilai Cloud Storage yang didukung. Misalnya,x-amz-storage-class
harus menggunakan salah satu kelas penyimpanan Cloud Storage yang tersedia.Saat Anda menggunakan Cloud Storage XML API dalam skenario migrasi sederhana, menentukan ID tanda tangan
AWS
di headerAuthorization
akan memberi tahu Cloud Storage tentang headerx-amz-*
dan Sintaksis XML Amazon S3 ACL dalam permintaan Anda. Cloud Storage memproses headerx-amz-*
yang memilikix-goog-*
padanan, seperti yang tercantum dalam tabel header, dan memproses headerx-amz-decoded-content-length
.
Setelah melakukan perubahan ini, Anda dapat mulai menggunakan alat dan library yang ada untuk mengirim permintaan HMAC ke Cloud Storage.
Misalnya, contoh berikut menunjukkan cara mencantumkan bucket Cloud Storage dengan menggunakan Amazon S3 SDK:
Go
Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi Cloud Storage Go API.
Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Java
Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Java API.
Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Python
Untuk mengetahui informasi selengkapnya, lihatDokumentasi referensi Cloud Storage Python API.
Untuk melakukan autentikasi ke Cloud Storage, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Menetapkan project default
Untuk menggunakan Cloud Storage dalam skenario migrasi sederhana, sebaiknya Anda menetapkan project default, yang digunakan Cloud Storage untuk melakukan operasi tertentu, seperti layanan GET
atau bucket PUT
. Jika tidak menetapkan project default, Anda harus menentukan header project dalam permintaan tertentu.
Untuk menetapkan project default:
- Buka halaman Setelan Cloud Storage di Konsol Google Cloud.
- Pilih tab Interoperabilitas.
Klik Set PROJECT-ID as default project yang terletak di bagian Project default untuk akses interoperabilitas.
Jika project sudah menjadi project default, Anda akan melihat PROJECT-ID adalah project default untuk akses interoperabilitas.
Project ini sekarang menjadi project default Anda. Anda dapat mengubah project default kapan saja dengan memilih project lain dan mengikuti langkah-langkah berikut.
Atau, menentukan header project
Sebagai ganti atau selain menyetel project default, Anda dapat menggunakan header x-amz-project-id
dalam setiap permintaan yang mengharuskan Anda menentukan project.
- Permintaan yang menggunakan
x-amz-project-id
menggunakan project yang ditentukan dalam header, meskipun sudah ada project default.
Header x-amz-project-id
berguna saat:
- Anda bekerja dengan beberapa project.
- Permintaan Anda dibuat oleh akun layanan yang terkait dengan project lain, karena akun layanan menggunakan project induknya sebagai project default.
Perlu diperhatikan bahwa Amazon S3 tidak memiliki project. Jadi, bergantung pada alat atau library klien yang Anda gunakan, menentukan header x-amz-project-id
mungkin bukan opsi yang dapat Anda pilih. Dalam hal ini, Anda harus menetapkan project default.
Menggunakan kunci HMAC
Untuk menggunakan Cloud Storage XML API dalam skenario migrasi sederhana, gunakan kunci message authentication code (HMAC) berbasis hash Cloud Storage untuk kredensial. Biasanya, Anda harus membuat kunci HMAC yang dikaitkan dengan akun layanan; namun, Anda dapat menggunakan akun yang terkait dengan akun pengguna.
Mengautentikasi dalam skenario migrasi sederhana
Menggunakan header Otorisasi
Untuk operasi dalam skenario migrasi sederhana yang memerlukan autentikasi, sertakan header permintaan Authorization
seperti yang Anda lakukan untuk permintaan ke Amazon S3. Sintaksis header Authorization
untuk permintaan Amazon S3 adalah:
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Dalam skenario migrasi sederhana, Anda hanya mengubah header untuk menggunakan ID akses HMAC Cloud Storage dan memastikan Signature
yang dilampirkan dihitung dengan kunci rahasia HMAC Cloud Storage:
Authorization: ALGORITHM Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Bagian-bagian dari header Authorization
adalah:
ALGORITHM: Algoritma dan versi tanda tangan yang Anda gunakan. Menggunakan
AWS4-HMAC-SHA256
menunjukkan bahwa Anda menggunakan tanda tangan HMAC V4 dan Anda ingin mengirim headerx-amz-*
. Anda juga dapat menggunakanGOOG4-HMAC-SHA256
, yang menunjukkan bahwa Anda menggunakan tanda tangan HMAC V4 dan ingin mengirim headerx-goog-*
, atauGOOG4-RSA-SHA256
, yang menunjukkan bahwa Anda menggunakan tanda tangan RSA V4 dan ingin mengirim headerx-goog-*
.GOOG-ACCESS-ID: ID akses mengidentifikasi entitas yang membuat dan menandatangani permintaan. Dalam migrasi sederhana, ganti ID kunci akses Amazon Web Service (AWS) yang Anda gunakan untuk mengakses Amazon S3 dengan ID akses HMAC Cloud Storage. ID akses HMAC Cloud Storage Anda dimulai dengan
GOOG
.CREDENTIAL_SCOPE: Cakupan kredensial, seperti yang didefinisikan dalam tanda tangan. Dalam migrasi sederhana, Anda tidak perlu mengubah cakupan kredensial jika menggunakan
AWS4-HMAC-SHA256
untuk nilai ALGORITHM.SIGNED_HEADERS: Daftar nama header yang dipisahkan titik koma yang harus disertakan untuk menandatangani permintaan ini. Semua header harus dalam huruf kecil dan diurutkan berdasarkan kode karakter.
Contoh string header bertanda tangan gaya Amazon S3 terlihat seperti ini:
content-type;host;x-amz-date
Dalam migrasi sederhana, Anda tidak perlu membuat perubahan apa pun pada string header yang ditandatangani.
SIGNATURE: Tanda tangan yang memungkinkan permintaan diautentikasi. Dalam migrasi sederhana, ganti informasi kunci akses AWS dengan informasi kunci HMAC Cloud Storage yang setara.
Contoh permintaan autentikasi
Contoh berikut mengupload objek bernama /europe/france/paris.jpg
ke bucket bernama my-travel-maps
, menerapkan ACL public-read
yang telah ditetapkan, dan menentukan header metadata kustom untuk peninjau. Berikut adalah permintaan ke bucket
di Amazon S3:
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.s3.amazonaws.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
Berikut adalah permintaan untuk bucket di Cloud Storage:
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
Berikut adalah permintaan kanonis terkait yang dibuat untuk permintaan ini:
PUT /europe/france/paris.jpg content-length:888814 content-type:image/jpg host:my-travel-maps.storage.googleapis.com x-amz-acl:public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer:joe,jane content-length,content-type,host,x-amz-acl,x-amz-date,x-amz-meta-reviewer 82e3da8b3f35989512e8d428add7eca73ab0e5f36586e66fbad8e1051343cbd2
Berikut adalah string-to-sign yang sesuai dan telah dibuat untuk permintaan ini:
AWS4-HMAC-SHA256 20190311T192918Z 20190311/us-east-1/s3/aws4_request 73918a5ff373d7a03e406fbf9ea35675396b06fca2af76c27a5c451fa783ef65
Permintaan ini tidak menyediakan header Content-MD5, sehingga string kosong ditampilkan di baris kedua pesan.
Kontrol akses dalam skenario migrasi sederhana
Untuk mendukung migrasi sederhana, Cloud Storage menerima ACL yang dihasilkan oleh Amazon S3. Dalam skenario migrasi sederhana, Anda menggunakan AWS
sebagai ID tanda tangan, yang memberi tahu Cloud Storage untuk mengharapkan sintaksis ACL menggunakan
sintaksis XML Amazon S3 ACL. Anda harus memastikan bahwa Amazon S3 ACL yang Anda gunakan dipetakan ke model ACL Cloud Storage. Misalnya, jika alat dan library Anda menggunakan sintaksis ACL Amazon S3 untuk memberikan izin WRITE
bucket, alat dan library tersebut juga harus memberikan izin READ
bucket karena izin Cloud Storage adalah konsentris. Anda tidak perlu menentukan izin WRITE
dan READ
saat memberikan izin WRITE
menggunakan sintaksis Cloud Storage.
Cloud Storage mendukung sintaksis Amazon S3 ACL dalam skenario berikut:
- Dalam permintaan ke Cloud Storage untuk mengambil ACL (misalnya, permintaan Objek
GET
atau BucketGET
), Cloud Storage akan menampilkan sintaksis ACL Amazon S3. - Dalam permintaan ke Cloud Storage untuk menerapkan ACL (misalnya, permintaan Objek
PUT
atau BucketPUT
), Cloud Storage akan menerima sintaksis Amazon S3 ACL.
Header Authorization
dalam skenario migrasi sederhana menggunakan AWS
untuk
ID tanda tangan, tetapi dengan ID akses Google Anda.
Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Contoh berikut menunjukkan permintaan GET
ke Cloud Storage untuk menampilkan ACL untuk suatu objek.
GET europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534
Respons terhadap permintaan tersebut mencakup ACL yang menggunakan sintaksis Amazon S3 ACL.
<?xml version='1.0' encoding='UTF-8'?> <AccessControlPolicy> <Owner> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490 </ID> <DisplayName>OwnerName</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='CanonicalUser'> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490</ID> <DisplayName>UserName</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
Contoh berikut menunjukkan permintaan PUT
ke Cloud Storage untuk menetapkan ACL untuk suatu objek. Contoh ini menunjukkan isi permintaan dengan sintaksis ACL Amazon S3.
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml Content-Length: 337 X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534 <?xml version='1.0' encoding='utf-8'?> <AccessControlPolicy> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
Terakhir, dalam skenario migrasi sederhana, Anda juga dapat menggunakan ID tanda tangan
GOOG1
di header Authorization
. Dalam hal ini, Anda harus menggunakan sintaksis ACL Cloud Storage dan memastikan bahwa semua header x-amz-*
Anda diubah menjadi x-goog-*
. Meskipun memungkinkan, sebaiknya Anda memilih migrasi penuh untuk menggunakan semua manfaat Cloud Storage.
Dukungan untuk kompatibilitas XML API dengan Amazon S3
Untuk diskusi tentang interoperabilitas API XML, lihat Stack Overflow menggunakan tag google-cloud-storage.
Langkah berikutnya
- Merencanakan migrasi dari Amazon S3.
- Mentransfer data Anda ke Cloud Storage dari sumber eksternal, seperti Amazon S3 dan Microsoft Azure Blob Storage, menggunakan Storage Transfer Service.
- Membuat transfer berbasis peristiwa yang menggunakan Notifikasi Peristiwa Amazon S3 untuk menjaga agar bucket Cloud Storage tetap sinkron dengan Amazon S3.