1. Ringkasan
Serangkaian codelab Serverless Migration Station (tutorial praktik mandiri) dan video terkait bertujuan untuk membantu developer serverless Google Cloud memodernisasi aplikasi mereka dengan memandu mereka melalui satu atau beberapa migrasi, terutama beralih dari layanan lama. Dengan melakukannya, aplikasi Anda akan lebih portabel dan Anda akan memiliki lebih banyak opsi dan fleksibilitas, sehingga Anda dapat berintegrasi dengan dan mengakses berbagai produk Cloud serta mengupgrade 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 di tempat lain jika berlaku.
Sebelumnya, developer diwajibkan untuk bermigrasi dari "layanan gabungan" lama App Engine seperti Datastore dan Memcache sebelum mereka dapat mengupgrade versi bahasa, dua upaya yang berpotensi sulit secara berurutan. Dengan menyediakan banyak layanan paket utama di layanan App Engine generasi ke-2, developer kini dapat mem-porting aplikasi mereka ke runtime terbaru sambil terus menggunakan (sebagian besar) layanan paket. Codelab ini memandu Anda mengupgrade aplikasi contoh dari Python 2 ke 3 sambil mempertahankan penggunaan layanan paket Datastore (melalui library App Engine NDB). Penggunaan sebagian besar layanan yang disertakan hanya memerlukan update kecil pada kode seperti yang akan dibahas dalam tutorial ini, tetapi ada layanan lain yang memerlukan perubahan lebih ekstensif; layanan ini akan dibahas dalam "Bagian 2", modul dan codelab lanjutan.
Anda akan mempelajari cara
- Mentransfer aplikasi App Engine sampel dari Python 2 ke 3
- Perbarui konfigurasi aplikasi untuk menyertakan SDK App Engine
- Menambahkan kode SDK ke aplikasi yang mendukung layanan paket di runtime generasi ke-2 seperti Python 3
Yang Anda butuhkan
- Project Google Cloud dengan akun penagihan GCP yang aktif
- Keterampilan Python dasar
- Pengetahuan perintah Linux umum yang berfungsi
- Pengetahuan dasar tentang mengembangkan dan men-deploy aplikasi App Engine
- Aplikasi App Engine Modul 1 yang berfungsi (selesaikan codelab-nya [direkomendasikan] atau salin aplikasi dari repo)
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Python?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
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 nyaman, pengguna menjadi khawatir tentang portabilitas aplikasi mereka saat menggunakan API eksklusif yang mengikat mereka ke App Engine dan ingin aplikasi mereka lebih portabel. Hal ini, ditambah dengan fakta bahwa banyak layanan yang dipaketkan ini telah berkembang menjadi produk Cloud mandiri mereka sendiri, mendorong tim App Engine untuk meluncurkan platform generasi berikutnya pada tahun 2018 tanpa layanan tersebut.
Sekarang, developer Python 2 sangat ingin mengupgrade ke Python 3. Aplikasi 2.x yang menggunakan layanan paket memerlukan migrasi dari layanan tersebut sebelum aplikasinya dapat di-porting ke 3.x, yang menunjukkan sepasang migrasi paksa secara berurutan, yang berpotensi sulit juga. Untuk membantu transisi ini, tim App Engine memperkenalkan pada Musim Gugur 2021 "wormhole" ke masa lalu, yang memungkinkan aplikasi yang berjalan di runtime generasi berikutnya mengakses banyak layanan paket tersebut. Meskipun rilis ini tidak mencakup semua layanan yang tersedia di runtime asli, layanan utama seperti Datastore, Task Queue, dan Memcache, tersedia.
Codelab ini menunjukkan perubahan yang diperlukan agar Anda dapat mengupgrade aplikasi ke Python 3 sambil mempertahankan penggunaan layanan paket. Tujuannya adalah agar aplikasi Anda berjalan di runtime terbaru, sehingga Anda dapat bermigrasi dari layanan paket ke layanan mandiri Cloud yang setara atau alternatif pihak ketiga sesuai jadwal Anda sendiri, dan bukan menjadi penghalang untuk upgrade 3.x. Meskipun migrasi dari layanan paket tidak lagi diperlukan, melakukannya akan memberi Anda lebih banyak portabilitas dan fleksibilitas dalam hal tempat aplikasi Anda dapat dihosting, termasuk beralih ke platform yang mungkin lebih cocok untuk beban kerja Anda, atau cukup tetap menggunakan App Engine sambil mengupgrade ke rilis bahasa yang lebih modern seperti yang dijelaskan di atas.
Aplikasi contoh Python 2 Modul 1 menggunakan layanan paket Datastore melalui App Engine NDB. Aplikasi telah memigrasikan framework dari webapp2 ke Flask—diselesaikan di codelab Modul 1—tetapi dengan penggunaan Datastore yang tetap utuh.
Tutorial ini mencakup langkah-langkah berikut:
- Penyiapan/Prakerja
- Update konfigurasi
- Mengubah kode aplikasi
3. Penyiapan/Prakerja
Bagian ini menjelaskan cara:
- Menyiapkan project Cloud
- Dapatkan aplikasi contoh dasar pengukuran
- Deploy (ulang) dan validasi aplikasi dasar pengukuran
Langkah-langkah ini memastikan Anda memulai dengan kode yang berfungsi.
1. Siapkan project
Jika Anda sudah menyelesaikan codelab Modul 1, sebaiknya gunakan kembali project (dan kode) yang sama. Atau, buat project Cloud baru atau gunakan kembali project lain yang sudah ada. Pastikan project memiliki akun penagihan yang aktif dan layanan App Engine 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 "MEMULAI". Codelab ini akan memandu Anda melalui setiap langkah, yang diakhiri dengan kode yang menyerupai kode di folder repo Modul 7 "FINISH".
- START: Folder Modul 1 (Python 2)
- FINISH: Folder Module 1b (Python 3)
- Seluruh repo (untuk melakukan clone atau mendownload file ZIP)
Terlepas dari aplikasi Modul 1 yang Anda gunakan, folder akan terlihat seperti di bawah, mungkin dengan folder lib juga:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. Deploy (ulang) aplikasi dasar pengukuran
Lakukan langkah-langkah berikut untuk (men)deploy ulang aplikasi Modul 1:
- Hapus folder
libjika ada dan jalankan:pip install -t lib -r requirements.txtuntuk mengisi ulanglib. Anda mungkin perlu menggunakan perintahpip2jika Anda telah menginstal Python 2 dan 3. - Pastikan Anda telah menginstal dan menginisialisasi alat command line
gcloudserta meninjau penggunaannya. - Tetapkan project Cloud Anda dengan
gcloud config set projectPROJECT_IDjika Anda tidak ingin memasukkanPROJECT_IDdengan setiap perintahgcloudyang dikeluarkan. - Men-deploy aplikasi contoh dengan
gcloud app deploy - Pastikan aplikasi Modul 1 berjalan seperti yang diharapkan tanpa masalah menampilkan kunjungan terbaru (diilustrasikan di bawah)

