Memperluas dukungan untuk layanan paket App Engine: Bagian 1 (Modul 17)

1. Ringkasan

Rangkaian codelab Stasiun Migrasi Serverless (tutorial interaktif dan mandiri) dan video terkait bertujuan untuk membantu developer tanpa server Google Cloud memodernisasi aplikasi mereka dengan memandu mereka melalui satu atau beberapa migrasi, terutama yang beralih dari layanan lama. Dengan melakukannya, aplikasi Anda akan menjadi lebih portabel serta memberi Anda lebih banyak opsi dan fleksibilitas, sehingga Anda dapat berintegrasi dengan dan mengakses lebih banyak produk Cloud serta melakukan upgrade ke rilis bahasa yang lebih baru dengan lebih mudah. Meskipun awalnya berfokus pada pengguna Cloud paling awal, terutama developer App Engine (lingkungan standar), seri ini cukup luas untuk mencakup platform serverless lainnya seperti Cloud Functions dan Cloud Run, atau platform lainnya jika berlaku.

Sebelumnya, developer diwajibkan untuk melakukan migrasi dari "layanan paket" lama App Engine seperti Datastore dan Memcache sebelum mereka dapat mengupgrade versi bahasa, dua upaya yang berpotensi menantang secara berurutan. Dengan menyediakan banyak layanan paket kunci di layanan App Engine generasi ke-2, developer kini dapat mem-port aplikasi mereka ke runtime terbaru sambil terus menggunakan (sebagian besar) layanan yang dipaketkan. Codelab ini memandu Anda dalam mengupgrade aplikasi contoh dari Python 2 ke 3 sambil mempertahankan penggunaan layanan paket Datastore (melalui library NDB App Engine). Penggunaan sebagian besar layanan terpaket hanya memerlukan pembaruan kecil pada kode seperti yang akan dibahas dalam tutorial ini, namun ada yang lain yang memerlukan perubahan yang lebih luas; hal ini akan dibahas di "Bagian 2", modul tindak lanjut dan codelab.

Anda akan mempelajari cara

  • Mentransfer aplikasi App Engine contoh dari Python 2 ke 3
  • Memperbarui konfigurasi aplikasi untuk menyertakan SDK App Engine
  • Tambahkan kode SDK ke aplikasi yang mendukung layanan paket dalam runtime generasi ke-2 seperti Python 3

Yang Anda butuhkan

Survei

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman dengan Python?

Pemula Menengah Mahir

Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?

Pemula Menengah Mahir

2. Latar belakang

Layanan App Engine asli diluncurkan pada tahun 2008 dan dilengkapi dengan serangkaian API lama (sekarang dikenal sebagai layanan paket) untuk memudahkan developer membangun dan men-deploy aplikasi secara global. Layanan tersebut mencakup Datastore, Memcache, dan Task Queue. Meskipun praktis, pengguna menjadi khawatir dengan portabilitas aplikasi mereka saat menggunakan API eksklusif yang mengaitkan mereka dengan App Engine dan ingin aplikasi mereka menjadi lebih portabel. Ditambah dengan fakta bahwa banyak dari layanan paket ini yang mulai matang menjadi produk Cloud mandiri, tim App Engine dapat meluncurkan platform generasi berikutnya pada tahun 2018 tanpa layanan tersebut.

Maju cepat ke hari ini dengan developer Python 2 yang ingin mengupgrade ke Python 3. Aplikasi 2.x yang menggunakan layanan terpaket mengharuskan migrasi dari layanan tersebut sebelum aplikasi mereka dapat di-port ke 3.x, yang mewakili sepasang migrasi paksa secara berurutan, yang berpotensi menantang juga. Untuk membantu transisi ini, tim App Engine diperkenalkan pada Musim Gugur 2021 sebagai "wormhole" ke masa lalu, sehingga aplikasi yang berjalan pada runtime generasi berikutnya dapat mengakses banyak layanan yang dipaketkan tersebut. Meskipun rilis ini tidak menyertakan semua layanan yang tersedia dalam runtime asli, sejumlah pemain utama seperti Datastore, Task Queue, dan Memcache, tersedia.

