appengine-web.xml reference

ID region

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal tersebut, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Anda harus menggunakan file appengine-web.xml untuk mengonfigurasi aplikasi hanya jika Anda memigrasikan aplikasi yang ada dari runtime App Engine Java 8 ke versi Java terbaru yang didukung dan Anda ingin menggunakan layanan paket lama. Jika Anda menggunakan appengine-web.xml dalam project, app.yaml akan otomatis dibuat untuk Anda pada saat deployment.

Aplikasi App Engine Java menggunakan file konfigurasi, bernama appengine-web.xml, untuk menentukan informasi tentang aplikasi Anda dan mengidentifikasi file mana dalam file WAR aplikasi yang merupakan file statis (seperti gambar) dan file resource mana yang digunakan aplikasi.

Sintaks

Aplikasi App Engine Java harus memiliki file bernama appengine-web.xml di dalam WAR-nya, di direktori WEB-INF/. File ini adalah file XML dengan elemen root <appengine-web-app>.

Anda dapat menemukan Definisi Jenis Dokumen dan spesifikasi skema untuk appengine-web.xml di direktori docs/ SDK.

Elemen Deskripsi
<application>

Tidak diperlukan jika Anda men-deploy aplikasi menggunakan alat berbasis Google Cloud SDK, seperti perintah gcloud app deploy, plugin IntelliJ atau Eclipse, plugin Maven atau Gradle. Alat berbasis Google Cloud SDK mengabaikan elemen ini dan mendapatkan project ID dari properti project gcloud config. Perlu diperhatikan bahwa meskipun Anda dapat mengganti project ID menggunakan alat command line gcloud, hal ini akan menetapkan project ID di seluruh mesin, yang dapat menyebabkan kebingungan jika Anda mengembangkan beberapa project. Elemen <application> berisi project ID aplikasi. Ini adalah project ID yang Anda daftarkan saat membuat project di Konsol Google Cloud.

<app-engine-apis>

Opsional. Jika Anda ingin menggunakan layanan App Engine lama yang dipaketkan untuk runtime generasi kedua, atur kolom ini ke true.

<entrypoint>

Opsional dan hanya untuk runtime generasi kedua. Mengganti titik entri default yang merupakan command line proses yang melakukan booting aplikasi Java. Secara default, titik entri yang dihasilkan untuk class instance F4 (setelan memori dihitung dari class instance) setara dengan konfigurasi berikut:

  <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <entrypoint>
   java
   -showversion -Xms32M -Xmx819M -XX:+UseG1GC -XX:+ParallelRefProcEnabled
   -XX:+PrintCommandLineFlags
   --add-opens java.base/java.lang=ALL-UNNAMED
   --add-opens java.base/java.nio.charset=ALL-UNNAMED
   --add-opens java.logging/java.util.logging=ALL-UNNAMED
   --add-opens java.base/java.util.concurrent=ALL-UNNAMED
   -Dclasspath.runtimebase=/base/java_runtime
   -Djava.class.path=/base/java_runtime/runtime-main.jar
   -Djava.library.path=/base/java_runtime:
   com/google/apphosting/runtime/JavaRuntimeMainWithDefaults
   --fixed_application_path=/workspace
   /base/java_runtime
  </entrypoint>
</appengine-web-app>

Anda dapat mengubah konfigurasi untuk menambahkan flag proses JVM tambahan atau menentukan proses Anda sendiri untuk melakukan booting. Perhatikan bahwa aplikasi di-deploy di direktori /workspace, sedangkan JAR runtime berada di direktori /base/java_runtime.

Pelajari cara menyesuaikan titik entri untuk runtime Java menggunakan variabel lingkungan..
<async-session-persistence>

Opsional. Anda dapat mengurangi latensi permintaan dengan mengonfigurasi aplikasi untuk menulis data sesi HTTP secara asinkron ke datastore:

<async-session-persistence enabled="true" />

Dengan mengaktifkan persistensi sesi asinkron, App Engine akan mengirimkan tugas Task Queue untuk menulis data sesi ke datastore sebelum menulis data ke memcache. Secara default, tugas akan dikirim ke antrean `default`. Jika Anda ingin menggunakan antrean lain, tambahkan atribut `queue-name`:

  <async-session-persistence enabled="true" queue-name="myqueue"/>

