Bermigrasi ke Library Klien Cloud untuk Penyimpanan

Dengan Cloud Storage, aplikasi Anda dapat menyajikan objek data besar seperti file video atau gambar, dan pengguna dapat mengupload file data berukuran besar. Di runtime Python 2, App Engine menyediakan library kliennya sendiri untuk menulis dan membaca objek di Cloud Storage. Library App Engine ini tidak tersedia di runtime App Engine yang lebih baru, termasuk runtime Python 3.

Jika aplikasi Python 2 Anda menggunakan library GoogleAppEngineCloudStorageClient, Anda harus bermigrasi ke Library Klien Cloud untuk Cloud Storage sebelum dapat menjalankan aplikasi di runtime Python 3. Perhatikan bahwa Anda hanya perlu memigrasikan aplikasi untuk menggunakan library klien yang baru. Semua objek data dan izin di bucket Cloud Storage yang ada tidak berubah, dan Anda dapat mengakses bucket yang ada menggunakan library klien baru.

Perbandingan Library Klien Cloud dan App Engine

Kesamaan:

  • Library Klien Cloud mendukung semua fitur Cloud Storage yang diaktifkan oleh library klien App Engine, seperti membaca, menulis, menghapus, dan membuat daftar objek. Migrasi hanya memerlukan perubahan kecil pada kode Anda.

    Library Klien Cloud juga mendukung fitur tambahan, seperti membuat dan memberi label bucket, serta mengambil versi objek yang lebih lama.

Perbedaan:

  • Di library App Engine, fungsi yang mengambil daftar objek berfungsi secara asinkron. Library Klien Cloud tidak menyediakan fungsi asinkron untuk membuat daftar objek, meskipun Anda dapat menggunakan paging dan melakukan iterasi pada sekumpulan kecil objek.

  • Library klien App Engine mengharuskan Anda menggunakan daftar kontrol akses (ACL) untuk mengontrol akses ke bucket dan objek. Namun, Cloud Storage dan Library Klien Cloud mendukung dua sistem untuk memberi pengguna izin mengakses bucket dan objek Anda: ACL dan akses level bucket seragam. Akses level bucket seragam memberikan pengalaman kontrol akses yang lebih sederhana dan konsisten di semua resource Cloud Anda.

    Semua ACL yang Anda gunakan dengan library klien App Engine tetap berlaku untuk bucket yang ada setelah Anda bermigrasi ke Library Klien Cloud, dan Anda dapat terus menggunakan ACL jika diperlukan.

    Jika akses level bucket yang seragam memenuhi kebutuhan Anda, sebaiknya gunakan sistem yang lebih sederhana ini untuk bucket baru yang Anda buat. Meskipun Anda dapat mengonversi bucket yang ada untuk menggunakan akses level bucket seragam, hal ini mungkin memerlukan perubahan signifikan pada cara aplikasi Anda mengamankan akses ke objek penyimpanannya.

Contoh kode:

Sebelum memulai migrasi

Jika Anda belum melakukannya, siapkan lingkungan pengembangan Python Anda untuk menggunakan versi Python yang kompatibel dengan Google Cloud, dan instal alat pengujian untuk membuat lingkungan Python yang terisolasi.

Memahami izin Cloud Storage

Secara default, akun layanan default yang dibuat otomatis pada aplikasi Anda memiliki hak istimewa baca dan tulis ke bucket dalam project Anda, dan aplikasi memiliki hak penuh atas objek yang dibuatnya, baik sebelum maupun setelah migrasi.

Jika Anda menggunakan akun layanan atau akun pengguna lain untuk mengamankan akses ke bucket dan objek Cloud Storage, pastikan Anda terus menggunakan akun dan teknik autentikasi yang sama sebelum dan sesudah migrasi.

Ringkasan proses migrasi

Untuk memigrasikan aplikasi Python Anda agar dapat menggunakan Library Klien Cloud untuk Cloud Storage, bukan library klien App Engine:

  1. Instal Library Klien Cloud untuk Cloud Storage.

  2. Update kode Anda untuk menggunakan Library Klien Cloud.

  3. Uji update Anda.

  4. Deploy aplikasi Anda ke App Engine.

Menginstal Library Klien Cloud untuk Cloud Storage

