Runtime Python adalah stack software yang bertanggung jawab untuk menginstal kode aplikasi dan dependensi Anda, lalu menjalankan aplikasi tersebut di lingkungan fleksibel.
Versi Python
Python 3.12 menggunakan buildpack. Untuk mengetahui daftar lengkap versi Python yang didukung, dan versi Ubuntu yang sesuai, lihat Jadwal dukungan runtime.
Untuk menggunakan versi Python yang didukung, Anda harus:
Sertakan setelan
runtime_config
danoperating_system
dalam fileapp.yaml
untuk menentukan sistem operasi.Instal
gcloud
CLI versi 420.0.0 atau yang lebih baru. Anda dapat memperbarui alat CLI dengan menjalankan perintahgcloud components update
. Untuk melihat versi yang diinstal, jalankan perintahgcloud version
.Secara opsional, Anda dapat menentukan versi runtime dengan menyertakan setelan
runtime_version
dalam fileapp.yaml
. Secara default, versi Python terbaru digunakan jika setelanruntime_version
tidak ditentukan.
Contoh
Untuk menentukan Python 3.12 di Ubuntu 22:
runtime: python env: flex entrypoint: gunicorn -b :$PORT main:app runtime_config: operating_system: "ubuntu22" runtime_version: "3.12"
Untuk menentukan versi Python terbaru yang didukung di Ubuntu 22:
runtime: python env: flex entrypoint: gunicorn -b :$PORT main:app runtime_config: operating_system: "ubuntu22"
Lihat halaman referensi app.yaml
untuk informasi selengkapnya.
Versi runtime sebelumnya
Untuk Python versi 3.7 dan yang lebih lama, tentukan versi menggunakan setelan runtime_config
dan python_version
di file app.yaml
aplikasi Anda.
Contoh
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
python_version: 3.7
Untuk Python versi 3.7 dan yang lebih lama, penafsir default-nya adalah Python 2.7.12 jika runtime_config
atau python_version
dihilangkan. Misalnya, Anda dapat menggunakan runtime default dengan menetapkan runtime: python
dalam file app.yaml
:
runtime: python
env: flex
Lihat halaman referensi app.yaml
untuk informasi selengkapnya.
Penafsir yang di-deploy untuk setiap setelan versi ditampilkan dalam tabel berikut:
Setelan python_version |
Penafsir yang di-deploy | ID Runtime | Contoh app.yaml |
---|---|---|---|
2 (default) |
2.7.12 | python2 |
runtime_config: python_version: 2 |
3.4 |
3.4.8 | python34 |
runtime_config: python_version: 3.4 |
3.5 |
3.5.9 | python35 |
runtime_config: python_version: 3.5 |
3 atau 3.6 |
3.6.10 | python36 |
runtime_config: python_version: 3 |
3.7 |
3.7.9 | python37 |
runtime_config: python_version: 3.7 |
Dukungan untuk runtime Python lainnya
Jika perlu menggunakan versi Python yang tidak didukung, Anda dapat membuat runtime kustom dan memilih image dasar yang valid dengan versi Python yang Anda butuhkan.
Untuk image dasar yang disediakan Google atau image dasar Python Docker, lihat Mem-build runtime kustom.
Untuk menyelidiki lebih lanjut menempatkan aplikasi App Engine ke dalam container untuk Cloud Run, lihat panduan migrasi.
Dependensi
Runtime mencari file requirements.txt
dalam direktori sumber aplikasi Anda dan menggunakan pip
untuk menginstal dependensi apa pun sebelum memulai aplikasi Anda. Untuk informasi selengkapnya tentang mendeklarasikan dan mengelola paket, lihat Menggunakan Library Python.
Jika aplikasi memerlukan dependensi pribadi, Anda harus menggunakan runtime kustom berdasarkan runtime Python untuk menginstal paket yang sesuai.
Proses mulai aplikasi
Runtime memulai aplikasi Anda menggunakan entrypoint
yang ditentukan dalam file app.yaml
. Titik entri akan memulai proses yang merespons permintaan HTTP di port yang ditentukan oleh variabel lingkungan PORT
.
Sebagian besar aplikasi web menggunakan server WSGI seperti Gunicorn, uWSGI, atau Waitress.
Sebelum dapat menggunakan salah satu server ini, Anda harus menambahkannya sebagai dependensi dalam requirements.txt
aplikasi Anda.
Jika Anda menggunakan gunicorn
untuk aplikasi Flask, pastikan versi Python aplikasi Anda kompatibel dengan gunicorn
.
Runtime memastikan bahwa semua dependensi diinstal sebelum titik entri Anda dipanggil.
Flask==2.0.2
gunicorn==20.1.0
Contoh titik entri yang menggunakan gunicorn untuk aplikasi Flask:
entrypoint: gunicorn -b :$PORT main:app
Contoh titik entri yang menggunakan gunicorn untuk aplikasi Django:
entrypoint: gunicorn -b :$PORT mydjangoapp:wsgi
Gunicorn adalah server WSGI yang direkomendasikan, tetapi Anda dapat menggunakan server WSGI lainnya. Misalnya, berikut adalah titik entri yang menggunakan uWSGI dengan Flask:
entrypoint: uwsgi --http :$PORT --wsgi-file main.py --callable app
Untuk aplikasi yang dapat menangani permintaan tanpa server WSGI, Anda cukup mengeksekusi skrip Python:
entrypoint: python main.py
Konfigurasi Gunicorn yang direkomendasikan
Contoh titik entri dasar yang ditampilkan di atas dimaksudkan sebagai titik awal dan mungkin sesuai dengan aplikasi web Anda. Namun, sebagian besar aplikasi perlu mengonfigurasi lebih lanjut server WSGI. Alih-alih menetapkan semua setelan pada titik entri, buatlah file gunicorn.conf.py
dalam direktori root project, tempat file app.yaml
Anda berada, lalu tentukan di titik entri:
entrypoint: gunicorn -c gunicorn.conf.py -b :$PORT main:app
Anda dapat membaca semua nilai konfigurasi Gunicorn dalam dokumentasinya.
Worker
Gunicorn menggunakan worker untuk menangani permintaan. Secara default, Gunicorn menggunakan worker sinkronisasi. Class worker ini kompatibel dengan semua aplikasi web, tetapi setiap worker hanya dapat menangani satu permintaan dalam satu waktu. Secara default, gunicorn hanya menggunakan salah satu worker tersebut. Hal ini sering kali dapat menyebabkan instance Anda kurang dimanfaatkan dan meningkatkan latensi dalam aplikasi saat bebannya tinggi.
Sebaiknya tetapkan jumlah worker 2-4 kali jumlah core CPU untuk instance Anda ditambah satu. Anda dapat menentukan ini di gunicorn.conf.py
sebagai:
import multiprocessing
workers = multiprocessing.cpu_count() * 2 + 1
Selain itu, beberapa aplikasi web yang sebagian besar terikat I/O dapat ditingkatkan performanya menggunakan class worker yang berbeda.
Jika class worker Anda memerlukan dependensi tambahan seperti gevent atau tornado, dependensi tersebut harus dideklarasikan dalam requirements.txt
aplikasi Anda.
HTTPS dan proxy penerusan
App Engine menghentikan koneksi HTTPS di load balancer dan meneruskan permintaan ke aplikasi Anda. Sebagian besar aplikasi tidak perlu mengetahui apakah permintaan dikirim melalui HTTPS atau tidak, tetapi aplikasi yang memerlukan informasi ini harus mengonfigurasi Gunicorn untuk memercayai proxy App Engine di gunicorn.conf.py
:
forwarded_allow_ips = '*'
secure_scheme_headers = {'X-FORWARDED-PROTO': 'https'}
Gunicorn sekarang akan memastikan bahwa wsgi.url_scheme
menjadi 'https'
, yang akan digunakan oleh sebagian besar framework web sebagai indikasi permintaan aman. Jika server atau framework WSGI Anda tidak mendukungnya, cukup periksa nilai header X-Forwarded-Proto
secara manual.
Beberapa aplikasi juga perlu memastikan alamat IP pengguna. Ini tersedia di header X-Forwarded-For
.
Perhatikan bahwa setelan secure_scheme_headers
di gunicorn.conf.py
harus berupa huruf besar, seperti X-FORWARDED-PROTO
, tetapi header yang dapat dibaca kode akan menggunakan huruf besar dan kecil, seperti X-Forwarded-Proto
.
Memperpanjang runtime
Runtime Python lingkungan fleksibel dapat digunakan untuk membuat runtime kustom. Lihat Menyesuaikan Python untuk informasi selengkapnya.
Variabel lingkungan
Variabel lingkungan berikut ditetapkan oleh lingkungan runtime:
Variabel Lingkungan | Deskripsi |
---|---|
GAE_INSTANCE |
Nama instance saat ini. |
GAE_MEMORY_MB |
Jumlah memori yang tersedia untuk proses aplikasi. |
GAE_SERVICE |
Nama layanan yang ditentukan dalam file app.yaml aplikasi Anda, atau jika tidak ada nama layanan yang ditentukan, nama akan ditetapkan ke default . |
GAE_VERSION |
Label versi aplikasi saat ini. |
GOOGLE_CLOUD_PROJECT |
Project ID yang terkait dengan aplikasi Anda, yang terlihat di konsol Google Cloud |
PORT |
Port yang akan menerima permintaan HTTP. |
Anda dapat menetapkan variabel lingkungan tambahan di file app.yaml
.
Server metadata
Setiap instance aplikasi Anda dapat menggunakan server metadata Compute Engine untuk mengkueri informasi tentang instance, termasuk nama host, alamat IP eksternal, ID instance, metadata kustom, dan informasi akun layanan. App Engine tidak mengizinkan Anda menetapkan metadata kustom untuk setiap instance, tetapi Anda dapat menetapkan metadata kustom tingkat project dan membacanya dari instance App Engine dan Compute Engine.
Fungsi contoh ini menggunakan server metadata untuk mendapatkan alamat IP eksternal instance: