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

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

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 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:

  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 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".

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:

  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 Anda telah menginstal Python 2 dan 3.
  2. Pastikan Anda telah menginstal dan menginisialisasi alat command line gcloud serta meninjau penggunaannya.
  3. Tetapkan project Cloud Anda 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 menampilkan kunjungan terbaru (diilustrasikan di bawah)

a7a9d2b80d706a2b.png

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:

  1. Ganti direktif 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 seluruh bagian handlers karena aplikasi ini hanya memiliki script handler. Jika aplikasi Anda memiliki penyedia file statis, biarkan tetap utuh di handlers.
  4. Runtime Python 3 tidak mendukung library pihak ketiga bawaan seperti yang dilakukan runtime Python 2. Jika aplikasi Anda memiliki bagian libraries di app.yaml, hapus seluruh bagian. (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 set direktif app_engine_apis yang ditetapkan ke true untuk menggunakannya—tindakan ini sesuai dengan penambahan paket App Engine SDK ke requirements.txt di 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:

a7a9d2b80d706a2b.png

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.py berdampingan dengan Modul 1b main.py di halaman ini jika aplikasi Anda masih menggunakan webapp2, lalu lakukan codelab Modul 1 untuk mempelajari cara bermigrasi dari webapp2 ke 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/images
  • console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
  • Link penyimpanan di atas bergantung pada PROJECT_ID dan *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:

Langkah berikutnya

Ada beberapa arah yang dapat dipilih dari sini:

  1. Memperbarui kode menggunakan layanan paket yang memerlukan lebih banyak perubahan kode
  2. Bermigrasi dari paket layanan ke produk mandiri Cloud
  3. 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

Modul 1

kode

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

Dokumen umum App Engine

Informasi Cloud lainnya

Video

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.