Data sesi selalu ditulis secara sinkron ke memcache. Jika permintaan mencoba membaca data sesi saat memcache tidak tersedia (atau data sesi telah dihapus), permintaan tersebut akan digagalkan ke Datastore, yang mungkin belum memiliki data sesi terbaru. Artinya, persistensi sesi asinkron dapat menyebabkan aplikasi melihat data sesi yang sudah tidak berlaku. Namun, untuk sebagian besar aplikasi, manfaat latensi jauh lebih besar daripada risikonya.

<auto-id-policy> Opsional. Jika Anda menetapkan ID entity secara otomatis, Anda dapat mengubah metode yang digunakan dengan menetapkan kebijakan ID otomatis. Berikut ini adalah opsi yang valid:
default
Default. Menggunakan ID otomatis yang tersebar, yang merupakan bilangan bulat yang didistribusikan dengan baik, dan cukup kecil untuk ditampilkan oleh float 64-bit.
legacy
Opsi lama tidak akan digunakan lagi dalam rilis mendatang dan akan dihapus. Untuk mengetahui informasi lebih lanjut, lihat postingan blog yang mengumumkan perubahan ini.
<automatic-scaling>

Opsional. Untuk penjelasan lebih lanjut, lihat bagian penskalaan otomatis.

<basic-scaling>

Opsional. Untuk penjelasan lebih lanjut, lihat bagian penskalaan dasar.

<env-variables>

Opsional. File appengine-web.xml dapat menentukan variabel lingkungan yang ditetapkan saat aplikasi berjalan.

<env-variables>
<env-var name="DEFAULT_ENCODING" value="UTF-8" />
</env-variables>

Untuk menghindari konflik dengan lingkungan lokal Anda, server pengembangan tidak menetapkan variabel lingkungan berdasarkan file ini, dan mengharuskan lingkungan lokal menetapkan variabel ini ke nilai yang cocok.

export DEFAULT_ENCODING="UTF-8"
dev_appserver war

Saat di-deploy ke App Engine, lingkungan dibuat dengan variabel ini yang telah ditetapkan.

<inbound-services>

Opsional. Sebelum aplikasi dapat menerima email, aplikasi harus dikonfigurasi untuk mengaktifkan layanan. Anda dapat mengaktifkan layanan untuk aplikasi Java dengan menyertakan bagian <inbound-services> dalam file appengine-web.xml.

Tersedia layanan masuk berikut:

mail
Mengizinkan aplikasi Anda menerima email.
<instance-class>

Opsional. Ukuran class instance untuk modul ini.

Class instance berikut tersedia saat menentukan opsi penskalaan yang berbeda:

automatic_scaling
Saat menggunakan penskalaan otomatis, class instance F1, F2, F4, dan F4_1G akan tersedia.
Default: F1 akan ditetapkan jika Anda tidak menentukan class instance beserta elemen automatic_scaling.
basic_scaling
Saat menggunakan penskalaan dasar, class instance B1, B2, B4, B4_1G, dan B8 akan tersedia.
Default: B2 akan ditetapkan jika Anda tidak menentukan class instance bersama dengan basic_scaling.
manual_scaling
Saat menggunakan penskalaan manual, class instance B1, B2, B4, B4_1G, dan B8 akan tersedia.
Default: B2 akan ditetapkan jika Anda tidak menentukan class instance bersama dengan manual_scaling.

Catatan: Jikainstance-class disetel keF2 atau yang lebih tinggi, Anda dapat mengoptimalkan instance dengan menyetel max-concurrent-requests ke nilai yang lebih tinggi dari 10, yang merupakan nilai default. Untuk menemukan nilai optimal, tingkatkan secara bertahap dan pantau kinerja aplikasi Anda.

<manual-scaling>

Opsional. Untuk penjelasan lebih lanjut, lihat bagian penskalaan manual.

<precompilation-enabled>

Opsional. App Engine menggunakan proses "prakompilasi" dengan bytecode Java dari sebuah aplikasi untuk meningkatkan performa aplikasi di Java runtime environment. Fungsi kode prakompilasi identik dengan bytecode asli.

Jika karena alasan tertentu Anda lebih memilih agar aplikasi tidak menggunakan prakompilasi, Anda dapat menonaktifkannya dengan menambahkan kode berikut ke file appengine-web.xml:

<precompilation-enabled>false</precompilation-enabled>
<module>