4. Update konfigurasi
Setelah berhasil menjalankan langkah-langkah tersebut dan melihat aplikasi web Anda berfungsi, Anda siap mem-porting aplikasi ini ke Python 3, dimulai dengan config.
Tambahkan SDK ke requirements.txt
Runtime App Engine Python 3 secara signifikan mengurangi overhead untuk menggunakan library pihak ketiga. Anda hanya perlu mencantumkannya di requirements.txt. Untuk menggunakan layanan paket di Python 3, tambahkan paket App Engine SDK, appengine-python-standard ke dalamnya. Paket SDK bergabung dengan Flask dari Modul 1:
flask
appengine-python-standard
Perbarui app.yaml
Ikuti langkah-langkah di bawah untuk menerapkan perubahan konfigurasi pada file app.yaml Anda:
- Ganti direktif
runtimedengan rilis Python 3 yang didukung; misalnya, tentukanpython310untuk Python 3.10. - Hapus perintah
threadsafedanapi_versionkarena keduanya tidak digunakan di Python 3. - Hapus seluruh bagian
handlerskarena aplikasi ini hanya memiliki script handler. Jika aplikasi Anda memiliki penyedia file statis, biarkan tetap utuh dihandlers. - Runtime Python 3 tidak mendukung library pihak ketiga bawaan seperti yang dilakukan runtime Python 2. Jika aplikasi Anda memiliki bagian
librariesdiapp.yaml, hapus seluruh bagian. (Paket yang diperlukan hanya perlu dicantumkan direquirements.txtseperti library non-bawaan.) Aplikasi contoh kita tidak memiliki bagianlibraries, jadi lanjutkan ke langkah berikutnya. - Buat set direktif
app_engine_apisyang ditetapkan ketrueuntuk menggunakannya—tindakan ini sesuai dengan penambahan paket App Engine SDK kerequirements.txtdi atas.
Ringkasan perubahan yang perlu 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 saja. Demikian pula, karena semua library pihak ketiga diinstal secara otomatis selama proses build, Anda tidak perlu menyalin atau menjualnya, yang berarti tidak ada lagi perintah pip install maupun folder lib, jadi hapus folder tersebut. Merangkum:
- Hapus file
appengine_config.py - Menghapus folder
lib
Dengan demikian, semua perubahan konfigurasi yang diperlukan telah selesai.
5. Mengubah kode aplikasi
Mengakses sebagian besar layanan yang dipaketkan yang tersedia di lingkungan runtime Python 3 memerlukan sedikit kode yang membungkus objek aplikasi Web Server Gateway Interface (WSGI) di main.py. Fungsi wrapper adalah google.appengine.api.wrap_wsgi_app(), dan Anda menggunakannya dengan mengimpornya dan membungkus objek WSGI Anda dengannya. Buat perubahan di bawah untuk mencerminkan update 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 pembungkus WSGI untuk framework Python lainnya.
Meskipun contoh ini berfungsi untuk memberi aplikasi Anda akses ke sebagian besar layanan paket dalam Python 3, layanan lain seperti Blobstore dan Mail memerlukan kode tambahan. Kita akan membahas contoh tersebut dalam modul migrasi lainnya.
Dengan demikian, semua perubahan yang diperlukan untuk menambahkan penggunaan layanan paket App Engine ke aplikasi contoh Modul 1 telah selesai. Aplikasi ini sudah kompatibel dengan Python 2 dan 3, jadi tidak ada perubahan tambahan untuk mentransfernya ke Python 3 selain yang telah Anda lakukan dalam konfigurasi. Langkah terakhir: deploy aplikasi yang telah diubah ini ke runtime Python 3 App Engine generasi berikutnya dan pastikan update berhasil.
6. Ringkasan/Pembersihan
Bagian ini mengakhiri codelab ini dengan men-deploy aplikasi, memverifikasi bahwa aplikasi berfungsi seperti yang diinginkan dan dalam output yang ditampilkan. Setelah validasi aplikasi, lakukan pembersihan dan pertimbangkan langkah selanjutnya.
Men-deploy dan memverifikasi aplikasi
Deploy aplikasi Python 3 dengan gcloud app deploy, dan konfirmasi bahwa aplikasi berfungsi seperti di Python 2. Tidak ada perubahan fungsi, sehingga outputnya harus sama dengan aplikasi Modul 1:

