Runtime Python adalah stack software yang bertanggung jawab untuk menginstal kode layanan web Anda dan dependensinya, serta menjalankan layanan App Engine Anda.
Runtime Python untuk App Engine di lingkungan standar
dideklarasikan dalam file
app.yaml
:
runtime: pythonVERSION
Dengan VERSION adalah nomor versi Python MAJOR
dan MINOR
. Misalnya, untuk menggunakan versi Python terbaru, Python 3.12, tentukan
312
.
Untuk versi Python lain yang didukung, dan versi Ubuntu yang sesuai untuk versi Python Anda, lihat Jadwal dukungan runtime.
Versi Python 3
Runtime Python menggunakan rilis stabil terbaru dari
versi yang ditentukan dalam file app.yaml
Anda.
App Engine otomatis diupdate ke versi patch baru, tetapi tidak otomatis mengupdate versi minor.
Misalnya, aplikasi Anda mungkin di-deploy di Python 3.7.0 kemudian secara otomatis diupdate ke Python 3.7.1, tetapi tidak akan otomatis diupdate ke versi minor Python 3.8.0 berikutnya.
Coba sendiri
Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa App Engine dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
Coba App Engine secara gratisApp Engine menjalankan aplikasi Python dalam container yang diamankan oleh gVisor pada distribusi Linux Ubuntu terbaru.
Dependensi
Selama deployment, App Engine menggunakan pengelola paket Python
pip
untuk menginstal dependensi
yang ditentukan dalam file metadata requirements.txt
yang berada di direktori utama proyek Anda. Anda tidak perlu mengupload dependensi karena App Engine menjalankan penginstalan baru.
Spesifikasi dependensi yang menggunakan standar Pipfile
/Pipfile.lock
saat ini
tidak didukung dan project Anda tidak boleh memiliki file tersebut.
Proses mulai aplikasi
Runtime memulai aplikasi Anda dengan menjalankan perintah yang Anda tentukan di
kolom entrypoint
dalam
file app.yaml
Anda. Jika telah mengonfigurasi titik entri
server web Gunicorn di file app.yaml
, Anda juga harus menambahkan gunicorn
ke
file requirements.txt
.
Titik entri harus memulai server web yang memantau port yang ditentukan oleh variabel lingkungan PORT
. Contoh:
entrypoint: gunicorn -b :$PORT main:app
Framework web yang digunakan aplikasi Anda bertanggung jawab untuk merutekan permintaan ke pengendali yang sesuai di aplikasi Anda.
Jika aplikasi Anda memenuhi persyaratan berikut, App Engine akan memulai
aplikasi Anda dengan server web gunicorn
jika Anda tidak
menentukan kolom entrypoint
:
Root direktori aplikasi Anda berisi file
main.py
dengan objek yang kompatibel dengan WSGI bernamaapp
.Aplikasi Anda tidak berisi file
Pipfile
atauPipfile.lock
.
Jika Anda tidak menentukan titik entri untuk runtime Python 3, App Engine akan mengonfigurasi dan memulai server web Gunicorn default.
Praktik terbaik titik entri
Pastikan modul Python yang diperlukan untuk menjalankan titik entri yang ditentukan di
app.yaml
ada di filerequirements.txt
. Tambahkangunicorn
ke filerequirements.txt
hanya jika endpointgunicorn
secara eksplisit ditentukan dalam fileapp.yaml
.Untuk performa terbaik, titik entri harus ringan karena berjalan setiap kali instance baru aplikasi Anda dibuat.
Anda dapat menggunakan kolom titik entri untuk menyesuaikan performa aplikasi. Misalnya, jika menggunakan
gunicorn
sebagai server web, Anda dapat menggunakan tanda--workers
di kolom titik entri untuk mengonfigurasi jumlah pekerja yang menayangkan aplikasi Anda.Jumlah worker yang Anda tentukan harus cocok dengan class instance aplikasi App Engine Anda:
Class instance Pekerja F1 2 F2 4 F4 8 F4_1G 8 B1 2 B2 4 B4 8 B4_1G 8 B8 8 Panduan ini berfungsi sebagai titik awal untuk memilih jumlah worker. Anda mungkin perlu menggunakan jumlah worker yang berbeda, bergantung pada karakteristik performa aplikasi. Contoh di bawah ini menunjukkan deployment App Engine yang menggunakan dua worker
gunicorn
untuk menyajikan aplikasi:entrypoint: gunicorn -b :$PORT -w 2 main:app
Sebaiknya konfigurasikan server web Anda untuk memproses dan merespons permintaan HTTP pada port yang ditentukan oleh variabel lingkungan
$PORT
Anda. Penggunaan port default8080
mencegah App Engine menggunakan layer NGINX untuk mengompresi respons HTTP. Ingat bahwa jika Anda menggunakan port8080
, peringatan tentang port8080
dan NGINX akan ditampilkan dalam file log aplikasi Anda.
Framework web lainnya
Selain Django dan Flask, Anda dapat menggunakan framework web lainnya bersama App Engine, seperti uwsgi
dan Tornado
. Contoh berikut menunjukkan cara menggunakan uwsgi
dengan App Engine:
Variabel lingkungan
Variabel lingkungan berikut ditetapkan oleh runtime:
Variabel lingkungan | Deskripsi |
---|---|
GAE_APPLICATION
|
ID aplikasi App Engine Anda. ID ini diawali dengan 'region code~' seperti 'e~' untuk aplikasi yang di-deploy di Eropa. |
GAE_DEPLOYMENT_ID |
ID deployment saat ini. |
GAE_ENV |
Lingkungan App Engine. Tetapkan ke standard . |
GAE_INSTANCE |
ID instance di mana layanan Anda saat ini berjalan. |
GAE_MEMORY_MB |
Jumlah memori yang tersedia untuk proses aplikasi, dalam MB. |
GAE_RUNTIME |
Runtime yang ditentukan dalam file app.yaml Anda. |
GAE_SERVICE |
Nama layanan yang ditentukan dalam file app.yaml Anda. Jika tidak ada nama layanan yang ditentukan, nama akan ditetapkan ke default . |
GAE_VERSION |
Label versi layanan Anda saat ini. |
GOOGLE_CLOUD_PROJECT |
ID project Google Cloud yang terkait dengan aplikasi Anda. |
PORT |
Port yang menerima permintaan HTTP. |
NODE_ENV (Hanya tersedia di runtime Node.js) |
Tetapkan ke production saat layanan Anda di-deploy. |
Anda dapat menentukan variabel lingkungan tambahan dalam file app.yaml
, tetapi nilai di atas tidak dapat diganti, kecuali untuk NODE_ENV
.
HTTPS dan proxy penerusan
App Engine menghentikan koneksi HTTPS di load balancer dan meneruskan permintaan ke aplikasi Anda. Beberapa aplikasi perlu menentukan IP dan protokol permintaan asli. Alamat IP pengguna tersedia di header X-Forwarded-For
standar. Aplikasi yang memerlukan informasi ini harus mengonfigurasi framework webnya untuk memercayai proxy.
Filesystem
Runtime ini meliputi sistem file lengkap. Sistem file bersifat hanya baca, kecuali untuk
lokasi /tmp
, yang merupakan disk virtual yang menyimpan data di
RAM instance App Engine Anda.
Server metadata
Setiap instance aplikasi Anda dapat menggunakan server metadata App Engine untuk mengkueri informasi tentang instance dan project Anda.
Anda dapat mengakses server metadata melalui endpoint berikut:
http://metadata
http://metadata.google.internal
Permintaan yang dikirim ke server metadata harus menyertakan header permintaan Metadata-Flavor: Google
. Header ini menunjukkan bahwa permintaan dikirim dengan tujuan mengambil nilai metadata.
Tabel berikut mencantumkan daftar endpoint tempat Anda dapat membuat permintaan HTTP untuk metadata tertentu:
Endpoint metadata | Deskripsi |
---|---|
/computeMetadata/v1/project/numeric-project-id |
Nomor project yang ditetapkan ke project Anda. |
/computeMetadata/v1/project/project-id |
Project ID yang ditetapkan ke project Anda. |
/computeMetadata/v1/instance/region |
Region di mana instance berjalan. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
Email akun layanan default yang ditetapkan ke project Anda. |
/computeMetadata/v1/instance/service-accounts/default/ |
Mencantumkan semua akun layanan default untuk project Anda. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
Mencantumkan semua cakupan yang didukung untuk akun layanan default. |
/computeMetadata/v1/instance/service-accounts/default/token |
Menampilkan token autentikasi yang dapat digunakan untuk mengautentikasi aplikasi Anda ke Google Cloud API lain. |
Misalnya, untuk mengambil project ID Anda, kirim permintaan ke http://metadata.google.internal/computeMetadata/v1/project/project-id
.