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.
Codelab ini mengajarkan cara menyertakan dan menggunakan App Engine Memcache ke aplikasi contoh dari codelab Modul 1. Kami menambahkan penggunaan Memcache dalam tutorial Modul 12 ini, lalu bermigrasi ke Cloud Memorystore berikutnya di Modul 13.
Anda akan mempelajari cara
- Menggunakan library/Library Memcache App Engine
- Menambahkan cache ke aplikasi Python 2 Flask App Engine NDB dasar
Yang Anda butuhkan
- Project Google Cloud Platform dengan akun penagihan GCP 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 (menyelesaikan codelabnya [direkomendasikan] atau menyalin 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 Memcache App Engine, tambahkan penggunaannya ke aplikasi NDB Flask dan App Engine yang ada yang dihasilkan dari codelab Modul 1. Aplikasi contoh menampilkan sepuluh kunjungan terbaru kepada pengguna. Jika pengguna yang sama me-refresh browser, membuat entity Kunjungan baru tidak optimal dan mengambil kunjungan terbaru dari Datastore, sehingga kita akan menyimpan kunjungan terbaru tersebut ke dalam cache.
Jika pengunjung yang sama membuka halaman, kunjungan tersebut akan ditampilkan dari cache. Jika pengguna baru mengunjungi situs atau satu jam telah berlalu, {i>cache<i} akan dibersihkan dan diganti dengan entri terbaru (belum termasuk Kunjungan baru yang didaftarkan). Setelah menerapkan integrasi Memcache App Engine ini, kita dapat memigrasikannya ke Cloud Memorystore di codelab berikutnya (Modul 13).
Tutorial ini menampilkan langkah-langkah berikut:
- Penyiapan/Prakerja
- Update konfigurasi
- Mengubah kode aplikasi
3. Penyiapan/Prakerja
Sebelum masuk 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 telah 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 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 (tautan di atas) sebelum melanjutkan ke sini. Atau, jika Anda sudah terbiasa dengan kontennya, Anda dapat 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 memandu Anda melalui setiap langkah, yang diakhiri dengan kode yang menyerupai yang ada di folder repo Modul 11 (FINISH).
- START: Folder Modul 1 (Python 2)
- FINISH: Folder Modul 12 (Python 2)
- Seluruh repo (untuk meng-clone atau mendownload file ZIP)
Direktori file STARTing Modul 1 (milik Anda atau milik 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 mirip di bawah ini), Anda siap untuk menambahkan penggunaan caching ke aplikasi.
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 paling penting adalah mengimpor library Memcache, google.appengine.api.memcache
. Karena kita akan meng-cache kunjungan terbaru selama satu jam, mari kita tambahkan juga konstanta untuk jumlah detik dalam satu jam. Berikut adalah tampilan kode Anda sebelumnya dan 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 caching dengan dukungan Memcache
Perubahan yang paling signifikan adalah menambahkan penggunaan cache di aplikasi kita. Lebih khusus lagi, kita harus meng-cache kunjungan terbaru, memeriksa untuk melihat apakah kunjungan yang di-cache tersedia, dan berupaya menggunakan hasil yang di-cache sebanyak mungkin berdasarkan rencana kita. Berikut adalah langkah-langkah yang akan diambil aplikasi untuk mencapai tujuan kita:
- Tetapkan kunjungan saat ini dan sebut
visitor
- Upaya untuk mengambil
visits
terbaru dari cache - Jika cache kosong atau pengunjung terbaru (
visits[0]['visitor']
) berbeda denganvisitor
saat ini: simpan kunjungan terbaru ini, ambil kunjungan terbaru, dan simpan dalam cache selama satu jam. - Tampilkan
visits
kepada pengguna melalui template web
Berikut informasi sebelum dan sesudah 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:
Contoh ini mengakhiri semua perubahan yang diperlukan untuk menambahkan penggunaan App Engine memcache
ke aplikasi contoh Modul 1. Mari kita bangun dan deploy aplikasi ini untuk melihat hasilnya.
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 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. Output harus sama dengan aplikasi Modul 1 yang Anda deploy sebelumnya:
Semua yang kami lakukan adalah mempercepat pengalaman pengguna untuk pengguna yang sama. Saat dimuat ulang, Anda akan mendapatkan hasilnya langsung dari cache, yang tidak akan membuat kunjungan baru maupun melakukan pengambilan Datastore.
Selamat, Anda telah menyelesaikan codelab Modul 12 karena telah menambahkan penggunaan layanan memcache
App Engine ke aplikasi contoh kami. Anda sekarang memiliki opsi untuk mem-port aplikasi Python 2 ini ke Python 3 pada langkah bonus.
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:
- Layanan Memcache App Engine hadir dalam dua ragam yang berbeda, masing-masing dengan struktur harga sendiri, jadi Anda harus melacak penggunaan tersebut dalam kaitannya 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 tercakup dalam Modul 13, yang menunjukkan kepada developer 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 yang signifikan ke memcache
App Engine karena berbagai alasan:
- Cloud Memorystore bukan serverless. Ini berarti Anda harus mengalokasikan server untuk {i>cache<i}. Cloud Memorystore juga tidak memiliki paket gratis. Kedua faktor ini dapat memiliki dampak yang signifikan terhadap biaya.
- Cloud Memorystore mendukung sepasang mekanisme penyimpanan dasar yang berbeda (mesin caching), Redis, dan Memcached.
- Cloud Memorystore (for Redis) memiliki set fitur yang jauh lebih kaya dan lebih mendalam daripada Memcache App Engine.
- Untuk menggunakan Cloud Memorystore, Anda harus menyiapkan server Cloud Memorystore, menambahkannya ke jaringan VPC Google Cloud, lalu aplikasi App Engine Anda menggunakan jaringan tersebut untuk berkomunikasi dengan server Memorystore.
Jika Anda tidak merasa memerlukan semua fitur yang tersedia dari Cloud Memorystore atau khawatir dengan dampaknya terhadap biaya, Anda dapat tetap menggunakan App Engine Memcache.
Di luar Modul 13, terdapat banyak kemungkinan migrasi lain, seperti Cloud NDB dan Cloud Datastore, atau Cloud Tasks. Migrasi lintas produk juga berlaku untuk Cloud Run dan Cloud Functions. Anda akan menemukan semuanya di repositori migrasi.
Langkah lain yang mungkin dilakukan adalah melakukan porting ke Python 3, yang dibahas di bagian selanjutnya 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 diikuti dengan 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 memerlukan framework web untuk melakukan peruteannya sendiri, semua pengendali rute di app.yaml
harus diubah menjadi auto
. Jika tidak ada file statis yang ditayangkan, pengguna dapat langsung menghapus seluruh bagian handlers:
. Selain itu, threadsafe
dan api_version
tidak digunakan lagi.
SETELAH:
Dengan perubahan yang diperlukan yang baru saja dijelaskan, ini adalah pengganti 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 bootstrap tambahan untuk mengakses API tersebut seperti ndb
, taskqueue
, dan memcache
. Baris dalam konfigurasi ini digunakan untuk tujuan tersebut.
Perbarui requirements.txt
Bootstrap lain dari API asli 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 kode 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 oleh developer ke cloud. Library ini tidak lagi tersedia di runtime generasi ke-2.
- Menyalin library non-bawaan (terkadang disebut "vendor" atau "bundling mandiri") tidak lagi diperlukan dalam runtime generasi ke-2. Sebaliknya, aplikasi tersebut akan tercantum di
requirements.txt
tempat sistem build menginstalnya secara otomatis atas nama Anda pada waktu deployment.
Akibat perubahan pada pengelolaan paket pihak ketiga tersebut, file appengine_config.py
atau folder lib
tidak diperlukan, jadi hapus file tersebut. Pada runtime generasi ke-2, App Engine menginstal paket pihak ketiga secara otomatis yang tercantum di requirements.txt
. Merangkum:
- Tidak ada library pihak ketiga yang dipaketkan sendiri atau disalin; cantumkan di
requirements.txt
- Tidak ada
pip install
dalam folderlib
, artinya tidak ada periode folderlib
- Tidak ada listingan library pihak ketiga bawaan (sehingga tidak ada bagian
libraries
) diapp.yaml
; cantumkan direquirements.txt
- Tidak ada library pihak ketiga yang menjadi referensi dari aplikasi Anda, artinya 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:
- Paket SDK App Engine (di
requirements.txt
) - Aktifkan App Engine SDK (di
app.yaml
) - Menggabungkan objek WSGI (di
main.py
)
Penyambungan pertama telah diselesaikan di atas, sehingga persyaratan terakhir adalah memperbarui main.py
.
SEBELUM:
Berikut adalah Python 2 main.py
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 gabungkan objek aplikasi Flask dengannya (Wrapper SDK), sehingga menghasilkan hal 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 transfer dari 2.x ke 3.x untuk mengakses layanan yang dipaketkan. Jika Anda tidak menggunakan Flask, ada juga contoh Django dan Pyramid di dokumen. Jika kode Python 2 Anda bukan aplikasi web, menyertakan paket SDK saja sudah cukup saat melakukan porting ke Python 3. Kode aplikasi kita awalnya dibuat untuk berfungsi di Python 2 dan 3, sehingga tidak diperlukan perubahan kompatibilitas tambahan.
Men-deploy aplikasi
Setelah menyelesaikan perubahan di atas, Anda dapat men-deploy aplikasi contoh yang telah diupdate. (Tidak ada masalah saat men-deploy versi Python 3 aplikasi Anda pada versi Python 2 asli pada project GCP yang sama.) Perilaku aplikasi harus tetap sama. Jika Anda perlu membandingkan aplikasi yang diupdate dengan aplikasi kami, lihat folder Modul 12b di repo migrasi. Untuk mempelajari lebih lanjut dukungan layanan paket App Engine pada 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 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 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 {i>online<i}
Di bawah ini adalah referensi online yang mungkin relevan untuk tutorial ini:
App Engine
- Dokumentasi App Engine
- Runtime App Engine (lingkungan standar) Python 2
- Runtime App Engine (lingkungan standar) Python 3
- Perbedaan antara Python 2 & 3 runtime App Engine (lingkungan standar)
- Panduan migrasi App Engine (lingkungan standar) Python 2 ke 3
- Informasi harga dan kuota App Engine
- Peluncuran platform App Engine generasi kedua (2018)
- Membandingkan terlebih dahulu & platform generasi kedua
- Dukungan jangka panjang untuk runtime lama
- Repositori contoh migrasi dokumentasi
- Repositori contoh migrasi kontribusi komunitas
Cloud Memorystore dan Cloud Datastore
- Halaman produk Cloud Memorystore
- Dokumentasi Cloud Memorystore for Redis
- Dokumentasi Cloud Memorystore for Memcached
- Informasi harga Cloud Memorystore (for Redis)
- Dokumentasi Cloud Datastore
- Informasi harga Cloud Datastore
Informasi Cloud lainnya
- Python di Google Cloud Platform
- Library klien Python Google Cloud
- Google Cloud "Selalu Gratis" tingkat lanjut
- Google Cloud SDK (alat command line
gcloud
) - Semua dokumentasi Google Cloud
Video
- Stasiun Migrasi Serverless
- Ekspedisi Serverless
- Berlangganan Google Cloud Tech
- Berlangganan Google Developers
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.