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.
Tujuan codelab ini adalah untuk mem-porting aplikasi contoh Modul 8 ke Python 3 serta mengalihkan akses Datastore (Cloud Firestore dalam mode Datastore) dari penggunaan Cloud NDB ke library klien Cloud Datastore native dan mengupgrade ke versi terbaru library klien Cloud Tasks.
Kita menambahkan penggunaan Task Queue untuk tugas push di Modul 7, lalu memigrasikan penggunaan tersebut ke Cloud Tasks di Modul 8. Di Modul 9 ini, kita akan melanjutkan ke Python 3 dan Cloud Datastore. Pengguna yang menggunakan Task Queues untuk tugas pull akan bermigrasi ke Cloud Pub/Sub dan harus melihat Modul 18-19.
Anda akan mempelajari cara
- Melakukan porting aplikasi contoh Modul 8 ke Python 3
- Mengalihkan akses Datastore dari library klien Cloud NDB ke Cloud Datastore
- Upgrade ke versi library klien Cloud Tasks terbaru
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 8 yang berfungsi: selesaikan codelab Modul 8 (direkomendasikan) atau salin aplikasi Modul 8 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
Modul 7 menunjukkan cara menggunakan tugas push Task Queue App Engine di aplikasi Python 2 Flask App Engine. Di Modul 8, Anda akan memigrasikan aplikasi tersebut dari Task Queue ke Cloud Tasks. Di Modul 9 ini, Anda melanjutkan perjalanan tersebut dan mem-port aplikasi tersebut ke Python 3 serta mengalihkan akses Datastore dari menggunakan Cloud NDB ke library klien Cloud Datastore native.
Karena Cloud NDB berfungsi untuk Python 2 dan 3, Cloud NDB sudah cukup bagi pengguna App Engine yang memindahkan aplikasi mereka dari Python 2 ke 3. Migrasi tambahan library klien ke Cloud Datastore sepenuhnya bersifat opsional, dan hanya ada satu alasan untuk mempertimbangkannya: Anda memiliki aplikasi non-App Engine (dan/atau aplikasi App Engine Python 3) yang sudah menggunakan library klien Cloud Datastore dan ingin menggabungkan codebase untuk mengakses Datastore hanya dengan satu library klien. Cloud NDB dibuat khusus untuk developer App Engine Python 2 sebagai alat migrasi Python 3, jadi jika Anda belum memiliki kode yang menggunakan library klien Cloud Datastore, Anda tidak perlu mempertimbangkan migrasi ini.
Terakhir, pengembangan library klien Cloud Tasks hanya berlanjut di Python 3, jadi kita "bermigrasi" dari salah satu versi akhir Python 2 ke versi Python 3 yang setara. Untungnya, tidak ada perubahan yang merusak dari Python 2, yang berarti tidak ada hal lain yang perlu Anda lakukan di sini.
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 dan siap untuk dimigrasikan ke layanan Cloud.
1. Siapkan project
Jika Anda sudah menyelesaikan codelab Modul 8, gunakan kembali project (dan kode) yang sama. Atau, buat project baru atau gunakan kembali project lain yang sudah ada. Pastikan project memiliki akun penagihan yang aktif dan aplikasi App Engine yang diaktifkan. Temukan ID project Anda karena Anda harus menyediakannya selama codelab ini, dengan menggunakannya setiap kali Anda menemukan variabel PROJECT_ID.
2. Dapatkan aplikasi contoh dasar pengukuran
Salah satu prasyaratnya adalah aplikasi App Engine Modul 8 yang berfungsi: selesaikan codelab Modul 8 (direkomendasikan) atau salin aplikasi Modul 8 dari repo. Baik Anda menggunakan kode Anda atau kode kami, kode Modul 8 adalah tempat kita akan memulai ("START"). Codelab ini akan memandu Anda melakukan migrasi, yang diakhiri dengan kode yang menyerupai kode di folder repo Modul 9 ("FINISH").
- START: Repo Modul 8
- FINISH: Repo Modul 9
- Seluruh repo (clone atau download ZIP)
Terlepas dari aplikasi Modul 7 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) dan validasi aplikasi dasar pengukuran
Lakukan langkah-langkah berikut untuk men-deploy aplikasi Modul 8:
- Hapus folder
libjika ada dan jalankanpip install -t lib -r requirements.txtuntuk mengisi kembalilib. Anda mungkin perlu menggunakanpip2jika Anda telah menginstal Python 2 dan 3 di mesin pengembangan. - Pastikan Anda telah menginstal dan menginisialisasi alat command line
gcloudserta meninjau penggunaannya. - (opsional) Tetapkan project Cloud Anda dengan
gcloud config set projectPROJECT_IDjika Anda tidak ingin memasukkanPROJECT_IDdengan setiap perintahgcloudyang Anda keluarkan. - Men-deploy aplikasi contoh dengan
gcloud app deploy - Konfirmasi bahwa aplikasi berjalan seperti yang diharapkan tanpa masalah. Jika Anda telah menyelesaikan codelab Modul 8, aplikasi akan menampilkan pengunjung teratas beserta kunjungan terbaru (seperti yang diilustrasikan di bawah). Di bagian bawah terdapat indikasi tugas lama yang akan dihapus.

