ID de región
El REGION_ID
es un código abreviado que Google asigna en función de la región que selecciones al crear tu aplicación. El código no corresponde a un país o provincia, aunque algunos IDs de región pueden parecerse a los códigos de país y provincia que se usan habitualmente. En las aplicaciones creadas después de febrero del 2020, REGION_ID.r
se incluye en las URLs de App Engine. En las aplicaciones creadas antes de esa fecha, el ID de región es opcional en la URL.
Solo debes usar el archivo appengine-web.xml
para configurar tu aplicación si vas a migrar una aplicación del tiempo de ejecución de Java 8 de App Engine a la versión de Java más reciente admitida y quieres usar los servicios empaquetados antiguos.
Si usas un appengine-web.xml
en tu proyecto, el app.yaml
se genera automáticamente al implementar el proyecto.
Las aplicaciones Java de App Engine usan un archivo de configuración llamado appengine-web.xml
para especificar información sobre tu aplicación e identificar qué archivos del archivo WAR
de la aplicación son estáticos (como imágenes) y cuáles son archivos de recursos que usa la aplicación.
Sintaxis
Una aplicación Java de App Engine debe tener un archivo llamado appengine-web.xml
en su archivo WAR, en el directorio WEB-INF/
. Se trata de un archivo XML cuyo elemento raíz es <appengine-web-app>
.
Puedes encontrar la definición de tipo de documento y las especificaciones del esquema de appengine-web.xml
en el directorio docs/
del SDK.
Elemento | Descripción |
---|---|
<application> |
No es necesario si implementas tu aplicación con herramientas basadas en el SDK de Google Cloud, como el comando |
|
Opcional. Si quieres usar los servicios agrupados antiguos de App Engine para los tiempos de ejecución de segunda generación, asigna el valor |
|
Opcional y solo para los tiempos de ejecución de segunda generación. Anula el punto de entrada predeterminado, que es la línea de comandos del proceso que inicia la aplicación Java. De forma predeterminada, el punto de entrada generado para una clase de instancia F4 (los ajustes de memoria se calculan a partir de la clase de instancia) es equivalente a la siguiente configuración: <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>
Puedes modificar la configuración para añadir marcas de proceso de JVM adicionales o definir tu propio proceso de arranque.
Ten en cuenta que la aplicación se implementa en el directorio |
<async-session-persistence> |
Opcional. Puedes reducir la latencia de las solicitudes configurando tu aplicación para que escriba de forma asíncrona los datos de sesión HTTP en el almacén de datos: <async-session-persistence enabled="true" /> Si la persistencia de sesión asíncrona está activada, App Engine enviará una tarea de Task Queue para escribir los datos de sesión en el almacén de datos antes de escribir los datos en la memoria caché. De forma predeterminada, la tarea se enviará a la cola `default`. Si quieres usar otra cola, añade el atributo `queue-name`: <async-session-persistence enabled="true" queue-name="myqueue"/> Los datos de sesión siempre se escriben de forma síncrona en memcache. Si una solicitud intenta leer los datos de la sesión cuando memcache no está disponible (o si los datos de la sesión se han purgado), se producirá un error y se recurrirá a Datastore, que puede que aún no tenga los datos de la sesión más recientes. Esto significa que la persistencia de sesiones asíncrona puede provocar que tu aplicación vea datos de sesión obsoletos. Sin embargo, en la mayoría de las aplicaciones, la latencia es mucho menor que el riesgo. |
<auto-id-policy> |
Opcional. Si
configura los identificadores de entidad automáticamente, puede cambiar el método
que se utiliza configurando la política de ID automático. Estas son las opciones válidas:
|
<automatic-scaling> |
Opcional. Para obtener una explicación completa, consulta la sección Escalado automático. |
<basic-scaling> |
Opcional. Para obtener una explicación completa, consulta la sección sobre el escalado básico. |
<env-variables> |
Opcional.
El archivo <env-variables> <env-var name="DEFAULT_ENCODING" value="UTF-8" /> </env-variables> Para evitar conflictos con tu entorno local, el servidor de desarrollo no define variables de entorno basadas en este archivo y requiere que el entorno local ya tenga estas variables definidas con valores coincidentes. export DEFAULT_ENCODING="UTF-8" dev_appserver war Cuando se despliega en App Engine, el entorno se crea con estas variables ya definidas. |
<inbound-services> |
Opcional.
Para que una aplicación pueda recibir correos, debe configurarse para habilitar el servicio.
Para habilitar el servicio en una aplicación Java, incluye una sección Está disponible el siguiente servicio entrante:
|
<instance-class> |
Opcional. Tamaño de la clase de instancia de este módulo. Las siguientes clases de instancia están disponibles al especificar diferentes opciones de escalado:
|
<manual-scaling> |
Opcional. Para obtener una explicación completa, consulta la sección Escalado manual. |
<precompilation-enabled> |
Opcional. App Engine usa un proceso de "precompilación" con el bytecode de Java de una aplicación para mejorar el rendimiento de la aplicación en el entorno de ejecución de Java. El código precompilado funciona de forma idéntica al bytecode original.
Si, por algún motivo, prefieres que tu aplicación no use la precompilación,
puedes desactivarla añadiendo lo siguiente a tu archivo
<precompilation-enabled>false</precompilation-enabled> |
<module> |
Nota: Los módulos ahora se llaman Servicios y los servicios se siguen declarando en archivos Obligatorio si se crea un servicio. Opcional para el servicio predeterminado. Cada servicio y cada versión deben tener un nombre. Un nombre puede contener números, letras y guiones. No puede tener más de 63 caracteres, empezar o terminar con un guion ni contener la cadena `-dot`. Elige un nombre único para cada servicio y cada versión. No reutilices nombres entre servicios y versiones. Consulta también servicio. |
<public-root> |
Opcional.
El valor predeterminado
Por ejemplo, la siguiente asignación asignaría la ruta de la URL <public-root>/static</public-root> |
<resource-files> |
Opcional. El código de la aplicación puede acceder a los archivos que se indican en el elemento
El elemento
Los archivos de recursos de App Engine se leen con |
<runtime> |
Para usar la versión de Java más reciente compatible, debe especificar esta entrada con el valor
<runtime>java21</runtime> |
<service> |
Antes, los servicios se conocían como módulos. Actualmente, solo se pueden definir servicios como:
|
<service-account> |
Opcional. El elemento <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> |
<sessions-enabled> |
Opcional. App Engine incluye una implementación de sesiones que usa la interfaz de sesión de servlet. La implementación almacena los datos de sesión en Datastore para la persistencia y también usa memcache para mejorar la velocidad. Al igual que en la mayoría de los demás contenedores de servlets, los atributos de sesión que se definen con `session.setAttribute()` durante la solicitud se conservan al final de la solicitud.
Esta función está desactivada de forma predeterminada. Para activarlo, añade lo siguiente a <sessions-enabled>true</sessions-enabled>
La implementación crea entidades de Datastore del tipo
Nota: Como App Engine almacena los datos de sesión en Datastore y memcache, todos los valores almacenados en la sesión deben implementar la interfaz
Consulta el elemento
|
<ssl-enabled> |
Opcional. De forma predeterminada, los usuarios pueden acceder a cualquier URL mediante HTTP o HTTPS. Puede configurar una aplicación para que requiera HTTPS en determinadas URLs en el descriptor de implementación. Consulta Descriptor de implementación: URLs seguras.
Si quieres inhabilitar el uso de HTTPS en la aplicación, incluye lo siguiente en el archivo <ssl-enabled>false</ssl-enabled> No hay forma de inhabilitar HTTPS para algunas rutas de URL y no para otras en el entorno de tiempo de ejecución de Java. |
<static-error-handlers> |
Opcional.
Cuando se producen determinados errores, App Engine muestra una página de error genérica. Puedes configurar tu aplicación para que sirva un archivo estático personalizado en lugar de estas páginas de error genéricas, siempre que los datos de error personalizados no superen los 10 kilobytes. Puedes configurar diferentes archivos estáticos para que se publiquen
para cada código de error admitido especificando los archivos en el archivo
<static-error-handlers> <handler file="default_error.html" /> <handler file="over_quota.html" error-code="over_quota" /> </static-error-handlers> Advertencia: Asegúrate de que la ruta al archivo de respuesta de error no se superponga con las rutas del controlador de archivos estáticos.
Cada entrada
El
También puedes especificar un |
<static-files> |
Opcional.
El elemento
El elemento
<static-files> <include path="/my_static-files" > <http-header name="Access-Control-Allow-Origin" value="http://example.org" /> </include> </static-files> |
<system-properties> |
Opcional. El archivo <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> Opcional. Puedes configurar un conector HTTP para mejorar el uso de la CPU y la memoria. Si tu aplicación interactúa con operaciones de Datastore o Task Queues, configura la monitorización para supervisar el rendimiento y los efectos en el comportamiento después de habilitar esta función. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> Opcional. Puedes configurar el tiempo de ejecución subyacente para que funcione en EE8 o EE10 con la siguiente propiedad del sistema. Para obtener más información sobre la compatibilidad con EE, consulta Actualizar a Java 21. <system-properties> <property name="appengine.use.EE10" value="true"/> <!-- or EE8 --> </system-properties> A partir de Java 21, puedes configurar tu servidor web Java para que use hilos virtuales. Por ejemplo: <system-properties> <property name="appengine.use.virtualthreads" value="true"/> </system-properties> |
<url-stream-handler> |
Opcional. Los valores posibles son El valor predeterminado es Si asignas el valor <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
El elemento
Los nombres de las versiones deben empezar por una letra para distinguirlos de las instancias numéricas, que siempre se especifican con un número. De esta forma, se evita la ambigüedad con URLs como |
<warmup-requests-enabled> |
Opcional. Valor predeterminado: true. Las solicitudes de preparación están habilitadas de forma predeterminada en las aplicaciones Java.
Si las solicitudes de calentamiento están habilitadas, la infraestructura de App Engine envía solicitudes `GET` a
Para inhabilitar las solicitudes de preparación, especifica <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
Opcional.
Configura tu aplicación para que use un conector de acceso a VPC sin servidor, lo que permite que la aplicación envíe solicitudes a recursos internos de tu red de VPC. Especifica el nombre completo de un conector en el elemento <vpc-access-connector>
<name>projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]</name>
</vpc-access-connector> Para obtener más información, consulta Conectarse a recursos internos de una red de VPC. |
Escalar elementos
En la siguiente tabla se enumeran las opciones para definir cómo debe escalarse tu aplicación.
Para ver una comparación de las funciones de rendimiento de los tipos de escalado, consulta Escalar instancias dinámicas.
Elemento | Descripción |
---|---|
<automatic-scaling> |
Opcional. El escalado automático se da por supuesto de forma predeterminada con una clase de instancia predeterminada de
El elemento Este elemento puede contener los siguientes elementos:
<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> |
Opcional.
El elemento Este elemento puede contener los siguientes elementos:
<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> |
Opcional.
El elemento Este elemento puede contener los siguientes elementos:
<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> |
Elementos de puesta en escena
Gran parte del trabajo que se realiza durante una implementación se lleva a cabo de forma local en un paso de preparación llamado puesta en escena, donde se ensamblan los archivos JAR, se compilan los JSPs, etc. También puedes configurar ciertas partes del comportamiento de la fase de pruebas mediante elementos de la fase de pruebas en el archivo de configuración de la aplicación. La mayoría de las aplicaciones se desplegarán correctamente sin tener que configurar manualmente el comportamiento de la fase de pruebas. Si tu aplicación no se implementa, puede que tengas que configurar la fase de pruebas con las opciones que se muestran a continuación.
Elemento | Descripción |
---|---|
<staging> |
Opcional. La mayoría de las aplicaciones no necesitan cambiar el comportamiento predeterminado. El elemento de staging te permite especificar una configuración de staging concreta si es necesario para la implementación. Este elemento puede contener los siguientes elementos:
Por ejemplo: <staging> <delete-jsps>false</delete-jsps> </staging> |
Valores predeterminados de la opción de staging
Los valores predeterminados de las opciones de staging varían en función de si usas herramientas basadas en el SDK de Google Cloud, como la CLI de gcloud, o los complementos Maven, Gradle, Eclipse o IntelliJ basados en el SDK de Google Cloud.
Elemento de staging | Valores predeterminados basados en el SDK de App Engine: | Valores predeterminados basados en el SDK de Google Cloud |
---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
N/A | N/A |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true . Esto puede afectar al orden de carga de las clases, por lo que, si tu aplicación depende de un orden determinado con el valor predeterminado false , puedes definirlo como false . |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
Sintaxis de inclusión y exclusión
Los patrones de ruta se especifican mediante cero o más elementos <include>
y <exclude>
. En un patrón, '*'
representa cero o más caracteres de cualquier tipo en un nombre de archivo o directorio, y **
representa cero o más directorios en una ruta. Los archivos y directorios que coincidan con los patrones de <exclude>
no se subirán cuando despliegues tu aplicación en App Engine. Sin embargo, tu aplicación podrá seguir accediendo a estos archivos y directorios cuando se ejecute en el servidor de desarrollo local.
Un elemento <include>
anula el comportamiento predeterminado de incluir todos los archivos. Un elemento <exclude>
se aplica después de todos los patrones <include>
(así como el predeterminado si no se proporciona ningún <include>
explícito).
En el siguiente ejemplo se muestra cómo designar todos los archivos .png
como archivos estáticos (excepto los que se encuentran en el directorio data/
y en todos sus subdirectorios):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
También puedes definir los encabezados HTTP que se usarán al responder a las solicitudes de estos recursos estáticos.
<static-files>
<include path="/my_static-files" >
<http-header name="Access-Control-Allow-Origin"
value="http://example.org" />
</include>
</static-files>
Tipos MIME de archivos estáticos
De forma predeterminada, los archivos estáticos se sirven con un tipo MIME seleccionado en función de la extensión del nombre de archivo. Puedes asociar tipos de MIME personalizados con extensiones de nombre de archivo para archivos estáticos mediante elementos mime-mapping
en web.xml
.
Tiempo de espera de URLFetch
Puedes definir una fecha límite para cada solicitud URLFetch. De forma predeterminada, el límite de tiempo de una extracción es de cinco segundos.
Para cambiar este valor predeterminado, incluye el siguiente ajuste en tu archivo de configuración appengine-web.xml
. Especifica el tiempo de espera en segundos:
<system-properties>
<property name="appengine.api.urlfetch.defaultDeadline" value="10"/>
</system-properties>