Melakukan migrasi sepenuhnya dari Amazon S3 ke Cloud Storage

Halaman ini menjelaskan cara melakukan migrasi sepenuhnya dari Amazon Simple Storage Service (Amazon S3) ke Cloud Storage untuk pengguna yang mengirim permintaan menggunakan API. Setelah bermigrasi sepenuhnya, Anda dapat menggunakan semua fitur Cloud Storage, termasuk beberapa project dan OAuth 2.0 untuk autentikasi.

Jika ingin mulai menggunakan Cloud Storage dengan cepat, Anda dapat memilih migrasi sederhana, yang hanya memerlukan beberapa perubahan sederhana pada alat dan library yang saat ini Anda gunakan dengan Amazon S3.

Bermigrasi dari Amazon S3 ke Cloud Storage

Untuk bermigrasi sepenuhnya dari Amazon S3 ke Cloud Storage, Anda perlu menyelesaikan langkah-langkah berikut:

  • Ubah header x-amz-* yang ada menjadi header x-goog-* yang sesuai.
  • Ubah XML AWS Access Control List (ACL) ke XML ACL Cloud Storage yang sesuai (lihat Membuat dan mengelola daftar kontrol akses).
  • Tetapkan header x-goog-project-id dalam permintaan Anda.
  • Siapkan untuk menggunakan autentikasi OAuth 2.0 seperti yang dijelaskan dalam Autentikasi OAuth 2.0. Langkah pertama adalah mendaftarkan aplikasi Anda (tempat Anda akan mengajukan permintaan) ke Google. Menggunakan OAuth 2.0 berarti header Authorization Anda terlihat seperti ini:

    Authorization: Bearer OAUTH2_TOKEN

    OAuth 2.0 mengandalkan SSL untuk keamanan, bukan mengharuskan aplikasi Anda melakukan penandatanganan kriptografis secara langsung dan lebih mudah diterapkan. Dengan OAuth, aplikasi Anda dapat meminta akses ke data yang terkait dengan akun pengguna, dan akses dapat dicakup ke beberapa level, termasuk hanya baca, baca-tulis, dan kontrol penuh. Untuk informasi selengkapnya, lihat cakupan Cloud Storage OAuth 2.0 dan Kredensial akun pengguna.

Kontrol akses

Bagian ini menampilkan beberapa contoh kontrol akses untuk membantu Anda bermigrasi dari Amazon S3 ke Cloud Storage. Untuk ringkasan kontrol akses di Cloud Storage, lihat Kontrol Akses.

Di Cloud Storage, ada beberapa cara untuk menerapkan ACL ke bucket dan objek (baca Membuat dan mengelola daftar kontrol akses). Dua cara untuk menentukan ACL serupa dengan yang Anda lakukan di Amazon S3:

  • Parameter string kueri acl memungkinkan Anda menerapkan ACL untuk cakupan tertentu.
  • Header permintaan x-goog-acl memungkinkan Anda menerapkan ACL standar, yang terkadang dikenal sebagai ACL bawaan.

Menggunakan parameter string kueri acl

Anda dapat menggunakan parameter string kueri acl untuk permintaan Cloud Storage dengan cara yang sama persis seperti saat Anda menggunakannya untuk permintaan Amazon S3. Parameter acl digunakan bersama dengan metode PUT untuk menerapkan ACL ke hal berikut: objek yang sudah ada, bucket yang sudah ada, atau bucket yang Anda buat. Saat menggunakan parameter string kueri acl dalam permintaan PUT, Anda harus melampirkan dokumen XML (menggunakan sintaksis ACL Cloud Storage) ke isi permintaan Anda. Dokumen XML berisi setiap entri ACL yang ingin Anda terapkan ke bucket atau objek.

Contoh berikut menunjukkan permintaan PUT ke Amazon S3 yang menggunakan parameter string kueri acl. ACL ditetapkan dalam dokumen XML yang dikirim dalam isi permintaan. Permintaan PUT mengubah ACL pada objek bernama europe/france/paris.jpg yang ada di bucket bernama my-travel-maps. ACL memberikan izin FULL_CONTROL ke jane@gmail.com.

PUT europe/france/paris.jpg?acl HTTP/1.1
Host: my-travel-maps.s3.amazonaws.com
Date: Wed, 06 Nov 2013 19:28:18 GMT
Content-Length: 598
Content-Type: application/xml
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20131106/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;date;host, Signature=4c45f25bb679fdab0de5a287625d6a143414728d93c9aeb9f4cc91c33a1c45fg

