ID de región
REGION_ID
es un código abreviado que Google asigna en función de la región que eliges cuando creas la app. El código no corresponde a un país ni a una provincia, aunque algunos ID de región puedan parecer similares a los códigos de país y provincia que se suelen usar. En el caso de las apps creadas después de febrero de 2020, REGION_ID.r
se incluye en las URL de App Engine. En el caso de las apps existentes creadas antes de esta fecha, el ID de región es opcional en la URL.
Obtén más información acerca de los ID de región.
Debes usar el archivo appengine-web.xml
para configurar tu app solo si migras una app existente desde el entorno de ejecución de App Engine Java 8 a la versión más reciente de Java compatible y deseas usar el heredado servicios en paquetes.
Si usas un appengine-web.xml
en tu proyecto, app.yaml
se genera de forma automática en la implementación.
Las aplicaciones de Java en App Engine usan un archivo de configuración, llamado appengine-web.xml
, para especificar la información sobre tu aplicación y, también, identificar qué archivos en el archivo WAR
de la aplicación son archivos estáticos (como imágenes) y cuáles son archivos de recursos que usa la aplicación.
Sintaxis
Una app de Java para App Engine debe tener un archivo llamado appengine-web.xml
en su WAR, en el directorio WEB-INF/
. Este es un archivo XML cuyo elemento raíz es <appengine-web-app>
.
Puedes encontrar las especificaciones del esquema y la definición del tipo de documento para el appengine-web.xml
en el directorio docs/
del SDK.
Elemento | Descripción |
---|---|
<application> |
No es necesario si implementas tu app mediante las herramientas basadas en el SDK de Google Cloud, como el comando |
|
Opcional. Si quieres usar los servicios agrupados en paquetes heredados de App Engine para entornos de ejecución de segunda generación, configura este campo como |
|
Opcional y solo para entornos 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 de Java. De forma predeterminada, el punto de entrada generado para una clase de instancia F4 (la configuración de la memoria se calcula 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 agregar marcas de procesos JVM adicionales o definir tu propio proceso para iniciar.
Ten en cuenta que la aplicación se implementa en el directorio |
<async-session-persistence> |
Opcional. Es posible reducir la latencia de la solicitud mediante la configuración de tu aplicación para escribir de forma asíncrona los datos de sesión HTTP en el almacén de datos. <async-session-persistence enabled="true" /> Con el elemento async session persistence activado, App Engine enviará una tarea de lista de tareas en cola para escribir los datos de la sesión en el almacén de datos antes de escribirlos en Memcache. De forma predeterminada, la tarea se enviará a la lista “predeterminada”. Si deseas usar una lista diferente, agrega el atributo “queue-name”: <async-session-persistence enabled="true" queue-name="myqueue"/> Los datos de la sesión siempre se escriben de manera síncrona en Memcache. Si una solicitud intenta leer los datos de una sesión cuando Memcache no está disponible (o se limpiaron los datos de la sesión), se conmutará por error a Datastore, que todavía no tendrá la versión más reciente de los datos de sesión. Esto significa que la persistencia de la sesión asíncrona puede generar que tu aplicación vea datos de sesión inactivos. Sin embargo, para la mayoría de las aplicaciones, las ventajas de la latencia superan el riesgo. |
<auto-id-policy> |
Opcional. Si configuras identificadores de entidad de manera automática, puedes cambiar el método empleado; para ello, configura la política de ID automático. Las siguientes son opciones válidas:
|
<automatic-scaling> |
Opcional. Para obtener una explicación completa, consulta la sección ajuste de escala automático. |
<basic-scaling> |
Opcional. Para obtener una explicación completa, consulta la sección ajuste de escala 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 establece variables de entorno basadas en este archivo y requiere que el entorno local ya tenga estas variables configuradas con valores coincidentes. export DEFAULT_ENCODING="UTF-8" dev_appserver war Cuando se implementa en App Engine, el entorno se crea con estas variables ya configuradas. |
<inbound-services> |
Opcional.
Antes de que una aplicación pueda recibir correos electrónicos, esta debe estar configurada para habilitar el servicio.
Para habilitar el servicio en una app de Java, debes incluir la sección El siguiente servicio de entrada está disponible:
|
<instance-class> |
Opcional. El tamaño de la clase de instancia para este módulo. Las siguientes clases de instancia están disponibles cuando se especifican diferentes opciones de escalamiento:
|
<manual-scaling> |
Opcional. Para obtener una explicación completa, consulta la sección ajuste de escala manual. |
<precompilation-enabled> |
Opcional. App Engine usa un proceso de “precompilación” con el código de bytes (bytecode) de Java de una aplicación para mejorar el rendimiento de la aplicación en Java Runtime Environment. El código precompilado funciona de la misma manera que el código de bytes original.
Si, por algún motivo, prefieres que tu app no use la precompilación, agrega el siguiente código al archivo <precompilation-enabled>false</precompilation-enabled> |
<module> |
Nota: Los módulos ahora se denominan Servicios y los servicios aún se declaran en archivos Es obligatorio si se crea un servicio. Es opcional para el servicio predeterminado. Cada servicio y versión deben tener un nombre. Un nombre puede contener números, letras y guiones. No puede tener más de 63 caracteres, ni empezar ni terminar con un guion, ni contener la string “-dot”. Elige un nombre único para cada servicio y cada versión. No vuelvas a usar nombres entre servicios y versiones. También consulta servicio. |
<public-root> |
Opcional.
El valor predeterminado de
Por ejemplo, el siguiente código asignaría la ruta de URL <public-root>/static</public-root> |
<resource-files> |
Opcional. El código de la aplicación puede acceder a los archivos enumerados en el elemento
Los archivos de recursos de App Engine se leen mediante |
<runtime> |
Para usar la versión más reciente de Java compatible, debes especificar esta entrada con el valor <runtime>java21</runtime> |
<service> |
Antes, los servicios se conocían como módulos. En la actualidad, definir un servicio 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, mediante el uso de la interfaz de sesiones de servlet. La implementación almacena datos de sesión en Datastore para obtener persistencia y usa Memcache para obtener velocidad. Como con la mayoría de los contenedores servlet, los atributos de la sesión que se establecen con “session.setAttribute()” durante la solicitud se mantienen al final de ella.
Esta función se encuentra desactivada de forma predeterminada. Para activarla, agrega el siguiente código a <sessions-enabled>true</sessions-enabled>
La implementación crea entidades de Datastore del tipo
Nota: Debido a que App Engine almacena 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, cualquier usuario puede acceder a cualquier URL mediante HTTP o HTTPS. Puedes configurar una app para que requiera HTTPS para determinadas URL en el descriptor de implementación. Consulta Descriptor de implementación: URL seguras.
Si deseas inhabilitar el uso de HTTPS para la aplicación, agrega el siguiente código en el archivo <ssl-enabled>false</ssl-enabled> No existe una forma de inhabilitar HTTPS solo para algunas rutas de URL en el entorno de ejecución de Java. |
<static-error-handlers> |
Opcional.
Cuando se producen determinados errores, App Engine entrega una página de error genérica. Puedes configurar tu app para que entregue un archivo estático personalizado, en lugar de estas páginas de error genéricas, siempre y cuando los datos de error personalizados sean menores que 10 kilobytes. Puedes especificar diferentes archivos estáticos 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
De manera opcional, puedes especificar un |
<static-files> |
Opcional.
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. <system-properties> <property name="appengine.use.httpconnector" value="true"/> </system-properties> A partir de Java 21, puedes configurar tu servidor web de Java para usar subprocesos 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 configuras <url-stream-handler>urlfetch</url-stream-handler> |
<version> |
El elemento
Los nombres de las versiones deben empezar con una letra para distinguirlos de las instancias numéricas que siempre se especifican con un número. Esto evita la ambigüedad con las URL como |
<warmup-requests-enabled> |
Opcional. Valor predeterminado: true. Las solicitudes de preparación están habilitadas de forma predeterminada para las aplicaciones de Java.
Cuando las solicitudes de preparación están habilitadas, la infraestructura de App Engine envía solicitudes “GET” a
Con el fin de inhabilitar las solicitudes de preparación, especifica <warmup-requests-enabled>false</warmup-requests-enabled> |
<vpc-access-connector> |
Opcional.
Configura la aplicación para que use un conector de Acceso a VPC sin servidores, lo que le permite enviar solicitudes a recursos internos de tu red de VPC. Para ello, especifica el nombre completamente calificado 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 Conecta recursos internos a una red de VPC. |
Elementos de escalamiento
En la siguiente tabla, se enumeran las opciones para definir cómo debe escalar tu aplicación.
Para obtener información sobre las funciones de rendimiento de los tipos de ajuste de escala, consulta Cómo escalar instancias dinámicas.
Elemento | Descripción |
---|---|
<automatic-scaling> |
Opcional. La clase de instancia predeterminada del ajuste de escala automático se trata como
Con el 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 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 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 la etapa de pruebas
La mayoría del trabajo realizado durante la implementación ocurre de manera local en la etapa de preparación llamada etapa de pruebas, en la que se ensamblan los archivos JAR, se compilan los JSP y así sucesivamente. Puedes configurar de manera opcional algunas partes del comportamiento de la etapa de pruebas mediante el uso de elementos de prueba en el archivo de configuración de la aplicación. La mayoría de las aplicaciones se implementarán de manera correcta sin configurar de forma manual el comportamiento de la etapa de pruebas. Si la aplicación no se implementa, es posible que debas configurar la etapa de pruebas con las opciones que se detallan a continuación.
Elemento | Descripción |
---|---|
<staging> |
Opcional. La mayoría de las aplicaciones no deben cambiar el comportamiento predeterminado. El elemento de etapa de pruebas te permite especificar una configuración de prueba específica en caso necesario para la implementación. Puede contener los siguientes elementos:
Por ejemplo: <staging> <delete-jsps>false</delete-jsps> </staging> |
Valor predeterminado para la opción de etapa de pruebas
Los valores predeterminados para las opciones de etapa de pruebas son diferentes según si usas herramientas basadas en el SDK de Cloud, como la herramienta de gcloud o los complementos Maven, Gradle, Eclipse o IntelliJ basados en la CLI de Cloud.
Elemento de etapa de pruebas | Valor predeterminado basado en el SDK de App Engine | Valor predeterminado basado en el SDK de Google Cloud |
---|---|---|
enable-jar-splitting |
false |
true |
jar-splitting-excludes |
NA | NA |
disable-jar-jsps |
false |
false |
enable-jar-classes |
false |
true . Esto puede afectar el orden de carga de la clase, por lo que si tu app depende de un orden determinado que usa el valor predeterminado false , puedes configurarlo como false . |
delete-jsps |
false |
true |
compile-encoding |
utf-8 |
utf-8 |
Incluye y excluye sintaxis
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 en un archivo o un nombre de directorio y **
representa cero o más directorios en una ruta. Los archivos y los directorios que coinciden con los patrones <exclude>
no se subirán cuando implementes tu app en App Engine. Sin embargo, tu aplicación aún tendrá acceso a estos archivos y directorios cuando se ejecuta en el servidor de desarrollo local.
Un elemento <include>
anula el comportamiento predeterminado de incluir todos los archivos. Un elemento <exclude>
aplica todos los patrones después de <include>
(además del valor predeterminado si no se proporciona un <include>
explícito).
En el siguiente ejemplo, se muestra cómo designar todos los archivos .png
como archivos estáticos (excepto aquellos en el directorio data/
y en todos sus subdirectorios):
<static-files>
<include path="/**.png" />
<exclude path="/data/**.png" />
</static-files>
También puedes establecer encabezados HTTP para responder a 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 de MIME para archivos estáticos
De forma predeterminada, los archivos estáticos se entregan mediante un tipo de MIME elegido basado en la extensión del nombre de archivo. Puedes asociar tipos de MIME personalizados con extensiones de nombres de archivos para archivos estáticos mediante elementos mime-mapping
en web.xml
.
Tiempo de espera de URLFetch
Puedes establecer un plazo para cada solicitud de URLFetch. De forma predeterminada, este plazo es de 5 segundos.
Puedes cambiar este valor predeterminado si incluyes la siguiente configuración 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>