Catatan: Modul kini diberi nama Layanan dan layanan tetap dideklarasikan dalam file appengine-web.xml sebagai modul, misalnya: <module>service_name</module>.

Wajib diisi jika membuat layanan. Opsional untuk layanan default. Setiap layanan dan versi harus memiliki nama. Nama dapat berisi angka, huruf, dan tanda hubung. Nama ini tidak boleh lebih dari 63 karakter, diawali atau diakhiri dengan tanda hubung, dan berisi string `-dot`. Pilih nama unik untuk setiap layanan dan setiap versi. Jangan gunakan nama yang sama antara layanan dan versi.

Lihat juga service.

<public-root>

Opsional. <public-root> adalah direktori dalam aplikasi Anda yang berisi file statis untuk aplikasi tersebut. Saat permintaan untuk file statis dibuat, <public-root> untuk aplikasi Anda akan ditambahkan ke jalur permintaan. Ini akan memberikan jalur file aplikasi yang berisi konten yang diminta.

Nilai default <public-root> adalah /.

Misalnya, kode berikut akan memetakan jalur URL /index.html ke jalur file aplikasi /static/index.html:

<public-root>/static</public-root>
<resource-files>

Opsional. File yang tercantum dalam elemen <resource-files> dapat diakses oleh kode aplikasi menggunakan sistem file. File ini disimpan di server aplikasi bersama aplikasi, berbeda dengan cara file statis disimpan dan ditayangkan.

Elemen <resource-files> dapat berisi elemen berikut:

<include>
Elemen <include> menetapkan file sebagai file resource dan tersedia untuk kode aplikasi Anda. File ini hanya dapat dibaca oleh kode Anda dan bukan digunakan untuk melayani traffic. Menyertakan dan mengecualikan file.
<exclude>

File dan direktori yang cocok dengan pola <exclude> tidak akan diupload atau tersedia untuk kode aplikasi Anda. Namun, file dan direktori ini tetap dapat diakses oleh aplikasi Anda saat berjalan di Server Pengembangan lokal. Untuk informasi selengkapnya, lihat Menyertakan dan mengecualikan file.

Contoh:
<resource-files>
  <include path="/**.xml" />
  <exclude path="/feeds/**.xml" />
</resource-files>

Contoh ini menunjukkan cara menetapkan semua file .xml sebagai file resource, kecuali file yang ada dalam direktori feeds/ dan semua subdirektorinya.

File resource App Engine dibaca menggunakan java.io.File atau javax.servlet.ServletContext.getResource/getResourceAsStream. Tidak dapat diakses melalui Class.getResourceAsStream().

<runtime>

Untuk menggunakan versi Java terbaru yang didukung, Anda harus menentukan entri ini dengan nilai java21.

Contoh:
<runtime>java21</runtime>
<service>

Layanan sebelumnya dikenal sebagai modul.

Saat ini, menentukan layanan sebagai: <service>service_name</service > hanya didukung oleh perintah gcloud app.

<service-account>

Opsional. Elemen <service-account> memungkinkan Anda menentukan akun layanan yang dikelola pengguna sebagai identitas versi. Akun layanan yang ditentukan akan digunakan saat mengakses layanan Google Cloud lainnya dan menjalankan tugas.

Contoh:
<service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account>
<sessions-enabled>

Opsional. App Engine mencakup implementasi sesi menggunakan antarmuka sesi servlet. Implementasi ini menyimpan data sesi di Datastore untuk persistensi, dan juga menggunakan memcache agar cepat. Seperti kebanyakan penampung servlet lainnya, atribut sesi yang ditetapkan dengan `session.setAttribute()` selama permintaan akan dipertahankan di akhir permintaan.

Fitur ini dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan kode berikut ke appengine-web.xml:

Contoh:
<sessions-enabled>true</sessions-enabled>

Implementasi ini akan membuat entity Datastore jenis _ah_SESSION, dan entri memcache menggunakan kunci dengan awalan _ahs. Anda dapat menghapus entity ini menggunakan template Dataflow.

Catatan: Karena App Engine menyimpan data sesi di Datastore dan memcache, semua nilai yang disimpan dalam sesi harus menerapkan antarmuka java.io.Serializable.

Lihat elemen async-session-persistence untuk mengurangi latensi penyimpanan data sesi.

<ssl-enabled>