Codelab ini menunjukkan perubahan yang diperlukan agar Anda dapat mengupgrade aplikasi ke Python 3 sekaligus mempertahankan penggunaan layanan yang dipaketkan. Tujuannya adalah untuk menjalankan aplikasi Anda pada runtime terbaru, sehingga Anda dapat bermigrasi dari layanan yang dipaketkan ke layanan mandiri Cloud yang setara atau alternatif pihak ketiga sesuai jadwal Anda sendiri, bukan menjadikannya pemblokir untuk upgrade 3.x. Meskipun migrasi dari layanan paket tidak lagi diperlukan, melakukan hal tersebut memberi Anda lebih banyak portabilitas dan fleksibilitas terkait tempat aplikasi Anda dapat dihosting, termasuk beralih ke platform yang dapat melayani workload Anda dengan lebih baik, atau hanya tetap menggunakan App Engine sambil mengupgrade ke rilis bahasa yang lebih modern seperti yang baru saja dijelaskan.

Aplikasi contoh Python 2 Modul 1 memanfaatkan layanan paket Datastore melalui App Engine NDB. Aplikasi ini telah memigrasikan framework dari webapp2 ke Flask—selesai di codelab Modul 1—tetapi dengan penggunaan Datastore tetap utuh.

Tutorial ini menampilkan langkah-langkah berikut:

  1. Penyiapan/Prakerja
  2. Update konfigurasi
  3. Mengubah kode aplikasi

3. Penyiapan/Prakerja

Bagian ini menjelaskan cara:

  1. Menyiapkan project Cloud
  2. Dapatkan aplikasi contoh dasar pengukuran
  3. Deploy (ulang) dan validasi aplikasi dasar pengukuran

Langkah-langkah ini memastikan Anda memulai dengan kode yang berfungsi.

1. Siapkan project

Jika Anda telah menyelesaikan codelab Modul 1, sebaiknya gunakan kembali project (dan kode) yang sama. Atau, buat project Cloud baru atau gunakan kembali project yang sudah ada. Pastikan project memiliki akun penagihan aktif yang layanan App Engine-nya telah diaktifkan.

2. Dapatkan aplikasi contoh dasar pengukuran

Salah satu prasyarat untuk codelab ini adalah memiliki aplikasi App Engine Modul 1 yang berfungsi: selesaikan codelab Modul 1 (direkomendasikan) atau salin aplikasi Modul 1 dari repo. Baik Anda menggunakan kode Anda atau kode kami, kode Modul 1 adalah tempat kita akan "MULAI". Codelab ini memandu Anda melalui setiap langkah, yang diakhiri dengan kode yang mirip dengan yang ada di folder repo Modul 7 "FINISH".

Terlepas dari aplikasi Modul 1 yang Anda gunakan, foldernya akan terlihat seperti di bawah ini, mungkin juga dengan folder lib:

$ ls
README.md               appengine_config.py     requirements.txt
app.yaml                main.py                 templates

3. Deploy (ulang) aplikasi dasar pengukuran

Jalankan langkah-langkah berikut untuk men-deploy (ulang) aplikasi Modul 1:

  1. Hapus folder lib jika ada dan jalankan: pip install -t lib -r requirements.txt untuk mengisi ulang lib. Anda mungkin perlu menggunakan perintah pip2 jika sudah menginstal Python 2 dan 3.
  2. Pastikan Anda telah menginstal dan melakukan inisialisasi alat command line gcloud dan meninjau penggunaannya.
  3. Tetapkan project Cloud dengan gcloud config set project PROJECT_ID jika Anda tidak ingin memasukkan PROJECT_ID dengan setiap perintah gcloud yang dikeluarkan.
  4. Men-deploy aplikasi contoh dengan gcloud app deploy
  5. Pastikan aplikasi Modul 1 berjalan seperti yang diharapkan tanpa masalah saat menampilkan kunjungan terbaru (diilustrasikan di bawah)

a7a9d2b80d706a2b.png

4. Update konfigurasi

Setelah Anda berhasil menjalankan langkah-langkah tersebut dan melihat aplikasi web Anda berfungsi, Anda siap untuk mem-port aplikasi ini ke Python 3, dimulai dengan config.

Menambahkan SDK ke requirements.txt

Runtime App Engine Python 3 mengurangi overhead untuk menggunakan library pihak ketiga secara signifikan. Yang diperlukan hanyalah mencantumkannya di requirements.txt. Untuk menggunakan layanan paket di Python 3, tambahkan paket SDK App Engine, appengine-python-standard ke paket tersebut. Paket SDK menggabungkan Flask dari Modul 1:

flask
appengine-python-standard

Perbarui app.yaml

Ikuti langkah-langkah di bawah ini untuk menerapkan perubahan konfigurasi ke file app.yaml Anda:

  1. Mengganti perintah runtime dengan rilis Python 3 yang didukung; misalnya, tentukan python310 untuk Python 3.10.
  2. Hapus perintah threadsafe dan api_version karena keduanya tidak digunakan di Python 3.
  3. Hapus bagian handlers sepenuhnya karena aplikasi ini hanya memiliki pengendali skrip. Jika aplikasi Anda memiliki handler file statis, jangan ubah pengendali tersebut di handlers.
  4. Runtime Python 3 tidak mendukung library pihak ketiga bawaan seperti yang dimiliki runtime Python 2. Jika aplikasi Anda memiliki bagian libraries di app.yaml, hapus seluruh bagian tersebut. (Paket yang diperlukan hanya perlu dicantumkan di requirements.txt seperti library non-bawaan.) Aplikasi contoh kita tidak memiliki bagian libraries, jadi lanjutkan ke langkah berikutnya.
  5. Buat perintah app_engine_apis yang ditetapkan ke true untuk menggunakannya—hal ini sama dengan menambahkan paket App Engine SDK ke requirements.txt di atas.

Ringkasan perubahan yang diperlukan untuk dilakukan pada app.yaml:

SEBELUM:

runtime: python27
threadsafe: yes
api_version: 1

handlers:
- url: /.*
  script: main.app

SETELAH:

runtime: python310
app_engine_apis: true

File konfigurasi lainnya

Karena semua paket pihak ketiga hanya perlu dicantumkan di requirements.txt, kecuali jika Anda memiliki sesuatu yang khusus di appengine_config.py, paket tersebut tidak diperlukan. Jadi, hapus paket tersebut. Demikian pula, karena semua library pihak ketiga diinstal secara otomatis selama proses build, Anda tidak perlu menyalin atau mem-vendornya. Artinya, tidak ada lagi perintah pip install atau folder lib. Jadi, hapus library ini. Merangkum:

  • Hapus file appengine_config.py
  • Hapus folder lib

Ini mengakhiri semua perubahan konfigurasi yang diperlukan.

5. Mengubah kode aplikasi

Mengakses sebagian besar layanan paket yang tersedia di lingkungan runtime Python 3 memerlukan kode pendek yang menggabungkan objek aplikasi Web Server Gateway Interface (WSGI) di main.py. Fungsi wrapper adalah google.appengine.api.wrap_wsgi_app(), dan Anda menggunakannya dengan mengimpornya serta menggabungkan objek WSGI dengannya. Lakukan perubahan di bawah ini guna mencerminkan pembaruan yang diperlukan untuk Flask di main.py:

SEBELUM:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

app = Flask(__name__)

SETELAH:

from flask import Flask, render_template, request
from google.appengine.api import wrap_wsgi_app
from google.appengine.ext import ndb

app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)

Lihat dokumentasi untuk contoh penggabungan WSGI untuk framework Python lainnya.

