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.
Además del descriptor de implementación web.xml
, las aplicaciones de Java para App Engine usan un archivo de configuración, llamado appengine-web.xml
, a fin de especificar información sobre tu app y de identificar en el archivo WAR
cuáles son los archivos estáticos (como imágenes) y cuáles son los archivos de recursos que usa la aplicación.
Ejemplo
El siguiente ejemplo es un archivo mínimo que especifica el entorno de ejecución de Java 8 sin archivos estáticos ni archivos de recursos:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<threadsafe>true</threadsafe>
<runtime>java8</runtime>
</appengine-web-app>
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 |
---|---|
<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. <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" /> <!-- ... --> </appengine-web-app> 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”: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <async-session-persistence enabled="true" queue-name="myqueue"/> <!-- ... --> </appengine-web-app> 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.
A fin de habilitar el servicio en una app de Java 8, 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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <precompilation-enabled>false</precompilation-enabled> <!-- ... --> </appengine-web-app> |
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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <public-root>/static</public-root> <!-- ... --> </appengine-web-app> |
<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 el entorno de ejecución de Java 8, debes especificar esta entrada con el valor Ejemplo: <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <runtime>java8</runtime> <!-- ... --> </appengine-web-app> |
service |
Antes, los servicios se conocían como módulos. En la actualidad, definir un servicio como |
service-account |
Opcional. El elemento <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <service-account>[SERVICE_ACCOUNT_NAME]@[PROJECT_ID].iam.gserviceaccount.com</service-account> <!-- ... --> </appengine-web-app> |
<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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <sessions-enabled>true</sessions-enabled> <!-- ... --> </appengine-web-app>
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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <ssl-enabled>false</ssl-enabled> <!-- ... --> </appengine-web-app> 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> |
<threadsafe> |
Obligatorio.
Cuando el elemento <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <threadsafe>true</threadsafe> <!-- ... --> </appengine-web-app>
Si deseas usar solicitudes simultáneas, el código de la aplicación debe usar la sincronización de subproceso adecuada antes de que habilites Este elemento no es compatible con los entornos de ejecución de Java 11 o superiores. |
<url-stream-handler> |
Opcional. Los valores posibles son El valor predeterminado es Si configuras <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <url-stream-handler>urlfetch</url-stream-handler> <!-- ... --> </appengine-web-app> |
<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
App Engine usa este identificador de versión para determinar si debe crear una versión nueva de la app con el identificador determinado (o reemplazar la versión de la app con el identificador determinado si ya existe una). Puedes probar versiones nuevas de la app con una URL usando “-dot-” como separador de subdominio en la URL, como |
<warmup-requests-enabled> |
Opcional. Valor predeterminado: true (verdadero). Las solicitudes de preparación están habilitadas de forma predeterminada para las aplicaciones de Java 8.
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 <?xml version="1.0" encoding="utf-8"?> <appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <!-- ... --> <warmup-requests-enabled>false</warmup-requests-enabled> <!-- ... --> </appengine-web-app> |
<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 obtener más información, consulta Conéctate a una red de VPC.
<vpc-access-connector> <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name> <egress-setting>all-traffic</egress-setting> </vpc-access-connector> |
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> <threadsafe>true</threadsafe> <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> <threadsafe>true</threadsafe> <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> <threadsafe>true</threadsafe> <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 los siguientes:
Elemento de etapa de pruebas | Valor predeterminado |
---|---|
enable-jar-splitting |
true |
jar-splitting-excludes |
NA |
disable-jar-jsps |
false |
enable-jar-classes |
true : Esto puede afectar el orden de carga de la clase. Si tu app depende de un orden determinado, configúralo como false . |
delete-jsps |
true |
compile-encoding |
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>