Opsional. Secara default, setiap pengguna dapat mengakses URL apa pun menggunakan HTTP atau HTTPS. Anda dapat mengonfigurasi aplikasi agar mewajibkan HTTPS untuk URL tertentu dalam deployment descriptor Lihat Deployment Descriptor: URL Aman.

Jika Anda ingin melarang penggunaan HTTPS untuk aplikasi, masukkan kode berikut dalam file appengine-web.xml:

<ssl-enabled>false</ssl-enabled>

Tidak ada cara untuk melarang HTTPS pada jalur URL tertentu dan tidak untuk yang lainnya di Java runtime environment.

<static-error-handlers>

Opsional. Saat terjadi error tertentu, App Engine akan menayangkan halaman error umum. Anda dapat mengonfigurasi aplikasi untuk menayangkan file statis kustom, bukan halaman error umum ini, selama data error kustom kurang dari 10 kilobyte. Anda dapat menyiapkan file statis berbeda yang akan ditayangkan untuk setiap kode error yang didukung dengan menentukan file dalam file appengine-web.xml aplikasi Anda. Untuk menayangkan halaman error kustom, tambahkan bagian <static-error-handlers> ke appengine-web.xml, seperti dalam contoh berikut:

<static-error-handlers>
  <handler file="default_error.html" />
  <handler file="over_quota.html" error-code="over_quota" />
</static-error-handlers>

Peringatan: Pastikan jalur ke file respons error tidak tumpang tindih dengan jalur pengendali file statis.

Setiap entri file menunjukkan file statis yang harus ditayangkan sebagai pengganti respons error umum. error-code menunjukkan kode error mana yang akan menyebabkan file terkait ditayangkan. Kode error yang didukung adalah sebagai berikut:

over_quota
Menunjukkan bahwa aplikasi telah melampaui kuota resource.
timeout
Ditayangkan jika batas waktu tercapai sebelum ada respons dari aplikasi.

error-code bersifat opsional; jika tidak ditentukan, file yang diberikan akan menjadi respons error default untuk aplikasi Anda.

Secara opsional, Anda dapat menentukan mime-type yang akan digunakan saat menampilkan error kustom. Lihat daftar lengkap jenis MIME.

<static-files>

Opsional. Elemen <static-files> menentukan pola yang cocok dengan jalur file untuk disertakan dan dikecualikan dari daftar file statis, dengan mengganti atau mengubah perilaku default. File statis ditayangkan dari server khusus dan cache yang terpisah dari server aplikasi dan berguna untuk menayangkan konten statis seperti gambar, stylesheet CSS, atau file JavaScript.

Elemen <static-files> dapat berisi elemen berikut:

<include>

Elemen <include> menggantikan perilaku default yang menyertakan semua file non-JSP. Elemen <include> dapat menentukan header HTTP yang akan digunakan saat merespons permintaan untuk resource yang ditentukan. Untuk informasi selengkapnya, lihat Menyertakan dan mengecualikan file.

Anda dapat mengganti masa berlaku cache statis default dengan menentukan atribut expiration pada elemen include. Nilainya adalah string angka dan satuan, yang dipisahkan dengan spasi, dan satuan dapat berupa d untuk hari, h untuk jam, m untuk menit, dan s untuk detik. Misalnya, "4d 5h" menetapkan masa berlaku cache ke 4 hari dan 5 jam setelah file pertama kali diminta. Untuk informasi lebih lanjut, lihat Masa berlaku cache.

<exclude>
File dan direktori yang cocok dengan pola <exclude> tidak akan diupload saat Anda men-deploy aplikasi ke App Engine. Namun, file dan direktori ini tetap dapat diakses oleh aplikasi Anda saat berjalan di Server Pengembangan lokal. Untuk informasi selengkapnya, lihat Menyertakan dan mengecualikan file.
Contoh
<static-files>
  <include path="/my_static-files" >
    <http-header name="Access-Control-Allow-Origin"
                 value="http://example.org" />
  </include>
</static-files>
<system-properties>

Opsional. File appengine-web.xml dapat menentukan properti sistem dan variabel lingkungan yang ditetapkan saat aplikasi berjalan.

<system-properties>
  <property name="myapp.maximum-message-length" value="140" />
  <property name="myapp.notify-every-n-signups" value="1000" />
  <property name="myapp.notify-url"
            value="http://www.example.com/signupnotify" />