Meskipun contoh ini berfungsi untuk memberi aplikasi Anda akses ke sebagian besar layanan yang dipaketkan di Python 3, layanan lainnya seperti Blobstore dan Mail memerlukan kode tambahan. Kita akan membahas contoh tersebut dalam modul migrasi lainnya.

Hal ini mengakhiri semua perubahan yang diperlukan untuk menambahkan penggunaan layanan paket App Engine ke aplikasi contoh Modul 1. Aplikasi ini sudah kompatibel dengan Python 2 dan 3, jadi tidak ada perubahan tambahan untuk mem-port-nya ke Python 3 selain yang sudah Anda lakukan di konfigurasi. Langkah terakhir: deploy aplikasi yang telah dimodifikasi ini ke runtime App Engine Python 3 generasi berikutnya dan konfirmasi bahwa update berhasil.

6. Ringkasan/Pembersihan

Bagian ini mengakhiri codelab ini dengan men-deploy aplikasi, yang memverifikasi bahwa aplikasi berfungsi sebagaimana mestinya dan dalam output yang ditampilkan. Setelah validasi aplikasi, lakukan semua pembersihan dan pertimbangkan langkah berikutnya.

Men-deploy dan memverifikasi aplikasi

Deploy aplikasi Python 3 dengan gcloud app deploy, dan pastikan aplikasi tersebut berfungsi seperti di Python 2. Tidak ada fungsi yang berubah, sehingga output-nya harus identik dengan aplikasi Modul 1:

a7a9d2b80d706a2b.png

Catatan akhir

  • Bandingkan apa yang Anda miliki dengan apa yang ada di folder Modul 1b (SELESAI) Jika Anda melakukan kesalahan dalam prosesnya dan menyesuaikannya sesuai kebutuhan.
  • Bandingkan Module 0 main.py secara berdampingan dengan Modul 1b main.py di halaman ini jika aplikasi Anda masih menggunakan webapp2, kemudian lakukan codelab Modul 1 untuk mempelajari cara bermigrasi dari webapp2 ke Flask.

Selamat karena telah mengambil langkah pertama untuk melakukan porting aplikasi Python 2 App Engine ke Python 3 sambil mempertahankan penggunaan layanan paket mereka saat ini.

Pembersihan

Umum

Jika sudah selesai untuk saat ini, sebaiknya nonaktifkan aplikasi App Engine agar tidak menimbulkan penagihan. Namun, jika Anda ingin menguji atau bereksperimen lagi, platform App Engine memiliki kuota gratis, dan asalkan Anda tidak melebihi tingkat penggunaan tersebut, Anda tidak akan dikenai biaya. Itu berlaku untuk komputasi, tetapi mungkin juga ada biaya untuk layanan App Engine yang relevan. Jadi, periksa halaman harganya untuk mengetahui informasi selengkapnya. Jika migrasi ini melibatkan layanan Cloud lainnya, layanan tersebut akan ditagih secara terpisah. Dalam kedua kasus tersebut, jika berlaku, lihat "Khusus untuk codelab ini" di bawah ini.

Untuk pengungkapan penuh, deployment ke platform komputasi serverless Google Cloud seperti App Engine akan menimbulkan biaya build dan penyimpanan yang kecil. Cloud Build memiliki kuota gratisnya sendiri seperti halnya Cloud Storage. Penyimpanan gambar tersebut menghabiskan sebagian kuota tersebut. Namun, Anda mungkin tinggal di region yang tidak memiliki paket gratis tersebut, jadi perhatikan penggunaan penyimpanan Anda untuk meminimalkan potensi biaya. "Folder" Cloud Storage tertentu yang harus Anda tinjau mencakup:

  • console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • Link penyimpanan di atas bergantung pada PROJECT_ID dan *LOC*asi Anda, misalnya, "us" jika aplikasi Anda dihosting di AS.

Di sisi lain, jika Anda tidak akan melanjutkan aplikasi ini atau codelab migrasi terkait lainnya dan ingin menghapus semuanya sepenuhnya, nonaktifkan project Anda.

Khusus untuk codelab ini