Agar Library Klien Cloud untuk Cloud Storage tersedia bagi aplikasi Anda saat dijalankan di App Engine:

  1. Update file app.yaml:

    1. Jika Anda menggunakan Library Klien Cloud, tambahkan versi terbaru library grpcio dan setuptools.
    2. Tambahkan library ssl karena diperlukan oleh Cloud Storage.

    Berikut adalah contoh file app.yaml:

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: 1.0.0
    - name: setuptools
      version: 36.6.0
    - name: ssl
      version: latest
    

    Beberapa library klien tidak memerlukan library SSL. Jika Anda tidak menyertakan library SSL untuk library klien yang membutuhkannya, Anda akan melihat error SSL di Logs Explorer saat aplikasi menerima permintaan.

  2. Update file requirements.txt dengan menambahkan Library Klien Cloud untuk Cloud Storage ke daftar dependensi Anda:

    google-cloud-storage==1.24.1
    

    Sebaiknya gunakan library klien Cloud Storage versi 1.24.1 karena mendukung aplikasi Python 2.7.

    Lalu, jalankan pip install -t lib -r requirements.txt untuk mengupdate daftar library yang tersedia untuk aplikasi Anda.

  3. Untuk aplikasi Python 2, jika aplikasi Anda menggunakan library bawaan atau yang disalin, Anda harus menentukan jalur tersebut dalam file appengine_config.py:

    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set PATH to your libraries folder.
    PATH = 'lib'
    # Add libraries installed in the PATH folder.
    vendor.add(PATH)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(PATH)
    

    File appengine_config.py dalam contoh sebelumnya mengasumsikan bahwa folder lib berada di direktori kerja saat ini. Jika Anda tidak dapat menjamin bahwa lib akan selalu berada di direktori kerja saat ini, tentukan jalur lengkap ke folder lib. Contoh:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
    

Mengupdate kode Anda untuk menggunakan Library Klien Cloud

Membuat Klien Cloud Storage

Agar dapat menggunakan Library Klien Cloud untuk Cloud Storage, buat objek Client. Klien berisi kredensial dan data lain yang diperlukan untuk terhubung ke Cloud Storage. Contoh:

from google.cloud import storage

client = storage.Client()

Dalam skenario otorisasi default yang dijelaskan sebelumnya, klien Cloud Storage berisi kredensial dari akun layanan default App Engine, yang diotorisasi untuk berinteraksi dengan bucket dan objek project Anda. Jika Anda tidak menangani skenario default ini, lihat Kredensial Default Aplikasi (ADC) untuk mengetahui informasi tentang cara memberikan kredensial.

Menggunakan metode Library Klien Cloud

Tabel berikut merangkum metode mana dari Library Klien Cloud yang akan digunakan saat mengimplementasikan fitur Cloud Storage tertentu.

Fitur Cloud Storage Metode klien Cloud
Membuat daftar objek di bucket Client.list_blobs

Lihat contoh kode sederhana dan contoh mode direktori emulasi.

Untuk menjelajahi daftar objek, gunakan properti pages dari objek iterator yang ditampilkan oleh Client.list_blobs.

Menulis ke penyimpanan blob.upload_from_file
blob.upload_from_filename
blob.upload_from_string

Lihat contoh kode.

Menentukan ACL Untuk menerapkan ACL yang telah ditetapkan, gunakan parameter predefined_acl saat membuat bucket atau membuat objek.

Untuk kontrol yang lebih mendetail, gunakan bucket.acl.reload() atau blob.acl.reload() untuk mengambil ACL apa pun yang saat ini ditentukan. Lalu, gunakan metode ACL untuk menambahkan atau menghapus ACL. Lihat contoh kode.

Membaca dari penyimpanan blob.download_to_file
blob.download_to_filename
blob.download_as_string

Lihat contoh kode.

Menghapus objek blob.delete

Lihat contoh kode.

Salin objek bucket.copy_blob

Lihat contoh kode.

Membaca metadata untuk sebuah objek blob.propertyname
dan
blob.metadata

Lihat contoh kode.

Menguji update Anda

Anda dapat menguji update aplikasi di lingkungan lokal, tetapi semua permintaan Cloud Storage harus dikirim melalui internet ke bucket Cloud Storage yang sebenarnya. App Engine maupun Cloud Storage tidak menyediakan emulator Cloud Storage.

Untuk informasi selengkapnya tentang menguji aplikasi Python 2, lihat Menggunakan server pengembangan lokal.

Untuk mengetahui informasi selengkapnya tentang pengujian aplikasi Python 3, lihat Menguji dan men-deploy aplikasi Anda.

Men-deploy aplikasi Anda

Setelah siap men-deploy aplikasi, Anda harus:

  1. Menguji aplikasi di App Engine.

  2. Jika aplikasi berjalan tanpa error, gunakan pemisahan traffic untuk meningkatkan traffic aplikasi yang diupdate secara perlahan. Pantau aplikasi dengan cermat untuk menemukan masalah sebelum merutekan lebih banyak traffic ke aplikasi yang diupdate.