</system-properties>

<env-variables>
  <env-var name="DEFAULT_ENCODING" value="UTF-8" />
</env-variables>

Opsional. Anda dapat mengonfigurasi konektor HTTP untuk meningkatkan penggunaan CPU dan memori.

  <system-properties>
    <property name="appengine.use.httpconnector" value="true"/>
  </system-properties>

Mulai Java 21, Anda dapat mengonfigurasi server web Java untuk menggunakan thread virtual. Contoh:

  <system-properties>
    <property name="appengine.use.virtualthreads" value="true"/>
  </system-properties>
Untuk informasi selengkapnya tentang dukungan thread, lihat Jetty 12 – Dukungan Thread Virtual.
<url-stream-handler>

Opsional. Nilai yang mungkin adalah native atau urlfetch.

Nilai defaultnya adalah native, yang berarti class jaringan Java standar menggunakan transport HTTP(S) Java standar. Untuk menggunakan setelan ini, Anda harus mengaktifkan penagihan untuk aplikasi, atau Anda akan mendapatkan pengecualian, yang kemudian didokumentasikan dalam Permintaan masalah.

Jika Anda menetapkan url-stream-handler ke urlfetch, URL.openConnection dan metode terkait akan menggunakan Pengambilan URL memindahkan http dan https.

<url-stream-handler>urlfetch</url-stream-handler>
<version>

Elemen <version> berisi ID versi untuk kode aplikasi versi terbaru. ID versi dapat berisi huruf kecil, angka, dan tanda hubung. ID versi tidak boleh diawali dengan awalan "ah-", dan nama "default" serta "latest" akan disimpan dan tidak dapat digunakan.

Nama versi harus dimulai dengan huruf untuk membedakannya dari instance numerik yang selalu ditentukan dengan angka. Hal ini adalah untuk menghindari ambiguitas dengan URL seperti 123.my-module.uc.r.appspot.com, yang dapat diartikan dalam dua cara: Jika versi "123" ada, targetnya adalah versi "123" dari modul yang dimaksud. Jika versi tersebut tidak ada, targetnya adalah nomor instance 123 dari versi default modul.

<warmup-requests-enabled>

Opsional. Default: true. Warmup request diaktifkan secara default untuk aplikasi Java.

Dengan warmup request diaktifkan, infrastruktur App Engine mengeluarkan permintaan `GET` ke /_ah/warmup, yang melakukan inisialisasi servlet <load-on-startup>, ServletContextListeners, dan servlet warmup khusus, yang memungkinkan Anda menginisialisasi kode aplikasi sesuai kebutuhan. Anda mungkin perlu menerapkan pengendali tersendiri untuk /_ah/warmup, bergantung pada metode mana yang Anda pilih.

Untuk menonaktifkan warmup request, tentukan false untuk elemen ini:

<warmup-requests-enabled>false</warmup-requests-enabled>
<vpc-access-connector>

Opsional. Mengonfigurasi aplikasi Anda untuk menggunakan konektor Akses VPC Serverless, yang memungkinkan aplikasi mengirim permintaan ke resource internal dalam jaringan VPC Anda. Tentukan nama konektor yang sepenuhnya memenuhi syarat di elemen <name>:

<vpc-access-connector>
  <name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector>

Untuk mengetahui informasi selengkapnya, lihat Menghubungkan ke resource internal dalam jaringan VPC.

Menskalakan elemen

Tabel berikut mencantumkan opsi cara memilih penentuan penskalaan aplikasi yang sesuai.

Untuk perbandingan fitur performa jenis penskalaan, lihat bagian Penskalaan instance dinamis.

Elemen Deskripsi
<automatic-scaling>

Opsional. Penskalaan otomatis diasumsikan secara default dengan kelas instance F1 default kecuali ditentukan lain.

Elemen automatic_scaling menetapkan level minimum dan maksimum untuk jumlah instance, latensi, dan koneksi serentak untuk sebuah modul.

Elemen ini dapat berisi elemen berikut:

<target-cpu-utilization>
Opsional. Tentukan nilai dari 0,5 hingga 0,95.

