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.
Codelab ini mengajarkan cara menyertakan dan menggunakan App Engine Memcache ke aplikasi contoh dari codelab Modul 1. Kita akan menambahkan penggunaan Memcache dalam tutorial Modul 12 ini, lalu bermigrasi ke Cloud Memorystore di Modul 13.
Anda akan mempelajari cara
- Menggunakan API/library Memcache App Engine
- Menambahkan caching ke aplikasi NDB App Engine Flask Python 2 dasar
Yang Anda butuhkan
- Project Google Cloud Platform 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
Untuk bermigrasi dari App Engine Memcache, tambahkan penggunaannya ke aplikasi Flask dan App Engine NDB yang ada yang dihasilkan dari codelab Modul 1. Aplikasi contoh menampilkan sepuluh kunjungan terbaru kepada pengguna. Jika pengguna yang sama me-refresh browsernya, tidaklah optimal untuk terus membuat entity Kunjungan baru dan mengambil kunjungan terbaru dari Datastore, jadi kita akan meng-cache kunjungan terbaru tersebut.
Jika pengunjung yang sama membuka halaman, kunjungan tersebut akan ditampilkan dari cache. Jika pengguna baru mengunjungi situs atau satu jam telah berlalu, cache akan dihapus dan diganti dengan entri terbaru (belum lagi Kunjungan baru yang tercatat). Dengan penerapan integrasi App Engine Memcache ini, kita dapat memigrasikannya ke Cloud Memorystore di codelab berikutnya (Modul 13).
Tutorial ini mencakup langkah-langkah berikut:
- Penyiapan/Prakerja
- Update konfigurasi
- Mengubah kode aplikasi
3. Penyiapan/Prakerja
Sebelum melanjutkan ke bagian utama tutorial, mari kita siapkan project, dapatkan kodenya, lalu deploy aplikasi dasar pengukuran sehingga kita tahu bahwa kita memulai dengan kode yang berfungsi.
1. Siapkan project
Jika Anda sudah menyelesaikan codelab Modul 1, sebaiknya gunakan kembali project (dan kode) yang sama. Atau, Anda dapat membuat project baru atau menggunakan kembali project lain yang sudah ada. Pastikan project memiliki akun penagihan yang aktif dan App Engine diaktifkan.
2. Dapatkan aplikasi contoh dasar pengukuran
Salah satu prasyarat untuk codelab ini adalah memiliki aplikasi contoh Modul 1 yang berfungsi. Jika Anda tidak memilikinya, selesaikan salah satu tutorial tersebut (link di atas) sebelum melanjutkan ke sini. Jika sudah terbiasa dengan kontennya, Anda bisa memulai dengan kode Modul 1 di bawah.
Baik Anda menggunakan kode Anda atau kode kami, kode Modul 1 adalah tempat kita akan memulai (START). Codelab ini akan memandu Anda melalui setiap langkah, yang diakhiri dengan kode yang menyerupai kode di folder repo Modul 11 (FINISH).
- START: Folder Modul 1 (Python 2)
- FINISH: Folder Modul 12 (Python 2)
- Seluruh repo (untuk melakukan clone atau mendownload file ZIP)
File awal (START) di direktori Modul 1 (kode Anda atau kode kami) akan terlihat seperti ini:
$ ls README.md main.py templates app.yaml requirements.txt
3. Deploy (ulang) aplikasi dasar pengukuran
Langkah prakerja yang tersisa untuk dijalankan sekarang:
- Biasakan kembali diri Anda dengan alat command-line
gcloud - Deploy kembali aplikasi contoh dengan
gcloud app deploy - Konfirmasikan bahwa aplikasi berjalan di App Engine tanpa masalah
Setelah berhasil menjalankan langkah-langkah tersebut dan melihat aplikasi web Anda berfungsi (dengan output yang serupa dengan di bawah), Anda siap menambahkan penggunaan caching ke aplikasi Anda.

