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 tugas pull Antrean Tugas App Engine ke aplikasi contoh dari codelab Modul 1. Kami menambahkan penggunaan tugas pull dalam tutorial Modul 18 ini, lalu memigrasikan penggunaan tersebut ke Cloud Pub/Sub terlebih dahulu di Modul 19. Tugas yang menggunakan Task Queue untuk tugas push akan dimigrasikan ke Cloud Tasks dan harus merujuk ke Modul 7-9.
Anda akan mempelajari cara
- Menggunakan App Engine Task Queue API/layanan paket
- Menambahkan penggunaan pull queue 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 tugas pull Task Queue App Engine, tambahkan penggunaannya ke aplikasi NDB Flask dan App Engine yang ada yang dihasilkan dari codelab Modul 1. Aplikasi contoh menampilkan kunjungan terbaru ke pengguna akhir. Tidak apa-apa, tetapi akan lebih menarik juga untuk melacak pengunjung guna melihat siapa yang paling banyak mengunjungi situs.
Meskipun kita dapat menggunakan tugas push untuk jumlah pengunjung ini, kita ingin membagi tanggung jawab antara aplikasi contoh yang tugasnya adalah mencatat kunjungan dan segera merespons pengguna, dan "pekerja" yang ditetapkan yang tugasnya adalah menghitung jumlah pengunjung di luar alur kerja permintaan-respons normal.
Untuk menerapkan desain ini, kita menambahkan penggunaan antrean pull ke aplikasi utama serta mendukung fungsi pekerja. Pekerja dapat berjalan sebagai proses terpisah (seperti instance backend atau kode yang berjalan pada VM yang selalu aktif), cron job, atau permintaan HTTP command line dasar menggunakan curl
atau wget
. Setelah integrasi ini, Anda dapat memigrasikan aplikasi ke Cloud Pub/Sub di codelab berikutnya (Modul 19).
Tutorial ini menampilkan 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 telah menyelesaikan codelab Modul 1, gunakan kembali project (dan kode) yang sama. Atau, buat project baru atau gunakan kembali project lain yang sudah ada. Pastikan project memiliki akun penagihan aktif dan aplikasi App Engine yang aktif. Temukan project ID karena Anda perlu memilikinya beberapa kali dalam codelab ini dan menggunakannya setiap kali menemukan variabel PROJECT_ID
.
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 "MULAI". Codelab ini memandu Anda melalui setiap langkah, yang diakhiri dengan kode yang mirip dengan yang ada di folder repo Modul 18 "FINISH".
- START: Folder Modul 1 (Python 2)
- FINISH: Folder Modul 18 (Python 2)
- Seluruh repo (untuk meng-clone atau mendownload file ZIP)
Terlepas dari aplikasi Modul 1 yang Anda gunakan, folder akan terlihat seperti output di bawah, mungkin juga dengan folder lib
:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. Deploy (ulang) aplikasi dasar pengukuran
Jalankan langkah-langkah berikut untuk men-deploy aplikasi Modul 1:
- Hapus folder
lib
jika ada dan jalankan:pip install -t lib -r requirements.txt
untuk mengisi ulanglib
. Anda mungkin perlu menggunakan perintahpip2
jika sudah menginstal Python 2 dan 3. - Pastikan Anda telah menginstal dan melakukan inisialisasi alat command line
gcloud
dan meninjau penggunaannya. - Tetapkan project Cloud dengan
gcloud config set project
PROJECT_ID
jika Anda tidak ingin memasukkanPROJECT_ID
dengan setiap perintahgcloud
yang dikeluarkan. - Men-deploy aplikasi contoh dengan
gcloud app deploy
- Pastikan aplikasi Modul 1 berjalan seperti yang diharapkan dan menampilkan kunjungan terbaru (diilustrasikan di bawah)
4. Update konfigurasi
Tidak ada perubahan yang diperlukan pada file konfigurasi App Engine standar (app.yaml
, requirements.txt
, appengine_config.py
). Sebagai gantinya, tambahkan file konfigurasi baru, queue.yaml
, dengan konten berikut, dan tempatkan di direktori tingkat atas yang sama:
queue:
- name: pullq
mode: pull
File queue.yaml
menentukan semua task queue yang ada untuk aplikasi Anda (kecuali antrean default
[push] yang dibuat secara otomatis oleh App Engine). Dalam kasus ini, hanya ada satu, yaitu antrean pull bernama pullq
. App Engine mengharuskan perintah mode
ditentukan sebagai pull
. Jika tidak, App Engine akan membuat push queue secara default. Pelajari lebih lanjut cara membuat antrean pull di dokumentasi. Lihat juga halaman referensi queue.yaml
untuk opsi lainnya.
Deploy file ini secara terpisah dari aplikasi Anda. Anda akan tetap menggunakan gcloud app deploy
, tetapi juga menyediakan queue.yaml
di command line:
$ gcloud app deploy queue.yaml Configurations to update: descriptor: [/tmp/mod18-gaepull/queue.yaml] type: [task queues] target project: [my-project] WARNING: Caution: You are updating queue configuration. This will override any changes performed using 'gcloud tasks'. More details at https://cloud.google.com/tasks/docs/queue-yaml Do you want to continue (Y/n)? Updating config [queue]...⠹WARNING: We are using the App Engine app location (us-central1) as the default location. Please use the "--location" flag if you want to use a different location. Updating config [queue]...done. Task queues have been updated. Visit the Cloud Platform Console Task Queues page to view your queues and cron jobs. $
5. Mengubah kode aplikasi
Bagian ini menampilkan pembaruan untuk file berikut:
main.py
— menambahkan penggunaan pull queue ke aplikasi utamatemplates/index.html
— memperbarui template web untuk menampilkan data baru
Impor dan konstanta
Langkah pertama adalah menambahkan satu impor baru dan beberapa konstanta untuk mendukung antrean pull:
- Tambahkan impor library Task Queue,
google.appengine.api.taskqueue
. - Tambahkan tiga konstanta untuk mendukung menyewa jumlah maksimum tugas pull (
TASKS
) selama satu jam (HOUR
) dari antrean pull (QUEUE
). - Tambahkan konstanta untuk menampilkan kunjungan terbaru serta pengunjung teratas (
LIMIT
).
Berikut adalah kode asli dan tampilannya setelah pembaruan dilakukan:
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 taskqueue
from google.appengine.ext import ndb
HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)
Menambahkan tugas pull (mengumpulkan data untuk tugas &membuat tugas di antrean pull)
Model data Visit
tetap sama, seperti halnya membuat kueri kunjungan untuk ditampilkan di fetch_visits()
. Satu-satunya perubahan yang diperlukan di bagian kode ini adalah di store_visit()
. Selain mendaftarkan kunjungan, tambahkan tugas ke antrean pull dengan alamat IP pengunjung agar pekerja dapat menambahkan penghitung pengunjung.
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'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
SETELAH:
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 in Datastore and queue request to bump visitor count'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
Membuat model data dan fungsi kueri untuk pelacakan pengunjung
Tambahkan model data VisitorCount
untuk melacak pengunjung; data tersebut harus memiliki kolom untuk visitor
serta bilangan bulat counter
untuk melacak jumlah kunjungan. Kemudian, tambahkan fungsi baru (sebagai alternatif, dapat berupa Python classmethod
) bernama fetch_counts()
untuk membuat kueri dan menampilkan pengunjung teratas dalam urutan paling kecil. Tambahkan class dan fungsi tepat di bawah isi fetch_visits()
:
class VisitorCount(ndb.Model):
visitor = ndb.StringProperty(repeated=False, required=True)
counter = ndb.IntegerProperty()
def fetch_counts(limit):
'get top visitors'
return VisitCount.query().order(-VisitCount.counter).fetch(limit)
Menambahkan kode pekerja
Tambahkan fungsi baru log_visitors()
untuk mencatat pengunjung melalui permintaan GET ke /log
. Performance Planner menggunakan kamus/hash untuk melacak jumlah pengunjung terbaru, dengan menggunakan sebanyak mungkin tugas selama satu jam. Untuk setiap tugas, laporan ini menghitung semua kunjungan oleh pengunjung yang sama. Setelah penghitungan tersedia, aplikasi kemudian memperbarui semua entity VisitorCount
terkait yang sudah ada di Datastore atau membuat yang baru jika diperlukan. Langkah terakhir menampilkan pesan teks biasa yang menunjukkan jumlah pengunjung yang terdaftar dari berapa banyak tugas yang diproses. Tambahkan fungsi ini ke main.py
tepat di bawah fetch_counts()
:
@app.route('/log')
def log_visitors():
'worker processes recent visitor counts and updates them in Datastore'
# tally recent visitor counts from queue then delete those tasks
tallies = {}
tasks = QUEUE.lease_tasks(HOUR, TASKS)
for task in tasks:
visitor = task.payload
tallies[visitor] = tallies.get(visitor, 0) + 1
if tasks:
QUEUE.delete_tasks(tasks)
# increment those counts in Datastore and return
for visitor in tallies:
counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
if not counter:
counter = VisitorCount(visitor=visitor, counter=0)
counter.put()
counter.counter += tallies[visitor]
counter.put()
return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
len(tasks), len(tallies))
Memperbarui pengendali utama dengan data tampilan baru
Untuk menampilkan pengunjung teratas, perbarui pengendali utama root()
untuk memanggil fetch_counts()
. Selain itu, template akan diperbarui untuk menampilkan jumlah pengunjung teratas dan kunjungan terbaru. Gabungkan jumlah pengunjung beserta kunjungan terbaru dari panggilan ke fetch_visits()
, lalu masukkan ke dalam satu context
untuk diteruskan ke template web. Berikut adalah kode sebelum dan setelah perubahan ini dilakukan:
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'
store_visit(request.remote_addr, request.user_agent)
context = {
'limit': LIMIT,
'visits': fetch_visits(LIMIT),
'counts': fetch_counts(LIMIT),
}
return render_template('index.html', **context)
Ini adalah semua perubahan yang diperlukan dari main.py
, dan berikut adalah representasi bergambar dari pembaruan tersebut untuk tujuan ilustrasi guna memberi Anda gambaran umum tentang perubahan yang Anda buat pada main.py
:
Perbarui template web dengan data tampilan baru
Template web templates/index.html
memerlukan update untuk menampilkan pengunjung teratas selain payload normal pengunjung terbaru. Masukkan pengunjung teratas dan jumlah mereka ke dalam tabel di bagian atas halaman dan lanjutkan menampilkan kunjungan terbaru seperti sebelumnya. Satu-satunya perubahan lainnya adalah menentukan angka yang ditampilkan melalui variabel limit
, bukan melakukan hardcode angka. Berikut adalah perubahan yang harus Anda buat pada template web:
SEBELUM:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
SETELAH:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Top {{ limit }} visitors</h3>
<table border=1 cellspacing=0 cellpadding=2>
<tr><th>Visitor</th><th>Visits</th></tr>
{% for count in counts %}
<tr><td>{{ count.visitor|e }}</td><td align="center">{{ count.counter }}</td></tr>
{% endfor %}
</table>
<h3>Last {{ limit }} visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
Bagian ini mengakhiri perubahan yang diperlukan dengan menambahkan penggunaan tugas pull Task Queue App Engine ke aplikasi contoh Modul 1. Direktori Anda sekarang merepresentasikan aplikasi contoh Modul 18 dan harus berisi file berikut:
$ ls README.md appengine_config.py queue.yaml templates app.yaml main.py requirements.txt
6. Ringkasan/Pembersihan
Bagian ini mengakhiri codelab ini dengan men-deploy aplikasi, yang memverifikasi bahwa aplikasi berfungsi sebagaimana mestinya dan dalam output yang ditampilkan. Jalankan pekerja secara terpisah untuk memproses jumlah pengunjung. Setelah validasi aplikasi, lakukan langkah-langkah pembersihan dan pertimbangkan langkah berikutnya.
Men-deploy dan memverifikasi aplikasi
Pastikan Anda telah menyiapkan antrean pull Anda seperti yang kita lakukan di dekat bagian atas codelab ini dengan gcloud app deploy queue.yaml
. Jika langkah tersebut telah selesai dan aplikasi contoh Anda siap digunakan, deploy aplikasi dengan gcloud app deploy
. Output harus identik dengan aplikasi Modul 1, tetapi kini menampilkan "pengunjung teratas" tabel di bagian atas:
Meskipun frontend web yang diperbarui menampilkan pengunjung teratas dan kunjungan terbaru, pastikan jumlah pengunjung jangan sertakan kunjungan ini. Aplikasi menampilkan jumlah pengunjung sebelumnya sambil meletakkan tugas baru yang menambah jumlah pengunjung ini dalam antrean pull, tugas yang menunggu untuk diproses.
Anda dapat menjalankan tugas dengan memanggil /log
, dalam berbagai cara:
- Layanan backend App Engine
- Tugas
cron
- {i>Browser<i} internet
- Permintaan HTTP command line (
curl
,wget
, dll.)
Misalnya, jika Anda menggunakan curl
untuk mengirim permintaan GET ke /log
, output Anda akan terlihat seperti ini, mengingat Anda memberikan PROJECT_ID
:
$ curl https://PROJECT_ID.appspot.com/log DONE (with 1 task[s] logging 1 visitor[s])
Jumlah yang diperbarui kemudian akan terlihat pada kunjungan situs web berikutnya. Selesai.
Selamat, Anda telah berhasil menyelesaikan codelab ini karena telah berhasil menambahkan penggunaan layanan pull queue App Engine Task Queue ke aplikasi contoh. Sekarang siap untuk bermigrasi ke Cloud Pub/Sub, Cloud NDB, dan Python 3 di Modul 19.
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 Task Queue App Engine tidak dikenai penagihan tambahan per halaman harga untuk layanan lama yang dipaketkan seperti Task Queue.
- 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
Dalam “migrasi” ini, Anda telah menambahkan penggunaan push queue Task Queue ke aplikasi contoh Modul 1, dengan menambahkan dukungan untuk melacak pengunjung, sehingga menerapkan aplikasi contoh Modul 18. Pada migrasi berikutnya, Anda akan mengupgrade tugas pull App Engine ke Cloud Pub/Sub. Mulai akhir tahun 2021, pengguna tidak lagi harus bermigrasi ke Cloud Pub/Sub saat mengupgrade ke Python 3. Baca selengkapnya tentang hal ini di bagian berikutnya.
Untuk bermigrasi ke Cloud Pub/Sub, lihat codelab Modul 19. Selain itu, ada migrasi tambahan yang perlu dipertimbangkan, seperti Cloud Datastore, Cloud Memorystore, Cloud Storage, atau Cloud Tasks (push queue). Migrasi lintas produk juga berlaku untuk Cloud Run dan Cloud Functions. Semua konten Stasiun Migrasi Serverless (codelab, video, kode sumber [jika tersedia]) dapat diakses di repo open source-nya.
7. Migrasi ke Python 3
Pada musim gugur 2021, tim App Engine memperluas dukungan untuk banyak layanan yang dipaketkan ke runtime generasi ke-2 (yang memiliki runtime generasi ke-1). Hasilnya, Anda tidak perlu lagi bermigrasi dari layanan paket seperti Task Queue App Engine ke Cloud mandiri atau layanan pihak ketiga seperti Cloud Pub/Sub saat mentransfer aplikasi Anda ke Python 3. Dengan kata lain, Anda dapat terus menggunakan Task Queue di aplikasi App Engine Python 3, asalkan Anda memperbaiki kode untuk mengakses layanan paket dari runtime generasi berikutnya.
Anda dapat mempelajari lebih lanjut cara memigrasikan penggunaan layanan yang dipaketkan ke Python 3 di codelab Modul 17 dan video terkaitnya. Meskipun topik tersebut di luar cakupan Modul 18, yang ditautkan di bawah ini adalah versi Python 3 dari aplikasi Modul 1 yang di-port ke Python 3 dan masih menggunakan App Engine NDB. (Pada titik tertentu, aplikasi Modul 18 versi Python 3 juga akan tersedia.)
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 1 (START) dan Modul 18 (FINISH) dapat ditemukan pada tabel di bawah. Library tersebut juga dapat diakses dari repo untuk semua migrasi codelab App Engine; melakukan clone atau mendownload file ZIP.
Codelab | Python 2 | Python 3 |
code (tidak ditampilkan dalam tutorial ini) | ||
Modul 18 (codelab ini) | T/A |
Referensi {i>online<i}
Berikut adalah referensi yang relevan untuk tutorial ini:
Task Queue App Engine
- Ringkasan Task Queue App Engine
- Ringkasan pull queue App Engine Task Queue
- Aplikasi contoh lengkap antrean pull queue App Engine
- Membuat pull queue Task Queue
- Video peluncuran antrean pull Google I/O 2011 ( Aplikasi contoh Pemilih)
queue.yaml
referensiqueue.yaml
vs. Cloud Tasks- Menarik antrean ke panduan migrasi Pub/Sub
- Antrean pull queue App Engine ke contoh dokumentasi Cloud Pub/Sub
Platform 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)
Dukungan jangka panjang untuk runtime lama
Contoh migrasi dokumentasi
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.