Parameter ini menentukan batas penggunaan CPU di mana instance baru akan baru akan mulai menangani traffic, memungkinkan Anda untuk menyeimbangkan antara performa dan biaya, dengan nilai yang lebih rendah meningkatkan performa dan meningkatkan biaya, dan nilai yang lebih tinggi akan menurunkan performa sekaligus juga mengurangi biaya. Misalnya, nilai 0,7 artinya instance baru akan dimulai setelah penggunaan CPU mencapai 70 persen.

<target-throughput-utilization>
Opsional. Tentukan nilai dari 0,5 hingga 0,95.

Digunakan dengan max-concurrent-requests untuk menentukan kapan instance baru dimulai karena permintaan yang serentak. Jika jumlah permintaan serentak mencapai nilai yang sama dengan max-concurrent-requests dikali target-throughput-utilization, scheduler akan memulai instance baru.

<max-instances>
Opsional. Jumlah instance maksimum yang akan dibuat oleh App Engine untuk versi aplikasi ini. Hal ini berguna untuk membatasi biaya modul. Tentukan nilai antara 0 dan 2147483647.
<min-instances>
Opsional. Jumlah minimum instance yang akan dibuat oleh App Engine untuk versi modul ini. Instance ini menyalurkan traffic saat permintaan tiba, dan terus menyalurkan traffic bahkan ketika instance tambahan dimulai sesuai kebutuhan untuk menangani traffic.

Tentukan nilai dari 0 hingga 1.000. Anda dapat menetapkan parameter ke nilai 0 untuk memungkinkan penskalaan ke 0 instance guna menurunkan biaya jika tidak ada permintaan yang ditayangkan. Perlu diperhatikan bahwa Anda akan dikenai biaya untuk jumlah instance yang ditentukan, terlepas dari apakah instance tersebut menerima traffic atau tidak.

<max-concurrent-requests>

Opsional. Jumlah permintaan serentak yang dapat diterima instance penskalaan otomatis sebelum scheduler memunculkan instance baru (Default: 10, Maksimum: 80).

Anda mungkin mengalami peningkatan latensi API jika setelan ini terlalu tinggi. Perhatikan bahwa scheduler mungkin memunculkan instance baru sebelum jumlah maksimum permintaan sebenarnya tercapai.

Catatan: Jika instance-class ditetapkan ke F2 atau yang lebih tinggi, Anda dapat mengoptimalkan instance dengan menyetel max-concurrent-requests ke nilai yang lebih tinggi dari 10, yang merupakan nilai default. Untuk menemukan nilai optimal, tingkatkan secara bertahap dan pantau kinerja aplikasi Anda.

<max-idle-instances>

Jumlah maksimum instance tidak ada aktivitas yang harus dipertahankan oleh App Engine untuk versi ini. Nilai defaultnya adalah "automatic". Perhatikan hal-hal berikut:

  • Batas maksimum yang tinggi mengurangi jumlah instance yang tanpa aktivitas secara lebih bertahap saat tingkat beban kembali normal setelah terjadi lonjakan. Hal ini membantu aplikasi Anda mempertahankan performa yang stabil melalui fluktuasi beban permintaan, tetapi juga meningkatkan jumlah instance yang tanpa aktivitas (dan akibatnya, peningkatan biaya pengoperasian) selama periode dengan beban berat tersebut.
  • Batas maksimum yang rendah membuat biaya tetap rendah, tetapi dapat menurunkan performa saat tingkat beban yang berubah secara tiba-tiba.

Catatan: Saat kembali ke tingkat normal setelah lonjakan beban, jumlah instance tanpa aktivitas untuk sementara dapat melebihi batas maksimum yang Anda tentukan. Namun, Anda tidak akan ditagih untuk jumlah instance yang melebihi jumlah maksimum yang Anda tentukan.

<max-pending-latency>

Durasi maksimum App Engine harus mengizinkan permintaan menunggu dalam antrean yang tertunda sebelum memulai instance tambahan untuk menangani permintaan sehingga latensi tertunda berkurang.

  • Jumlah maksimum yang rendah berarti App Engine akan memulai instance baru lebih cepat untuk permintaan yang tertunda, sehingga meningkatkan performa tetapi menaikkan biaya operasional.
  • Maksimum yang tinggi berarti pengguna mungkin menunggu lebih lama hingga permintaan mereka ditayangkan, jika ada permintaan yang tertunda dan tidak ada instance tanpa aktivitas untuk melayani permintaan tersebut, tetapi biaya untuk menjalankan aplikasi akan lebih murah.