4. Update konfigurasi
Tidak ada perubahan yang diperlukan pada file konfigurasi App Engine standar (app.yaml, requirements.txt, appengine_config.py).
5. Mengubah file aplikasi
Karena kita hanya menambahkan App Engine API, tidak ada paket eksternal yang terlibat, yang berarti tidak ada file konfigurasi (app.yaml, requirements.txt, appengine_config.py) yang perlu diperbarui. Hanya ada satu file aplikasi, main.py, sehingga semua perubahan di bagian ini hanya memengaruhi file tersebut.
Impor
Langkah terpenting adalah mengimpor library Memcache, google.appengine.api.memcache. Karena kita akan menyimpan dalam cache kunjungan terbaru selama satu jam, mari kita tambahkan juga konstanta untuk jumlah detik dalam satu jam. Berikut adalah tampilan kode Anda sebelum dan sesudah perubahan ini:
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 memcache
from google.appengine.ext import ndb
app = Flask(__name__)
HOUR = 3600
Menambahkan dukungan penyimpanan ke dalam cache dengan Memcache
Perubahan paling signifikan adalah menambahkan penggunaan caching dalam aplikasi kita. Lebih khusus lagi, kita harus meng-cache kunjungan terbaru, memeriksa apakah kunjungan yang di-cache tersedia, dan mencoba menggunakan hasil yang di-cache sebanyak mungkin sesuai dengan rencana kita. Berikut adalah langkah-langkah yang akan dilakukan aplikasi untuk mencapai tujuan kita:
- Tetapkan kunjungan saat ini dan panggil
visitor - Mencoba mengambil
visitsterbaru dari cache - Jika cache kosong atau pengunjung terbaru (
visits[0]['visitor']) berbeda denganvisitorsaat ini: simpan kunjungan terbaru ini, ambil kunjungan terbaru, dan simpan dalam cache selama satu jam. - Menampilkan
visitskepada pengguna melalui template web
Berikut adalah tampilan sebelum dan sesudah dengan pembaruan ini:
SEBELUM:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
SETELAH:
@app.route('/')
def root():
'main application (GET) handler'
# check for (hour-)cached visits
ip_addr, usr_agt = request.remote_addr, request.user_agent
visitor = '{}: {}'.format(ip_addr, usr_agt)
visits = memcache.get('visits')
# register visit & run DB query if cache empty or new visitor
if not visits or visits[0]['visitor'] != visitor:
store_visit(ip_addr, usr_agt)
visits = list(fetch_visits(10))
memcache.set('visits', visits, HOUR) # set() not add()
return render_template('index.html', visits=visits)
Berikut adalah representasi bergambar dari perubahan yang dilakukan:

Dengan demikian, semua perubahan yang diperlukan untuk menambahkan penggunaan App Engine memcache ke aplikasi contoh Modul 1 telah selesai. Mari kita buat dan deploy aplikasi ini untuk melihat cara kerjanya.
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 langkah-langkah pembersihan dan pertimbangkan langkah berikutnya.
Men-deploy dan memverifikasi aplikasi
Deploy ulang aplikasi Anda dengan gcloud app deploy dan konfirmasikan bahwa aplikasi berfungsi. Kode Anda sekarang seharusnya cocok dengan yang ada di FINISH, folder Modul 12. Outputnya harus sama dengan aplikasi Modul 1 yang Anda deploy sebelumnya:

Yang kami lakukan hanyalah mempercepat pengalaman pengguna untuk pengguna yang sama. Saat pengguna memuat ulang, Anda akan mendapatkan hasil langsung dari cache, yang tidak membuat kunjungan baru atau melakukan pengambilan Datastore.
Selamat, Anda telah menyelesaikan codelab Modul 12 untuk menambahkan penggunaan layanan memcache App Engine ke contoh aplikasi kita. Sekarang Anda memiliki opsi untuk mentransfer aplikasi Python 2 ini ke Python 3 di langkah bonus.
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 Memcache App Engine hadir dalam dua jenis yang berbeda, masing-masing dengan struktur harga sendiri, sehingga Anda harus melacak penggunaan tersebut terkait dengan penagihan.
- 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
Migrasi logis berikutnya yang perlu dipertimbangkan dibahas dalam Modul 13, yang menunjukkan cara bermigrasi dari layanan memcache App Engine ke Cloud Memorystore. Semua migrasi ini bersifat opsional dan tersedia bagi pengguna yang ingin melakukan berbagai langkah untuk memodernisasi aplikasi mereka. Layanan Cloud Memorystore adalah upgrade signifikan untuk memcache App Engine karena banyak alasan:
- Cloud Memorystore bukan layanan tanpa server. Artinya, Anda harus mengalokasikan server untuk cache. Cloud Memorystore juga tidak memiliki paket gratis. Kedua faktor ini dapat berdampak signifikan pada biaya.
- Cloud Memorystore mendukung sepasang mekanisme penyimpanan pokok yang berbeda (mesin caching), Redis dan Memcached.
- Cloud Memorystore (untuk Redis) memiliki serangkaian fitur yang jauh lebih kaya dan mendalam daripada App Engine Memcache.
- Untuk menggunakan Cloud Memorystore, Anda harus menyiapkan server Cloud Memorystore, menambahkannya ke jaringan VPC Google Cloud, lalu membuat aplikasi App Engine Anda menggunakan jaringan tersebut untuk berkomunikasi dengan server Memorystore Anda.
Jika Anda merasa tidak memerlukan semua fitur yang tersedia dari Cloud Memorystore atau khawatir tentang pengaruhnya terhadap biaya, Anda dapat tetap menggunakan App Engine Memcache.
Selain Modul 13, ada banyak kemungkinan migrasi lainnya seperti Cloud NDB dan Cloud Datastore, atau Cloud Tasks. Ada juga migrasi lintas produk ke Cloud Run dan Cloud Functions. Anda dapat menemukan semuanya di repo migrasi.
Langkah berikutnya yang mungkin adalah melakukan porting ke Python 3, yang dibahas di bagian berikutnya sebagai langkah opsional.
7. BONUS: Migrasi ke Python 3
Ringkasan
Bagian ini terdiri dari konten bonus opsional yang memigrasikan aplikasi Modul 12 yang baru saja kita selesaikan di atas ke Python 3. Kita mulai dengan konfigurasi, lalu aplikasi.
Menyederhanakan app.yaml
Salah satu manfaat runtime Python 3 adalah app.yaml dapat disederhanakan secara signifikan.
SEBELUM:
Berikut adalah isi app.yaml di akhir Modul 12:
runtime: python27
threadsafe: yes
api_version: 1
handlers:
- url: /.*
script: main.app
Karena runtime Python 3 mengharuskan framework web melakukan peruteannya sendiri, semua pengendali rute di app.yaml harus diubah menjadi auto. Jika tidak ada file statis yang ditayangkan, pengguna dapat menghapus seluruh bagian handlers:. Selain itu, threadsafe dan api_version tidak digunakan lagi.
SETELAH:
Dengan perubahan yang diperlukan seperti yang baru saja dijelaskan, berikut adalah penggantian app.yaml untuk Python 3:
runtime: python39
app_engine_apis: true
Satu-satunya baris yang memerlukan penjelasan adalah app_engine_apis: true. Saat layanan App Engine lama tersedia untuk runtime generasi kedua pada tahun 2021, beberapa runtime, termasuk Python 3, memerlukan bootstrapping tambahan untuk mengakses API tersebut seperti ndb, taskqueue, dan memcache. Baris ini dalam konfigurasi berfungsi untuk tujuan tersebut.
Perbarui requirements.txt
Bootstrapping API asli lainnya diperlukan di requirements.txt: akses ke App Engine SDK baru harus disertakan.
SEBELUM:
Berikut adalah isi app.yaml di akhir Modul 12:
flask
SETELAH:
Cukup tambahkan App Engine Python SDK, dan Anda akan memiliki hal berikut:
flask
appengine-python-standard
Menghapus appengine_config.py dan lib
Runtime App Engine generasi berikutnya mengubah penggunaan paket pihak ketiga:
- Library bawaan adalah library yang diperiksa oleh Google dan tersedia di server App Engine, kemungkinan karena berisi kode C/C++ yang tidak diizinkan untuk di-deploy ke cloud oleh developer. Library ini tidak lagi tersedia di runtime generasi ke-2.
- Penyalinan library non-bawaan (terkadang disebut "vendoring" atau "self-bundling") tidak lagi diperlukan di runtime generasi ke-2. Sebagai gantinya, library tersebut harus dicantumkan di
requirements.txttempat sistem build menginstalnya secara otomatis untuk Anda pada waktu deployment.
Sebagai hasil dari perubahan pada pengelolaan paket pihak ketiga tersebut, file appengine_config.py maupun folder lib tidak diperlukan, jadi hapus keduanya. Di runtime generasi ke-2, App Engine otomatis menginstal paket pihak ketiga yang tercantum di requirements.txt. Merangkum:
- Tidak ada library pihak ketiga yang di-bundle sendiri atau disalin; cantumkan di
requirements.txt - Tidak ada
pip installdalam folderlib, artinya tidak ada periode folderlib - Tidak ada pencantuman library pihak ketiga bawaan (sehingga tidak ada bagian
libraries) diapp.yaml; cantumkan direquirements.txt - Tidak ada library pihak ketiga yang dirujuk dari aplikasi Anda berarti tidak ada file
appengine_config.py
Mencantumkan semua library pihak ketiga yang diinginkan di requirements.txt adalah satu-satunya persyaratan developer.
Mengupdate aplikasi untuk menggunakan SDK App Engine
Seperti yang disebutkan di atas, aplikasi Python 3 memerlukan beberapa modifikasi untuk mengakses layanan paket App Engine:
- Bundel App Engine SDK (di
requirements.txt) - Aktifkan App Engine SDK (di
app.yaml) - Gabungkan objek WSGI (di
main.py)
Pasangan pertama telah diselesaikan di atas, jadi persyaratan terakhir adalah memperbarui main.py.
SEBELUM:
Berikut adalah main.py Python 2 di akhir Modul 12:
from flask import Flask, render_template, request
from google.appengine.api import memcache
from google.appengine.ext import ndb
app = Flask(__name__)
HOUR = 3600
SETELAH:
Untuk port Python 3, impor SDK dan bungkus objek aplikasi Flask dengannya (wrapper SDK), sehingga menghasilkan kode berikut:
from flask import Flask, render_template, request
from google.appengine.api import memcache, wrap_wsgi_app
from google.appengine.ext import ndb
app = Flask(__name__)
app.wsgi_app = wrap_wsgi_app(app.wsgi_app)
HOUR = 3600
Developer perlu melakukan perubahan ini pada aplikasi Python mereka saat melakukan porting dari 2.x ke 3.x untuk mengakses layanan paket. Jika Anda tidak menggunakan Flask, ada juga contoh Django dan Pyramid dalam dokumen. Jika kode Python 2 Anda bukan aplikasi web, cukup sertakan paket SDK saat mentransfer ke Python 3. Kode aplikasi kami awalnya dibuat untuk berfungsi di Python 2 dan 3, sehingga tidak ada perubahan kompatibilitas tambahan yang diperlukan.
Men-deploy aplikasi
Setelah menyelesaikan perubahan di atas, Anda dapat men-deploy aplikasi contoh yang telah diupdate. (Tidak ada masalah saat men-deploy aplikasi versi Python 3 di atas aplikasi versi Python 2 asli dalam project GCP yang sama.) Perilaku aplikasi akan tetap sama. Jika Anda perlu membandingkan aplikasi yang telah diperbarui dengan aplikasi kami, lihat folder Modul 12b di repo migrasi. Untuk mempelajari lebih lanjut dukungan layanan paket App Engine di runtime terbaru seperti Python 3, lihat pengumuman peluncuran fitur serta codelab Modul 17.
Selamat, Anda telah menyelesaikan langkah bonus di Modul 12! Lihat juga dokumentasi tentang menyiapkan file konfigurasi untuk runtime Python 3. Tinjau bagian Ringkasan/Pembersihan di atas untuk mengetahui langkah dan pembersihan berikutnya.
8. 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 2 (START) dan Modul 12 (FINISH) dapat ditemukan pada tabel di bawah. Link tersebut juga dapat diakses dari repo untuk semua migrasi codelab App Engine yang dapat Anda clone atau download file ZIP.
Codelab | Python 2 | Python 3 |
code (tidak ditampilkan dalam tutorial ini) | ||
Modul 12 (codelab ini) |
Referensi online
Berikut adalah referensi online yang mungkin relevan untuk tutorial ini:
App Engine
- Dokumentasi App Engine
- Runtime Python 2 App Engine (lingkungan standar)
- 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)
- Membandingkan platform generasi pertama & kedua
- Dukungan jangka panjang untuk runtime lama
- Repositori contoh migrasi dokumentasi
- Repo contoh migrasi yang dikontribusikan komunitas
Cloud Memorystore dan Cloud Datastore
- Halaman produk Cloud Memorystore
- Dokumentasi Cloud Memorystore for Redis
- Dokumentasi Cloud Memorystore for Memcached
- Informasi harga Cloud Memorystore (untuk Redis)
- Dokumentasi Cloud Datastore
- Informasi harga Cloud Datastore
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.