4. Update konfigurasi
requirements.txt
requirements.txt baru hampir sama dengan requirements.txt untuk Modul 8, dengan hanya satu perubahan besar: ganti google-cloud-ndb dengan google-cloud-datastore. Lakukan perubahan ini sehingga file requirements.txt Anda terlihat seperti ini:
flask
google-cloud-datastore
google-cloud-tasks
File requirements.txt ini tidak memiliki nomor versi, yang berarti versi terbaru akan dipilih. Jika ada ketidakcocokan, penggunaan nomor versi untuk mengunci versi aplikasi yang berfungsi adalah praktik standar.
app.yaml
Runtime App Engine generasi kedua tidak mendukung library pihak ketiga bawaan seperti di 2.x, dan tidak mendukung penyalinan library non-bawaan. Satu-satunya persyaratan untuk paket pihak ketiga adalah mencantumkannya di requirements.txt. Akibatnya, seluruh bagian libraries dari app.yaml dapat dihapus.
Perubahan lainnya adalah runtime Python 3 memerlukan penggunaan framework web yang melakukan perutean sendiri. Akibatnya, semua pengendali skrip harus diubah menjadi auto. Namun, karena semua rute harus diubah menjadi auto, dan tidak ada file statis yang disajikan dari aplikasi contoh ini, tidak relevan untuk memiliki penangan apa pun, jadi hapus seluruh bagian handlers juga.
Satu-satunya hal yang diperlukan di app.yaml adalah menyetel runtime ke versi Python 3 yang didukung, misalnya 3.10. Lakukan perubahan ini sehingga app.yaml baru yang disingkat hanya berupa satu baris ini:
runtime: python310
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.
5. Memperbarui file aplikasi
Hanya ada satu file aplikasi, main.py, sehingga semua perubahan di bagian ini hanya memengaruhi file tersebut. Di bawah ini adalah ilustrasi "perbedaan" pada keseluruhan perubahan yang perlu dilakukan untuk memfaktorkan ulang kode yang ada ke dalam aplikasi baru. Pembaca tidak diharapkan untuk membaca kode baris demi baris, karena tujuannya hanyalah untuk mendapatkan ringkasan bergambar tentang apa yang diperlukan dalam refaktor ini (tetapi jangan ragu untuk membukanya di tab baru atau mendownload dan memperbesar jika diinginkan).