<min-idle-instances>

Jumlah instance yang akan tetap berjalan dan siap melayani traffic. Setelan ini hanya berlaku untuk versi yang menerima sebagian besar traffic. Ingat hal berikut:

  • Nilai minimum yang rendah membantu menjaga biaya operasional Anda tetap rendah selama periode tidak ada aktivitas, tetapi berarti jumlah instance yang tersedia mungkin lebih sedikit untuk merespons lonjakan beban tiba-tiba.
  • Nilai minimum yang tinggi memungkinkan Anda mempersiapkan aplikasi untuk lonjakan beban permintaan yang cepat. App Engine menjaga jumlah minimum instance yang berjalan untuk melayani permintaan masuk. Anda akan dikenai biaya untuk instance, baik yang menangani permintaan atau tidak. Agar fitur ini berfungsi dengan baik, Anda harus memastikan bahwa warmup request diaktifkan dan aplikasi Anda menangani warmup request.

    Jika Anda menetapkan jumlah minimum instance yang tidak ada aktivitas, ini akan mengurangi pengaruh latensi yang tertunda terhadap performa aplikasi Anda. Karena App Engine menyimpan instance yang tidak ada aktivitas sebagai cadangan, maka tidak mungkin permintaan akan masuk ke antrean tertunda kecuali dalam lonjakan beban yang sangat tinggi. Anda perlu menguji aplikasi aplikasi dan volume traffic yang diharapkan untuk menentukan yang jumlah cadangan instance yang ideal.

<min-pending-latency>

Jumlah waktu minimum dalam detik saat App Engine harus mengizinkan permintaan untuk menunggu dalam queue yang tertunda sebelum memulai instance baru untuk menanganinya. Tentukan nilai dari 0,01 hingga 15.

  • Nilai minimum yang rendah berarti permintaan menghabiskan lebih sedikit waktu dalam antrean tertunda ketika semua instance yang ada aktif. Hal ini akan meningkatkan performa, tetapi meningkatkan biaya untuk menjalankan aplikasi Anda.
  • Nilai minimum yang tinggi berarti permintaan akan ditunda lebih lama jika semua instance yang ada aktif. Hal ini menurunkan biaya operasional tetapi meningkatkan waktu yang tunggu pengguna hingga permintaan mereka dilayani.
Contoh
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>simple-app</application>
  <module>default</module>
  <version>uno</version>
  <instance-class>F2</instance-class>
  <automatic-scaling>
    <target-cpu-utilization>0.65</target-cpu-utilization>
    <min-instances>5</min-instances>
    <max-instances>100</max-instances>
    <max-concurrent-requests>50</max-concurrent-requests>
  </automatic-scaling>
</appengine-web-app>
<basic-scaling>

Opsional. Elemen <basic-scaling> menetapkan jumlah instance untuk modul.

Elemen ini dapat berisi elemen berikut:

<idle-timeout>
Opsional. Instance akan dihentikan selama jangka waktu ini setelah menerima permintaan terakhirnya. Defaultnya adalah 5 menit.
<max-instances>
Harus ada. Jumlah maksimum instance yang akan dibuat oleh App Engine untuk versi modul ini. Hal ini berguna untuk membatasi biaya modul.
Contoh
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>simple-app</application>
  <module>default</module>
  <version>uno</version>
  <instance-class>B8</instance-class>
  <basic-scaling>
    <max-instances>11</max-instances>
    <idle-timeout>10m</idle-timeout>
  </basic-scaling>
</appengine-web-app>
<manual-scaling>

Opsional. Elemen <manual-scaling> memungkinkan penskalaan manual untuk modul dan menetapkan jumlah instance untuk modul.

Elemen ini dapat berisi elemen berikut:

<instances>
Jumlah instance yang akan ditetapkan ke modul di awal.
Contoh
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>simple-app</application>
  <module>default</module>
  <version>uno</version>
  <instance-class>B8</instance-class>
  <manual-scaling>
    <instances>5</instances>
  </manual-scaling>
</appengine-web-app>

Elemen pembuatan stage