Layanan yang tercantum di bawah bersifat unik untuk codelab ini. Lihat dokumentasi setiap produk untuk mengetahui informasi selengkapnya:

Langkah berikutnya

Ada beberapa arah yang bisa dilakukan:

  1. Perbarui kode menggunakan layanan terpaket yang memerlukan lebih banyak perubahan kode
  2. Melakukan migrasi dari layanan paket ke produk mandiri Cloud
  3. Bermigrasi dari App Engine ke platform serverless Cloud lainnya

Perlu lebih banyak perubahan kode untuk mengakses layanan paket lainnya seperti Blobstore, Mail, dan Deferred. Modul migrasi yang berfokus untuk beralih dari layanan paket lama App Engine yang perlu dipertimbangkan meliputi:

  • Modul 2: NDB App Engine ke Cloud NDB
  • Modul 7-9: TaskQueue App Engine (tugas push) ke Cloud Tasks
  • Modul 12-13: Memcache App Engine ke Cloud Memorystore
  • Modul 15-16: Blobstore App Engine ke Cloud Storage
  • Modul 18-19: TaskQueue App Engine (tugas pull) ke Cloud Pub/Sub

App Engine bukan lagi satu-satunya platform serverless di Google Cloud. Jika Anda memiliki aplikasi App Engine kecil atau aplikasi yang memiliki fungsi terbatas dan ingin mengubahnya menjadi microservice mandiri, atau Anda ingin memecah aplikasi monolitik menjadi beberapa komponen yang dapat digunakan kembali, berikut adalah alasan bagus untuk mempertimbangkan beralih ke Cloud Functions. Jika containerization telah menjadi bagian dari alur kerja pengembangan aplikasi Anda, terutama jika terdiri dari pipeline CI/CD (continuous integration/continuous delivery atau deployment), sebaiknya lakukan migrasi ke Cloud Run. Skenario ini dibahas dalam modul berikut:

  • Bermigrasi dari App Engine ke Cloud Functions: lihat Modul 11
  • Bermigrasi dari App Engine ke Cloud Run: lihat Modul 4 untuk menyimpan aplikasi Anda ke dalam container dengan Docker, atau Modul 5 untuk melakukannya tanpa container, pengetahuan Docker, atau Dockerfile

Beralih ke platform serverless lainnya bersifat opsional, dan sebaiknya pertimbangkan opsi terbaik untuk aplikasi dan kasus penggunaan Anda sebelum melakukan perubahan apa pun.

Terlepas dari modul migrasi yang Anda pertimbangkan berikutnya, semua konten Stasiun Migrasi Serverless (codelab, video, kode sumber [jika tersedia]) dapat diakses di repositori open source-nya. README repo juga memberikan panduan tentang migrasi yang perlu dipertimbangkan dan "urutan" yang relevan Modul Migrasi.

7. Referensi lainnya

Di bawah ini adalah referensi tambahan untuk developer yang mempelajari lebih lanjut Modul Migrasi ini atau terkait serta produk terkait. Ini mencakup tempat untuk memberikan masukan tentang konten ini, link ke kode, dan berbagai dokumentasi yang mungkin berguna bagi Anda.

Masalah/masukan Codelab

Jika Anda menemukan masalah dengan codelab ini, telusuri masalah Anda terlebih dahulu sebelum mengajukan masalah. Link untuk menelusuri dan membuat masalah baru:

Referensi migrasi

Link ke folder repo untuk Modul 1 (START) dan Modul 1b (FINISH) dapat ditemukan pada tabel di bawah. Library tersebut juga dapat diakses dari repo untuk semua migrasi codelab App Engine.

Codelab

Python 2

Python 3

Modul 1

kode

T/A

Modul 17 (codelab ini)

T/A

code (mod1b-flask)

Sumber daya {i>online<i}

Di bawah ini adalah referensi online yang mungkin relevan untuk tutorial ini:

Layanan paket App Engine

Dokumen umum App Engine

Informasi Cloud lainnya

Video

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.