Memperbarui impor dan inisialisasi
Bagian impor di main.py untuk Modul 8 menggunakan Cloud NDB dan Cloud Tasks; tampilannya akan seperti berikut:
SEBELUM:
from datetime import datetime
import json
import logging
import time
from flask import Flask, render_template, request
import google.auth
from google.cloud import ndb, tasks
app = Flask(__name__)
ds_client = ndb.Client()
ts_client = tasks.CloudTasksClient()
Logging disederhanakan dan ditingkatkan di runtime generasi kedua seperti Python 3:
- Untuk pengalaman logging yang komprehensif, gunakan Cloud Logging
- Untuk logging sederhana, cukup kirim ke
stdout(ataustderr) melaluiprint() - Tidak perlu menggunakan modul
loggingPython (jadi hapus)
Oleh karena itu, hapus impor logging dan tukar google.cloud.ndb dengan google.cloud.datastore. Demikian pula, ubah ds_client agar mengarah ke klien Datastore, bukan klien NDB. Setelah perubahan ini dilakukan, bagian atas aplikasi baru Anda akan terlihat seperti ini:
SETELAH:
from datetime import datetime
import json
import time
from flask import Flask, render_template, request
import google.auth
from google.cloud import datastore, tasks
app = Flask(__name__)
ds_client = datastore.Client()
ts_client = tasks.CloudTasksClient()
Bermigrasi ke Cloud Datastore
Sekarang saatnya mengganti penggunaan library klien NDB dengan Datastore. App Engine NDB dan Cloud NDB memerlukan model data (class); untuk aplikasi ini, model datanya adalah Visit. Fungsi store_visit() berfungsi sama di semua modul migrasi lainnya: fungsi ini mendaftarkan kunjungan dengan membuat rekaman Visit baru, menyimpan alamat IP dan agen pengguna (jenis browser) klien yang berkunjung.
SEBELUM:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
with ds_client.context():
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
Namun, Cloud Datastore tidak menggunakan class model data, jadi hapus class tersebut. Selain itu, Cloud Datastore tidak otomatis membuat stempel waktu saat data dibuat, sehingga Anda harus melakukannya secara manual—hal ini dilakukan dengan panggilan datetime.now().
Tanpa class data, store_visit() yang diubah akan terlihat seperti ini:
SETELAH:
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
entity = datastore.Entity(key=ds_client.key('Visit'))
entity.update({
'timestamp': datetime.now(),
'visitor': '{}: {}'.format(remote_addr, user_agent),
})
ds_client.put(entity)
Fungsi utamanya adalah fetch_visits(). Selain menjalankan kueri asli untuk Visit terbaru, kueri ini juga mengambil stempel waktu Visit terakhir yang ditampilkan dan membuat tugas push yang memanggil /trim (sehingga trim()) untuk menghapus Visit lama secara massal. Berikut cara menggunakannya dengan Cloud NDB:
SEBELUM:
def fetch_visits(limit):
'get most recent visits & add task to delete older visits'
with ds_client.context():
data = Visit.query().order(-Visit.timestamp).fetch(limit)
oldest = time.mktime(data[-1].timestamp.timetuple())
oldest_str = time.ctime(oldest)
logging.info('Delete entities older than %s' % oldest_str)
task = {
'app_engine_http_request': {
'relative_uri': '/trim',
'body': json.dumps({'oldest': oldest}).encode(),
'headers': {
'Content-Type': 'application/json',
},
}
}
ts_client.create_task(parent=QUEUE_PATH, task=task)
return (v.to_dict() for v in data), oldest_str
Perubahan utama:
- Ganti kueri Cloud NDB dengan kueri Cloud Datastore yang setara; gaya kuerinya sedikit berbeda.
- Datastore tidak memerlukan penggunaan pengelola konteks atau membuat Anda mengekstrak datanya (dengan
to_dict()) seperti yang dilakukan Cloud NDB. - Mengganti panggilan logging dengan
print()
Setelah perubahan tersebut, fetch_visits() akan terlihat seperti ini:
SETELAH:
def fetch_visits(limit):
'get most recent visits & add task to delete older visits'
query = ds_client.query(kind='Visit')
query.order = ['-timestamp']
visits = list(query.fetch(limit=limit))
oldest = time.mktime(visits[-1]['timestamp'].timetuple())
oldest_str = time.ctime(oldest)
print('Delete entities older than %s' % oldest_str)
task = {
'app_engine_http_request': {
'relative_uri': '/trim',
'body': json.dumps({'oldest': oldest}).encode(),
'headers': {
'Content-Type': 'application/json',
},
}
}
ts_client.create_task(parent=QUEUE_PATH, task=task)
return visits, oldest_str
Biasanya, hanya itu yang diperlukan. Sayangnya, ada satu masalah utama.
(Mungkin) Membuat antrean (push) baru
Di Modul 7, kita menambahkan penggunaan taskqueue App Engine ke aplikasi Modul 1 yang ada. Salah satu manfaat utama memiliki tugas push sebagai fitur App Engine lama adalah bahwa antrean "default" dibuat secara otomatis. Saat aplikasi tersebut dimigrasikan ke Cloud Tasks di Modul 8, antrean default tersebut sudah ada, jadi kita masih tidak perlu mengkhawatirkannya saat itu. Hal itu berubah di Modul 9.
Salah satu aspek penting yang perlu dipertimbangkan adalah bahwa aplikasi App Engine baru tidak lagi menggunakan layanan App Engine, dan oleh karena itu, Anda tidak dapat lagi mengasumsikan bahwa App Engine secara otomatis membuat antrean tugas di produk lain (Cloud Tasks). Seperti yang ditulis, pembuatan tugas di fetch_visits() (untuk antrean yang tidak ada) akan gagal. Fungsi baru diperlukan untuk memeriksa apakah antrean ("default") ada, dan jika tidak, buat antrean.
Panggil fungsi ini _create_queue_if(), dan tambahkan ke aplikasi Anda tepat di atas fetch_visits() karena di situlah fungsi ini dipanggil. Isi fungsi yang akan ditambahkan:
def _create_queue_if():
'app-internal function creating default queue if it does not exist'
try:
ts_client.get_queue(name=QUEUE_PATH)
except Exception as e:
if 'does not exist' in str(e):
ts_client.create_queue(parent=PATH_PREFIX,
queue={'name': QUEUE_PATH})
return True
Fungsi create_queue() Cloud Tasks memerlukan jalur nama lengkap antrean kecuali nama antrean. Agar lebih sederhana, buat variabel PATH_PREFIX lain yang merepresentasikan QUEUE_PATH dikurangi nama antrean (QUEUE_PATH.rsplit('/', 2)[0]). Tambahkan definisinya di dekat bagian atas sehingga blok kode dengan semua penetapan konstanta terlihat seperti ini:
_, PROJECT_ID = google.auth.default()
REGION_ID = 'REGION_ID' # replace w/your own
QUEUE_NAME = 'default' # replace w/your own
QUEUE_PATH = ts_client.queue_path(PROJECT_ID, REGION_ID, QUEUE_NAME)
PATH_PREFIX = QUEUE_PATH.rsplit('/', 2)[0]
Sekarang ubah baris terakhir di fetch_visits() untuk menggunakan _create_queue_if(), dengan membuat antrean terlebih dahulu jika perlu, lalu membuat tugas setelahnya:
if _create_queue_if():
ts_client.create_task(parent=QUEUE_PATH, task=task)
return visits, oldest_str
Secara keseluruhan, _create_queue_if() dan fetch_visits() sekarang akan terlihat seperti ini:
def _create_queue_if():
'app-internal function creating default queue if it does not exist'
try:
ts_client.get_queue(name=QUEUE_PATH)
except Exception as e:
if 'does not exist' in str(e):
ts_client.create_queue(parent=PATH_PREFIX,
queue={'name': QUEUE_PATH})
return True
def fetch_visits(limit):
'get most recent visits & add task to delete older visits'
query = ds_client.query(kind='Visit')
query.order = ['-timestamp']
visits = list(query.fetch(limit=limit))
oldest = time.mktime(visits[-1]['timestamp'].timetuple())
oldest_str = time.ctime(oldest)
print('Delete entities older than %s' % oldest_str)
task = {
'app_engine_http_request': {
'relative_uri': '/trim',
'body': json.dumps({'oldest': oldest}).encode(),
'headers': {
'Content-Type': 'application/json',
},
}
}
if _create_queue_if():
ts_client.create_task(parent=QUEUE_PATH, task=task)
return visits, oldest_str
Selain harus menambahkan kode tambahan ini, kode Cloud Tasks lainnya sebagian besar tetap utuh dari Modul 8. Bagian kode terakhir yang harus diperhatikan adalah handler tugas.
Memperbarui pengendali tugas (push)
Di handler tugas, trim(), kode Cloud NDB membuat kueri untuk kunjungan yang lebih lama dari yang ditampilkan paling lama. Laporan ini menggunakan kueri khusus kunci untuk mempercepat proses—mengapa harus mengambil semua data jika Anda hanya memerlukan ID Kunjungan? Setelah Anda memiliki semua ID kunjungan, hapus semuanya secara batch dengan fungsi delete_multi() Cloud NDB.
SEBELUM:
@app.route('/trim', methods=['POST'])
def trim():
'(push) task queue handler to delete oldest visits'
oldest = float(request.get_json().get('oldest'))
with ds_client.context():
keys = Visit.query(
Visit.timestamp < datetime.fromtimestamp(oldest)
).fetch(keys_only=True)
nkeys = len(keys)
if nkeys:
logging.info('Deleting %d entities: %s' % (
nkeys, ', '.join(str(k.id()) for k in keys)))
ndb.delete_multi(keys)
else:
logging.info(
'No entities older than: %s' % time.ctime(oldest))
return '' # need to return SOME string w/200
Seperti fetch_visits(), sebagian besar perubahan melibatkan penggantian kode Cloud NDB dengan Cloud Datastore, penyesuaian gaya kueri, penghapusan penggunaan pengelola konteksnya, dan perubahan panggilan logging ke print().
SETELAH:
@app.route('/trim', methods=['POST'])
def trim():
'(push) task queue handler to delete oldest visits'
oldest = float(request.get_json().get('oldest'))
query = ds_client.query(kind='Visit')
query.add_filter('timestamp', '<', datetime.fromtimestamp(oldest))
query.keys_only()
keys = list(visit.key for visit in query.fetch())
nkeys = len(keys)
if nkeys:
print('Deleting %d entities: %s' % (
nkeys, ', '.join(str(k.id) for k in keys)))
ds_client.delete_multi(keys)
else:
print('No entities older than: %s' % time.ctime(oldest))
return '' # need to return SOME string w/200
Tidak ada perubahan pada handler aplikasi utama root().
Melakukan porting ke Python 3
Aplikasi contoh ini dirancang untuk berjalan di Python 2 dan 3. Perubahan khusus Python 3 telah dibahas sebelumnya di bagian yang relevan dalam tutorial ini. Tidak ada langkah tambahan maupun library kompatibilitas yang diperlukan.
Update Cloud Tasks
Versi akhir library klien Cloud Tasks yang mendukung Python 2 adalah 1.5.0. Pada saat penulisan ini, library klien untuk Python 3 versi terbaru sepenuhnya kompatibel dengan versi tersebut, sehingga tidak diperlukan update lebih lanjut.
Pembaruan template HTML
Tidak ada perubahan yang diperlukan dalam file template HTML, templates/index.html, sehingga semua perubahan yang diperlukan untuk mendapatkan aplikasi Modul 9 telah selesai.
6. Ringkasan/Pembersihan
Men-deploy dan memverifikasi aplikasi
Setelah Anda menyelesaikan pembaruan kode, terutama port ke Python 3, deploy aplikasi Anda dengan gcloud app deploy. Outputnya harus sama dengan aplikasi dari Modul 7 dan 8, kecuali Anda telah memindahkan akses database ke library klien Cloud Datastore dan telah mengupgrade ke Python 3:

Langkah ini menyelesaikan codelab. Sebaiknya bandingkan kode Anda dengan yang ada di folder Modul 9. Selamat!
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:
- Cloud Tasks memiliki paket gratis; lihat halaman harganya untuk mengetahui detail 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
Dengan demikian, kita telah menyelesaikan migrasi dari tugas push App Engine Task Queue ke Cloud Tasks. Migrasi opsional dari Cloud NDB ke Cloud Datastore juga dibahas secara terpisah (tanpa Task Queue atau Cloud Tasks) di Modul 3. Selain Modul 3, ada modul migrasi lain yang berfokus pada cara beralih dari layanan paket lama App Engine yang perlu dipertimbangkan, termasuk:
- Modul 2: bermigrasi dari App Engine NDB ke Cloud NDB
- Modul 3: bermigrasi dari Cloud NDB ke Cloud Datastore
- Modul 12-13: bermigrasi dari App Engine Memcache ke Cloud Memorystore
- Modul 15-16: bermigrasi dari Blobstore App Engine ke Cloud Storage
- Modul 18-19: App Engine Task Queue (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
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 8 (START) dan Modul 9 (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 |
(T/A) | ||
Modul 9 | (T/A) |
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
Cloud NDB
Cloud Datastore
Cloud Tasks
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
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.