Catatan akhir
- Bandingkan apa yang Anda miliki dengan yang ada di folder Modul 1b (FINISH). Jika Anda melakukan kesalahan di sepanjang proses, sesuaikan sesuai kebutuhan.
- Bandingkan Modul 0
main.pyberdampingan dengan Modul 1bmain.pydi halaman ini jika aplikasi Anda masih menggunakanwebapp2, lalu lakukan codelab Modul 1 untuk mempelajari cara bermigrasi dariwebapp2ke Flask.
Selamat karena telah mengambil langkah pertama untuk mentransfer aplikasi App Engine Python 2 ke Python 3 sekaligus mempertahankan penggunaan layanan paketnya saat ini.
Pembersihan
Umum
Jika Anda sudah selesai untuk saat ini, sebaiknya nonaktifkan aplikasi App Engine untuk menghindari penagihan. Namun, jika Anda ingin menguji atau bereksperimen lebih lanjut, platform App Engine memiliki kuota gratis, sehingga selama Anda tidak melebihi tingkat penggunaan tersebut, Anda tidak akan dikenai biaya. Biaya tersebut adalah 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 bagian "Khusus untuk codelab ini" di bawah.
Untuk pengungkapan penuh, men-deploy ke platform komputasi serverless Google Cloud seperti App Engine akan menimbulkan biaya build dan penyimpanan kecil. Cloud Build memiliki kuota gratisnya sendiri seperti halnya Cloud Storage. Penyimpanan gambar tersebut menggunakan sebagian kuota tersebut. Namun, Anda mungkin tinggal di wilayah yang tidak memiliki paket gratis tersebut, jadi perhatikan penggunaan penyimpanan Anda untuk meminimalkan potensi biaya. "Folder" Cloud Storage tertentu yang harus Anda tinjau meliputi:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- Link penyimpanan di atas bergantung pada
PROJECT_IDdan *LOC*Anda, misalnya, "us" jika aplikasi Anda dihosting di Amerika Serikat.
Di sisi lain, jika Anda tidak akan melanjutkan aplikasi ini atau codelab migrasi terkait lainnya dan ingin menghapus semuanya, hentikan project Anda.
Khusus untuk codelab ini
Layanan yang tercantum di bawah ini unik untuk codelab ini. Lihat dokumentasi setiap produk untuk mengetahui informasi selengkapnya:
- Layanan App Engine Datastore disediakan oleh Cloud Datastore (Cloud Firestore dalam mode Datastore) yang juga memiliki paket gratis; lihat halaman harganya untuk mengetahui informasi selengkapnya.
Langkah berikutnya
Ada beberapa arah yang dapat dipilih dari sini:
- Memperbarui kode menggunakan layanan paket yang memerlukan lebih banyak perubahan kode
- Bermigrasi dari paket layanan ke produk mandiri Cloud
- Bermigrasi dari App Engine ke platform serverless Cloud lainnya
Mengakses layanan paket lainnya seperti Blobstore, Mail, dan Deferred memerlukan lebih banyak perubahan kode. Modul migrasi yang berfokus pada peralihan dari layanan paket lama App Engine yang perlu dipertimbangkan meliputi:
- Modul 2: App Engine NDB ke Cloud NDB
- Modul 7-9: TaskQueue App Engine (tugas push) ke Cloud Tasks
- Modul 12-13: App Engine Memcache ke Cloud Memorystore
- Modul 15-16: App Engine Blobstore ke Cloud Storage
- Modul 18-19: App Engine TaskQueue (pull tasks) 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, ini adalah alasan yang baik untuk mempertimbangkan beralih ke Cloud Functions. Jika containerisasi telah menjadi bagian dari alur kerja pengembangan aplikasi Anda, terutama jika terdiri dari pipeline CI/CD (continuous integration/continuous delivery atau deployment), pertimbangkan untuk bermigrasi ke Cloud Run. Skenario ini dibahas dalam modul berikut:
- Bermigrasi dari App Engine ke Cloud Functions: lihat Modul 11
- Melakukan migrasi dari App Engine ke Cloud Run: lihat Modul 4 untuk mem-build aplikasi dalam container dengan Docker, atau Modul 5 untuk melakukannya tanpa container, pengetahuan Docker, atau
Dockerfile
Beralih ke platform serverless lain bersifat opsional, dan sebaiknya pertimbangkan opsi terbaik untuk aplikasi dan kasus penggunaan Anda sebelum melakukan perubahan apa pun.
Terlepas dari modul migrasi mana yang akan Anda pertimbangkan berikutnya, semua konten Serverless Migration Station (codelab, video, kode sumber [jika tersedia]) dapat diakses di repo open source-nya. README repo juga memberikan panduan tentang migrasi mana yang perlu dipertimbangkan dan "urutan" Modul Migrasi yang relevan.
7. Referensi lainnya
Di bawah ini tercantum resource tambahan bagi developer yang ingin mempelajari lebih lanjut Modul Migrasi ini atau yang terkait, serta produk terkait. Hal ini mencakup tempat untuk memberikan masukan tentang konten ini, link ke kode, dan berbagai bagian 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. Link tersebut juga dapat diakses dari repo untuk semua migrasi codelab App Engine.
Codelab | Python 2 | Python 3 |
T/A | ||
Modul 17 (codelab ini) | T/A | code (mod1b-flask) |
Referensi online
Berikut adalah referensi online yang mungkin relevan untuk tutorial ini:
Layanan paket App Engine
- Mengakses layanan paket di runtime generasi berikutnya Python 3
- Perbandingan berdampingan aplikasi Modul 0 (Python 2) vs. aplikasi Modul 1b (Python 3)
- Contoh wrapper objek WSGI framework web App Engine SDK
- Peluncuran dukungan untuk layanan paket App Engine di runtime generasi berikutnya (2021)
Dokumen umum App Engine
- Dokumentasi App Engine
- Runtime Python 2 App Engine (lingkungan standar)
- Menggunakan library bawaan App Engine di App Engine Python 2
- Runtime Python 3 App Engine (lingkungan standar)
- Perbedaan antara runtime Python 2 & 3 App Engine (lingkungan standar)
- Panduan migrasi aplikasi Python 2 ke 3 App Engine (lingkungan standar)
- Informasi harga dan kuota App Engine
- Peluncuran platform App Engine generasi kedua (2018)
- Dukungan jangka panjang untuk runtime lama
- Repositori contoh migrasi dokumentasi
- Repo contoh migrasi yang dikontribusikan komunitas
Informasi Cloud lainnya
- Python di Google Cloud Platform
- Library klien Python Google Cloud
- Paket "Selalu Gratis" Google Cloud
- Google Cloud SDK (alat command line
gcloud) - Semua dokumentasi Google Cloud
Video
- Serverless Migration Station
- Ekspedisi Tanpa Server
- Berlangganan Google Cloud Tech
- Subscribe ke Google Developers
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.