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.
Además del web.xml
descriptor de despliegue, las aplicaciones Java de App Engine usan un archivo de configuración llamado appengine-web.xml
para especificar información sobre la 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.
Ejemplo
En el siguiente ejemplo se muestra un archivo mínimo que especifica el tiempo de ejecución de Java 8 sin archivos estáticos ni 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 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 |
---|---|
<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: <?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> 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`: <?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 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 8, 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
<?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 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 <?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 que se indican en el elemento
El elemento
Los archivos de recursos de App Engine se leen con |
runtime |
Para usar el tiempo 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. Actualmente, solo se pueden definir servicios 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 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 <?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: 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 <?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 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> |
<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 quieres usar solicitudes simultáneas, el código de tu aplicación debe usar la sincronización de subprocesos adecuada antes de habilitar Este elemento no se admite en los entornos de ejecución de Java 11 y versiones posteriores. |
<url-stream-handler> |
Opcional. Los valores posibles son El valor predeterminado es Si asignas el valor <?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 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
App Engine usa este identificador de versión para determinar si debe crear una nueva versión de la aplicación con el identificador proporcionado (o sustituir la versión de la aplicación con el identificador proporcionado si ya existe). Puedes probar nuevas versiones de tu aplicación con una URL
usando "-dot-" como separador de subdominios en la URL, como
|
<warmup-requests-enabled> |
Opcional. Valor predeterminado: true. Las solicitudes de preparación están habilitadas de forma predeterminada en las aplicaciones Java 8.
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 <?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 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. Para obtener más información, consulta Conectarse a una red VPC.
<vpc-access-connector> <name>projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME</name> <egress-setting>all-traffic</egress-setting> </vpc-access-connector> |
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> <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 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> <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 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> <threadsafe>true</threadsafe> <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 puesta en escena son los siguientes:
Elemento de staging | Valor predeterminado |
---|---|
enable-jar-splitting |
true |
jar-splitting-excludes |
N/A |
disable-jar-jsps |
false |
enable-jar-classes |
true . Esto puede afectar al orden de carga de las clases, por lo que, si tu aplicación depende de un orden concreto, asigna el valor false . |
delete-jsps |
true |
compile-encoding |
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>