Sebagian besar pekerjaan yang dilakukan selama deployment berlangsung secara lokal dalam langkah persiapan yang disebut staging, tempat file JAR disusun, JSP dikompilasi, dan seterusnya. Secara opsional, Anda dapat mengonfigurasi bagian tertentu dari perilaku staging menggunakan elemen staging dalam file konfigurasi aplikasi. Sebagian besar aplikasi akan berhasil di-deploy tanpa harus mengonfigurasi perilaku staging secara manual. Jika aplikasi Anda tidak di-deploy, Anda mungkin perlu mengonfigurasi staging menggunakan opsi yang ditunjukkan di bawah ini.

Elemen Deskripsi
<staging>

Opsional. Sebagian besar aplikasi tidak perlu mengubah perilaku default.

Elemen staging memungkinkan Anda menentukan konfigurasi staging tertentu jika diperlukan untuk deployment.

Elemen ini dapat berisi elemen berikut:

<enable-jar-splitting>

Opsional. Memisahkan file jar besar (> 10 Megabyte) menjadi fragmen yang lebih kecil. (Default: true).

<jar-splitting-excludes>

Menentukan daftar akhiran file yang dipisahkan koma. Jika enable-jar-splitting diaktifkan, semua file yang cocok dengan akhiran akan dikecualikan dari semua JAR.

<disable_jar_jsps>

Jangan meng-jar class yang dihasilkan dari JSP. (Default: false).

<enable-jar-classes>

Lakukan jar untuk konten WEB-INF/class. (Default: true).

<delete-jsps>

Hapus file sumber JSP setelah kompilasi. (Default: true).

<compile-encoding>

Masukkan encoding file sumber untuk kompilasi. (Default: utf-8).

Contoh:

        <staging>
          <delete-jsps>false</delete-jsps>
        </staging>
        

Opsi pembuatan stage default

Setelan default untuk opsi staging berbeda-beda, bergantung pada apakah Anda menggunakan alat berbasis Google Cloud SDK, seperti gcloud CLI, atau plugin Maven Gradle, Eclipse, atau IntelliJ berbasis Google Cloud SDK.

Elemen staging Setelan default berbasis App Engine SDK - Setelan default berbasis Google Cloud SDK
enable-jar-splitting false true
jar-splitting-excludes TA TA
disable-jar-jsps false false
enable-jar-classes false true. Hal ini dapat memengaruhi urutan pemuatan class. Jadi, jika aplikasi Anda bergantung pada urutan tertentu menggunakan default false sebelumnya, Anda dapat menyetelnya ke false.
delete-jsps false true
compile-encoding utf-8 utf-8

Sintaksis Sertakan dan kecualikan

Pola jalur ditentukan menggunakan nol atau beberapa elemen <include> dan <exclude>. Dalam sebuah pola, '*' mewakili nol atau beberapa karakter bebas dalam nama file atau direktori, dan ** mewakili nol atau beberapa direktori di satu jalur. File dan direktori yang cocok dengan pola <exclude> tidak akan diupload saat Anda men-deploy aplikasi ke App Engine. Namun, file dan direktori ini tetap dapat diakses oleh aplikasi Anda saat dijalankan di Server Pengembangan lokal.

Elemen <include> menggantikan perilaku default yang menyertakan semua file. Elemen <exclude> berlaku setelah semua pola <include> (serta default jika tidak ada <include> eksplisit yang disediakan).

Contoh berikut menunjukkan cara menetapkan semua file .png sebagai file statis (kecuali yang ada dalam direktori data/ dan semua subdirektorinya):

<static-files>
  <include path="/**.png" />
  <exclude path="/data/**.png" />
</static-files>

Anda juga dapat menetapkan header HTTP yang akan digunakan saat merespons permintaan ke resource statis ini.

<static-files>
  <include path="/my_static-files" >
    <http-header name="Access-Control-Allow-Origin"
                 value="http://example.org" />
  </include>
</static-files>

Jenis MIME untuk file statis

Secara default, file statis ditayangkan menggunakan jenis MIME yang dipilih berdasarkan ekstensi nama file. Anda dapat mengaitkan jenis MIME khusus dengan ekstensi nama file untuk file statis menggunakan elemen mime-mapping di web.xml.

Waktu tunggu URLFetch

Anda dapat menetapkan batas waktu untuk setiap permintaan URLFetch. Secara default, batas waktu pengambilan adalah 5 detik. Anda dapat mengubah default ini dengan menyertakan setelan berikut dalam file konfigurasi appengine-web.xml Anda. Tentukan waktu tunggu dalam detik:

<system-properties>
    <property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>