Dengan App Engine, Anda dapat membangun aplikasi web menggunakan bahasa pemrograman Python, serta manfaatkan berbagai library, alat, dan framework untuk Python yang digunakan developer profesional untuk membangun aplikasi web kelas dunia. Aplikasi Python Anda berjalan di infrastruktur skalabel Google, dan menggunakan layanan serta penyimpanan persisten berskala besar.
Pengantar
App Engine menjalankan kode aplikasi Python Anda menggunakan penafsir Python yang telah dimuat sebelumnya di lingkungan "sandbox" yang aman. Aplikasi Anda menerima permintaan web, melakukan pekerjaan, dan mengirim respons melalui interaksi dengan lingkungan ini.
Aplikasi web Python berinteraksi dengan server web App Engine menggunakan protokol WSGI, sehingga aplikasi dapat menggunakan framework aplikasi web yang kompatibel dengan WSGI. App Engine menyertakan framework aplikasi web sederhana yang disebut webapp2, untuk memudahkan Anda memulai. Untuk aplikasi yang lebih besar, framework pihak ketiga yang matang, seperti Django, berfungsi baik dengan App Engine.
Penafsir Python dapat menjalankan kode Python apa pun, termasuk modul Python yang disertakan dengan aplikasi Anda, serta library standar Python. Penafsir tidak dapat memuat modul Python dengan kode C; ini adalah lingkungan Python yang "murni".
Lingkungan "sandbox" yang aman mengisolasi aplikasi Anda untuk mendapatkan layanan dan keamanan. Fitur ini memastikan bahwa aplikasi hanya dapat melakukan tindakan yang tidak mengganggu performa dan skalabilitas aplikasi lain. Misalnya, aplikasi tidak dapat menulis data ke sistem file lokal atau membuat koneksi jaringan arbitrer. Sebagai gantinya, aplikasi menggunakan layanan skalabel yang disediakan oleh App Engine untuk menyimpan data dan berkomunikasi melalui internet. Penafsir Python mengajukan pengecualian saat aplikasi mencoba mengimpor modul Python dari library standar yang diketahui tidak berfungsi dalam pembatasan sandbox.
Platform App Engine menyediakan banyak layanan yang dapat dipanggil oleh kode Anda. Aplikasi Anda juga dapat mengonfigurasi tugas terjadwal yang berjalan pada interval tertentu.
Memilih runtime Python 2
Anda menentukan lingkungan runtime Python di file konfigurasi app.yaml
,
yang digunakan untuk men-deploy aplikasi Anda ke App Engine. Misalnya, Anda
menambahkan kode berikut ke file app.yaml
untuk menggunakan
Python versi 2.7:
runtime: python27
api_version: 1
threadsafe: true
...
Elemen pertama, runtime
, memilih lingkungan runtime Python.
Elemen kedua, api_version
, memilih versi lingkungan runtime Python
yang akan digunakan. Pada saat penulisan ini, App Engine hanya memiliki satu versi
lingkungan Python, 1
. Jika tim App Engine perlu
merilis perubahan pada lingkungan yang mungkin tidak kompatibel dengan kode
yang ada, tim App Engine akan melakukannya dengan ID versi baru. Aplikasi Anda akan terus
menggunakan versi yang dipilih sampai Anda mengubah setelan api_version
dan mengupload
aplikasi.
Untuk mengetahui informasi selengkapnya tentang file app.yaml
dan cara men-deploy aplikasi Anda ke App
Engine, lihat topik Referensi app.yaml
,
Bermigrasi ke Python 2.7,
dan Men-deploy Aplikasi Python.
Sandbox
Agar App Engine dapat mendistribusikan permintaan aplikasi di beberapa server web, dan mencegah satu aplikasi mengintervensi server web lainnya, aplikasi akan berjalan di lingkungan "sandbox" yang dibatasi. Di lingkungan ini, aplikasi dapat menjalankan kode, menyimpan, dan membuat kueri data di Datastore, menggunakan email App Engine, URL-fetch, dan layanan pengguna, serta memeriksa permintaan web pengguna dan menyiapkan respons.Aplikasi App Engine tidak dapat:
menulis ke sistem file. Aplikasi harus menggunakan Datastore untuk menyimpan data persisten. Membaca dari sistem file diizinkan, dan semua file aplikasi yang diupload dengan aplikasi tersedia.
merespons dengan lambat. Permintaan web ke aplikasi harus ditangani dalam beberapa detik. Proses yang memerlukan waktu sangat lama untuk merespons dihentikan agar tidak kelebihan beban pada server web.
melakukan jenis panggilan sistem lain.
Sandbox di Python
Anda dapat mengupload dan menggunakan file .pyc
saat menggunakan runtime Python 2.7, tetapi Anda
tidak dapat mengupload versi .py
dan .pyc
dari file yang sama. Anda dapat mengupload file
.zip yang berisi file .py
atau .pyc
(atau kombinasinya). Sejumlah
peringatan penting berlaku jika Anda mengupload file .pyc
:
- Untuk skrip CGI,
pengendali skrip
tetap harus menggunakan ekstensi file
.py
, meskipun Anda mengupload file.pyc
. - Secara default, file
.pyc
dilewati selama deployment. Anda harus mengganti elemenskip_files
di fileapp.yaml
agar nilai baru tidak menyebabkan file.pyc
dilewati. - Anda harus menggunakan Python 2.7 untuk membangun file
.pyc
. Jika memiliki versi Python yang berbeda (seperti Python 2.6) di mesin pengembangan, Anda harus mendapatkan versi 2.7 untuk membangun file.pyc
yang kompatibel.
Python 2 Murni
Semua kode untuk lingkungan runtime Python harus berupa Python murni, dan tidak menyertakan ekstensi C atau kode lain yang harus dikompilasi.
Lingkungan ini mencakup library standar
Python.
Beberapa modul telah dinonaktifkan karena fungsi intinya tidak didukung
oleh App Engine, seperti jaringan atau penulisan ke sistem file. Selain
itu, modul os
tersedia, tetapi fitur yang tidak didukung dinonaktifkan.
Upaya untuk mengimpor modul yang tidak didukung atau menggunakan fitur yang tidak didukung akan
menghasilkan pengecualian.
Beberapa modul dari library standar telah diganti atau disesuaikan agar berfungsi dengan App Engine. Modul-modul ini bervariasi di antara dua runtime Python, seperti yang dijelaskan di bawah ini.
Library yang disesuaikan di Python versi 2.7
Pada runtime Python versi 2.7, modul berikut telah diganti atau disesuaikan:
tempfile dinonaktifkan, kecuali untuk
TemporaryFile
yang diberi alias ke StringIO.logging tersedia dan penggunaannya sangat disarankan! Lihat Logging.
Selain library standar Python dan library App Engine, runtime Python versi 2.7 menyertakan beberapa library pihak ketiga.
Menambahkan Library Python Pihak Ketiga
Anda dapat menyertakan library Python pihak ketiga bersama aplikasi Anda dengan menempatkan kode di direktori aplikasi. Jika Anda membuat link simbolis ke direktori library di direktori aplikasi, link tersebut akan diikuti dan library disertakan dalam aplikasi yang Anda deploy ke App Engine.
Jalur include modul Python menyertakan direktori root
aplikasi Anda, yaitu direktori yang berisi file app.yaml
. Modul Python
yang Anda buat di direktori root aplikasi tersedia menggunakan jalur
dari root. Jangan lupa untuk membuat file __init__.py
yang diperlukan di
sub-direktori Anda agar Python mengenali sub-direktori tersebut sebagai paket.
Selain itu, pastikan library Anda tidak memerlukan ekstensi C.
Rangkaian pesan
Thread dapat dibuat di Python versi 2.7 menggunakan
modul thread
atau threading
. Perhatikan bahwa thread akan digabungkan oleh runtime
saat permintaan berakhir sehingga thread tidak dapat berjalan setelah akhir permintaan.
Thread latar belakang
Kode yang berjalan pada instance dengan penskalaan manual atau dasar dapat memulai thread latar belakang yang dapat aktif lebih lama dibandingkan permintaan yang menghasilkannya. Hal ini memungkinkan instance melakukan tugas berkala atau terjadwal arbitrer, atau terus bekerja di latar belakang setelah permintaan ditampilkan kepada pengguna.
os.environ
thread latar belakang dan entri logging tidak bergantung pada
thread yang menghasilkannya.
Anda harus mengimpor modul google.appengine.api.background_thread
dari SDK
untuk App Engine.
Class
BackgroundThread
sama seperti threading.Threadclass
Python biasa, tetapi dapat "aktif lebih lama"
dari permintaan yang menghasilkannya. Ada juga fungsi start_new_background_thread()
yang membuat thread latar belakang dan memulainya:
Alat
SDK untuk App Engine mencakup alat untuk menguji aplikasi, mengupload file aplikasi, mengelola indeks Datastore, mendownload data log, dan mengupload data dalam jumlah besar ke Datastore singkat ini.
Server pengembangan menjalankan aplikasi Anda di komputer lokal untuk menguji aplikasi. Server akan menyimulasikan layanan Datastore dan pembatasan sandbox. Server pengembangan juga dapat membuat konfigurasi untuk indeks Datastore berdasarkan kueri yang dilakukan aplikasi selama pengujian.
Alat gcloud
menangani semua interaksi command line dengan aplikasi Anda yang berjalan di App
Engine. Anda menggunakan gcloud app deploy
untuk mengupload aplikasi ke
App Engine, atau untuk memperbarui file konfigurasi individual, seperti
konfigurasi indeks Datastore, yang memungkinkan Anda membangun
indeks baru sebelum men-deploy kode. Anda juga dapat melihat data log aplikasi sehingga
dapat menganalisis performa aplikasi menggunakan alat Anda sendiri.
Konkurensi dan latensi
Latensi aplikasi Anda memiliki dampak terbesar pada jumlah instance yang diperlukan untuk melayani traffic Anda. Jika Anda memproses permintaan dengan cepat, satu instance dapat menangani banyak permintaan.
Instance thread tunggal dapat menangani satu permintaan serentak. Oleh karena itu, ada hubungan langsung antara latensi dan jumlah permintaan yang dapat ditangani pada instance per detik. Misalnya, latensi 10 md sama dengan 100 permintaan/detik/instance.Instance multi-thread dapat menangani banyak permintaan serentak. Oleh karena itu, ada hubungan langsung antara CPU yang dipakai dan jumlah permintaan/detik.
Aplikasi Python versi 2.7 mendukung permintaan serentak, sehingga satu instance dapat menangani permintaan baru sambil menunggu permintaan lain selesai. Konkurensi secara signifikan mengurangi jumlah instance yang dibutuhkan aplikasi, tetapi Anda perlu mendesain aplikasi untuk multithreading.
Misalnya, jika instance B4 (sekitar 2,4 GHz) menggunakan 10 Mcycles/permintaan, Anda dapat memproses 240 permintaan/detik/instance. Jika menggunakan 100 Mcycles/permintaan, Anda dapat memproses 24 permintaan/detik/instance. Angka-angka ini merupakan kasus yang ideal namun cukup realistis dalam kaitannya dengan apa yang dapat Anda capai dalam instance.
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 tempat layanan Anda saat ini berjalan. |
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. |
Anda dapat menentukan variabel lingkungan tambahan dalam file app.yaml
,
tetapi nilai di atas tidak dapat diganti.