<?xml version='1.0' encoding='utf-8'?>
<AccessControlPolicy>
  <Owner>
    <ID>5a6557ba40f7c86496ffceae789fcd888abc1b62a7149873a0fe12c0f60a7d95</ID>
    <DisplayName>ownerEmail@example.com</DisplayName>
  </Owner>
  <AccessControlList>
    <Grant>
      <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CanonicalUser">
        <ID>fd447671d60b979f78ee6fcec7b22afc80e6b26a4db16eed01afb8064047949b</ID>
        <DisplayName>jane@gmail.com</DisplayName>
      </Grantee>
      <Permission>FULL_CONTROL</Permission>
    </Grant>
  </AccessControlList>
</AccessControlPolicy>

Berikut adalah permintaan yang sama ke Cloud Storage:

PUT europe/france/paris.jpg?acl HTTP/1.1
Host: my-travel-maps.storage.googleapis.com
Date: Wed, 06 Nov 2013 19:37:33 GMT
Content-Length: 268
Content-Type: application/xml
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

<?xml version='1.0' encoding='utf-8'?>
<AccessControlList>
  <Entries>
  <Entry>
    <Permission>FULL_CONTROL</Permission>
    <Scope type="UserByEmail">
      <EmailAddress>jane@gmail.com</EmailAddress>
    </Scope>
  </Entry>
  </Entries>
</AccessControlList>

Perhatikan bahwa Cloud Storage tidak mewajibkan elemen <Owner/> dalam dokumen XML ACL. Untuk mengetahui informasi selengkapnya, lihat Kepemilikan bucket dan objek.

Anda juga dapat mengambil ACL bucket dan objek menggunakan parameter string kueri acl dengan metode GET. ACL dijelaskan dalam dokumen XML, yang dilampirkan ke isi respons. Anda harus memiliki izin FULL_CONTROL untuk menerapkan atau mengambil ACL pada sebuah objek atau bucket.

Menerapkan ACL dengan header permintaan ekstensi

Anda dapat menggunakan header x-goog-acl dalam permintaan Cloud Storage untuk menerapkan ACL standar ke bucket dan objek dengan cara yang sama persis seperti saat Anda menggunakan header x-amz-acl dalam permintaan Amazon S3. Anda biasanya menggunakan header x-goog-acl (x-amz-acl) untuk menerapkan ACL standar ke bucket atau objek saat Anda membuat atau mengupload bucket atau objek. ACL Cloud Storage standar serupa dengan ACL Bawaan Amazon S3, termasuk pribadi, baca publik, baca tulis publik, serta lainnya. Untuk mengetahui daftar ACL Cloud Storage standar, lihat ACL Standar.

Contoh berikut menunjukkan permintaan Objek PUT yang menerapkan ACL public-read ke objek bernama europe/france/paris.jpg yang diupload ke bucket bernama my-travel-maps di Amazon S3.

PUT europe/france/paris.jpg HTTP/1.1
Host: my-travel-maps.s3.amazonaws.com
Date: Wed, 06 Nov 2013 20:48:42 GMT
Content-Length: 888814
Content-Type: image/jpg
x-amz-acl: public-read
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20131106/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;date;host, Signature=808150c37dbd1b425b2398421d6fc3dd6d4942dfaae9e519fd5835aa62fd62ab

<888814 bytes in entity body>

Berikut adalah permintaan yang sama ke Cloud Storage:

PUT europe/france/paris.jpg HTTP/1.1
Host: my-travel-maps.storage.googleapis.com
Date: Wed, 06 Nov 2013 20:49:57 GMT
Content-Length: 888814
Content-Type: image/jpg
x-goog-acl: public-read
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

<888814 bytes in entity body>

Anda juga dapat menggunakan header x-goog-acl untuk menerapkan ACL standar ke bucket atau objek yang ada. Untuk melakukannya, sertakan parameter string kueri acl dalam permintaan Anda, tetapi jangan sertakan dokumen XML dalam permintaan Anda. Menerapkan ACL standar ke objek atau bucket yang ada berguna jika Anda ingin beralih dari satu ACL standar ke ACL standar sebelumnya, atau Anda ingin mengupdate ACL kustom ke ACL standar. Misalnya, permintaan Objek PUT berikut menerapkan private ACL standar ke objek bernama europe/france/paris.jpg yang ada di bucket bernama my-travel-maps.

PUT europe/france/paris.jpg?acl HTTP/1.1
Host: my-travel-maps.storage.googleapis.com
Date: Wed, 06 Nov 2013 00:26:36 GMT
Content-Length: 0
x-goog-acl: private
Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg

<empty entity body>

Untuk informasi selengkapnya tentang cara mengelola ACL, lihat Membuat dan mengelola daftar kontrol akses.

Bermigrasi dari metode permintaan Amazon S3 ke Cloud Storage

Cloud Storage mendukung metode permintaan HTTP standar yang sama untuk membaca dan menulis data ke bucket Anda, seperti yang didukung di Amazon S3. Oleh karena itu, sebagian besar alat dan library yang saat ini Anda gunakan dengan Amazon S3, berfungsi sebagaimana mestinya dengan Cloud Storage. Cloud Storage mendukung metode permintaan berikut:

  • Permintaan layanan untuk GET.
  • Permintaan bucket, termasuk PUT, GET, DELETE.
  • Permintaan objek, termasuk GET, POST, PUT, HEAD, dan DELETE.

Untuk mengetahui informasi selengkapnya, lihat Metode Referensi XML API. Perlu diingat bahwa saat mengirim permintaan ke Cloud Storage, Anda perlu mengubah isi permintaan, jika memungkinkan, untuk menggunakan sintaksis Cloud Storage yang sesuai. Misalnya, saat Anda membuat konfigurasi siklus proses untuk bucket, gunakan XML siklus proses Cloud Storage, yang berbeda dengan XML siklus proses Amazon S3.

Ada beberapa perbedaan antara Cloud Storage XML API dan Amazon S3 yang dirangkum di bawah ini:

Fungsi Amazon S3 Fungsi Cloud Storage XML API
Saat menggunakan kunci enkripsi yang disediakan pelanggan dalam upload multibagian, permintaan terakhir tidak menyertakan kunci enkripsi yang disediakan pelanggan. Di Cloud Storage XML API, semua permintaan dalam upload multibagian, termasuk permintaan akhir, mengharuskan Anda menyediakan kunci enkripsi yang disediakan pelanggan yang sama. Persyaratan ini ada karena Cloud Storage tidak menyimpan informasi kunci enkripsi saat menunggu permintaan menyelesaikan upload, tetapi memerlukan kunci tersebut untuk menghitung checksum objek yang sudah selesai.
Di Amazon S3, tanda tangan V4 dapat digunakan untuk mengautentikasi upload yang menggunakan potongan encoding transfer. Dalam Cloud Storage XML API, potongan encoding transfer dan tanda tangan V4 saat ini tidak dapat digunakan secara bersamaan. Beberapa alat Amazon S3 menggunakan potongan encoding transfer beserta tanda tangan secara default. Dalam kasus semacam ini, Anda harus menonaktifkan potongan encoding transfer.
Parameter string kueri bucket GET/POST:
  • "policy" - Bekerja dengan kebijakan bucket Amazon S3.
  • "notification" - Memberi tahu peristiwa bucket.
  • "requestPayment" - Mengonfigurasi siapa yang membayar permintaan dan download data dari bucket.
Alternatif:
  • "policy" - Cloud Storage ACL, keanggotaan tim project, dan kemampuan untuk menggunakan beberapa project mengatasi banyak skenario ketika kebijakan bucket digunakan.
  • "notifications" - Gunakan Notifikasi Pub/Sub gcloud CLI atau JSON API.
  • "requestPayment" - Di Cloud Storage, parameter string kueri yang setara untuk requestPayment adalah billing.
Penghapusan beberapa objek.
POST /?delete

Gunakan Konsol Google Cloud untuk menghapus beberapa objek dengan mudah.

Atau, JSON API mendukung pengiriman permintaan batch untuk mengurangi jumlah koneksi HTTP yang dibuat klien Anda.

Bermigrasi dari header Amazon S3 ke Cloud Storage

Cloud Storage menggunakan beberapa header HTTP standar serta beberapa header HTTP kustom (ekstensi). Jika beralih dari Amazon S3 ke Cloud Storage, Anda dapat mengonversi header Amazon S3 kustom menjadi header kustom Cloud Storage yang setara atau fungsi yang serupa seperti yang ditunjukkan pada tabel di bawah ini.

Untuk sebagian besar header Amazon S3, Anda hanya perlu mengganti awalan x-amz dengan x-goog:

Header Amazon S3 Header Cloud Storage
x-amz-storage-class x-goog-storage-class
x-amz-acl x-goog-acl
x-amz-date x-goog-date
x-amz-meta-* x-goog-meta-*
x-amz-copy-source x-goog-copy-source
x-amz-metadata-directive x-goog-metadata-directive
x-amz-copy-source-if-match x-goog-copy-source-if-match
x-amz-copy-source-if-none-match x-goog-copy-source-if-none-match
x-amz-copy-source-if-unmodified-since x-goog-copy-source-if-unmodified-since
x-amz-copy-source-if-modified-since x-goog-copy-source-if-modified-since

Beberapa header berbeda atau tidak berlaku di Cloud Storage:

Header Amazon S3 Header Cloud Storage
x-amz-server-side-encryption Tidak diperlukan. Cloud Storage otomatis mengenkripsi semua data sebelum ditulis ke disk. Untuk mengetahui informasi selengkapnya, lihat Enkripsi.
x-amz-grant-* x-goog-acl dengan nilai ACL standar.
x-amz-mfa Gunakan Autentikasi OAuth 2.0.
x-amz-website-redirect-location, x-amz-copy-source-range t/a

Lihat Header HTTP dan parameter string kueri untuk XML API untuk referensi ke header Cloud Storage.

Langkah selanjutnya