ID de región
REGION_ID
es un código abreviado que Google asigna en función de la región que seleccionas 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. Incluir REGION_ID.r
en las URL de App Engine es opcional en el caso de las apps existentes, y pronto será obligatorio para todas las apps nuevas.
A fin de garantizar una transición sin problemas, estamos actualizando App Engine de forma paulatina para usar los ID de región. Si aún no actualizamos tu proyecto de Google Cloud, no verás un ID de región para la app. Dado que el ID es opcional en las apps existentes, no es necesario que actualices las URL ni realices otros cambios una vez que el ID de región esté disponible en las apps existentes.
Obtén más información acerca de los ID de región.
Puedes configurar tu app de App Engine en el archivo app.yaml
.
Este archivo especifica cómo las rutas de URL se corresponden con los controladores de solicitud y los archivos estáticos.
El archivo app.yaml
también contiene información sobre el código de la app, como el entorno de ejecución y el identificador de versión más reciente.
Cada servicio de la app tiene su propio archivo app.yaml
, que actúa como descriptor para su implementación. Primero debes crear el archivo app.yaml
para el servicio default
, antes de que puedas crear y, luego, implementar archivos app.yaml
a servicios adicionales dentro de la app.
Estructura del directorio
Para obtener más información sobre cómo estructurar servicios múltiples en tu aplicación, consulta Cómo estructurar servicios web en App Engine.Ejemplo
A continuación, se muestra un ejemplo de un archivo app.yaml
para una aplicación de Python 2:
runtime: python27 api_version: 1 threadsafe: true handlers: - url: / script: home.app - url: /index\.html script: home.app - url: /stylesheets static_dir: stylesheets - url: /(.*\.(gif|png|jpg))$ static_files: static/\1 upload: static/.*\.(gif|png|jpg)$ - url: /admin/.* script: admin.app login: admin - url: /.* script: not_found.app
Una directiva script:
puede contener una ruta de archivo que termine en .py
, lo que significa que la secuencia de comandos usa CGI o una ruta de módulo de Python, con nombres de paquetes separados por puntos. Esto significa que la secuencia de comandos usa WSGI.
Sintaxis
La sintaxis de app.yaml
usa el formato YAML.
El formato YAML admite el uso de comentarios. Se ignoran las líneas que comienzan con el signo numeral (#
):
# This is a comment.
Los patrones de ruta de archivo y URL usan la sintaxis de expresiones regulares extendidas de POSIX y excluyen los elementos y las clases de intercalación. Se admiten referencias inversas a las coincidencias agrupadas (p. ej.: \1
), al igual que estas extensiones de Perl: \w \W \s \S \d \D
.
Entorno de ejecución y elementos de la app
Elemento | Descripción |
---|---|
application |
Se recomienda quitar el elemento
A fin de obtener más información para usar estos comandos, consulta Implementa la app. El ID de aplicación es el ID del proyecto de Cloud Console que especificaste cuando creaste la aplicación en Google Cloud Console. |
api_version |
Obligatorio. La versión de la API en un entorno de ejecución determinado que usa la app. Este campo está obsoleto en los entornos de ejecución más recientes de App Engine.
Cuando Google anuncia la compatibilidad con una versión nueva de la API de un entorno de ejecución, la app implementada continuará usando la API para la cual se escribió. Cuando quieras actualizar tu app a una versión nueva de la API, tendrás que cambiar este valor y, luego, volver a implementar la aplicación en App Engine. Cuando especificas el valor
En este momento, App Engine tiene una versión del entorno de ejecución de |
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:
|
builtins |
Opcional.
El SDK de Python 2 incluye varios controladores integrados para las funciones de aplicación comunes. La directiva Este campo está obsoleto en el entorno de ejecución de Python 3. Los siguientes controladores integrados están disponibles para su uso:
builtins: - deferred: on - appstats: on
La directiva builtins: - name: on Es equivalente a lo siguiente: includes: - $PYTHON_LIB/google/appengine/ext/builtins/name/
Cuando usas
Por ejemplo, considera el siguiente handlers: - url: /.* script: main.app builtins: - appstats: on La lista resultante de controladores es la siguiente: [/_ah/stats, /.*]
Si includes: - included.yaml
Y el archivo handlers: - url: /.* script: main.app builtins: - appstats: on La lista resultante de controladores ahora es la siguiente: [/.*, /_ah/stats]
El orden de ubicación de la cláusula |
default_expiration |
Opcional. Establece un período de caché predeterminado global para todos los controladores de archivos estáticos de una aplicación. También puedes configurar la duración de la caché para controladores de archivos estáticos específicos. El valor es una string de números y unidades, separados por espacios, en la que las unidades pueden ser d para días, h para horas, m para minutos y s para segundos. Por ejemplo, con runtime: python27 api_version: 1 threadsafe: true default_expiration: "4d 5h" handlers: # ... Para obtener más información, consulta Vencimiento de la caché. |
env_variables
|
Opcional.
Puedes definir variables de entorno en el archivo
Las variables de entorno que tienen el prefijo os.environ :
env_variables: DJANGO_SETTINGS_MODULE: "myapp.settings" |
error_handlers |
Opcional. Se utiliza para configurar las páginas de error personalizadas que se muestran para los tipos de errores diferentes. Puede contener los siguientes elementos:
error_handlers: - file: default_error.html - error_code: over_quota file: over_quota.html |
handlers |
Obligatorio. Una lista de patrones de URL y descripciones acerca de cómo deben manejarse. App Engine puede manejar las URL mediante la ejecución del código de aplicación, o la entrega de archivos estáticos subidos con el código, como imágenes, CSS o JavaScript. |
includes
|
Opcional.
La directiva includes: - lib/user_admin.yaml App Engine resuelve la ruta incluida en el siguiente orden:
Si la directiva
Los patrones |
inbound_services |
Opcional.
Las aplicaciones deben habilitar esos servicios para poder recibir solicitudes entrantes. Puedes habilitar el servicio para una app de Python 2 si incluyes una sección Los siguientes servicios de entrada están disponibles:
inbound_services: - mail - warmup |
instance_class |
Opcional. La clase de instancia para este servicio. Los siguientes valores están disponibles según el escalamiento del servicio:
|
libraries |
Opcional.
El entorno de ejecución de Python 2.7 incluye algunas bibliotecas de terceros. Algunas de estas bibliotecas están disponibles de forma predeterminada; otras solo están disponibles si se las configura. Puedes especificar qué versión quieres usar si especificas los valores Este campo está obsoleto en el entorno de ejecución de Python 3. libraries: - name: PIL version: "1.1.7" - name: webob version: "latest"
Ten en cuenta que cuando especificas Si estás desarrollando una aplicación que aún no tiene usuarios: no necesitas realizar un seguimiento de las versiones nuevas. Pero si la aplicación se utiliza de manera activa, ten cuidado: tal vez te sorprenda saber que la aplicación comienza a utilizar una versión nueva de biblioteca que no es compatible con las versiones anteriores. Para obtener una lista de las bibliotecas de terceros incluidas, consulta Bibliotecas de terceros. Puedes usar bibliotecas de terceros adicionales exclusivas de Python; para ello, instálalas en un directorio local. Si utilizas el entorno flexible, consulta Cómo usar bibliotecas de Python en el entorno flexible. |
module |
Nota: Ahora, los módulos se denominan servicios.
Para administrar la app con la herramienta de
Para usar la herramienta module: service-name
Es obligatorio si se crea un servicio.
Es opcional para el servicio |
runtime |
Obligatorio El nombre del entorno de ejecución que usa la app. Para especificar Python 2.7, usa lo siguiente: runtime: python27 |
service |
Antes, los servicios se llamaban módulos.
Solo son compatibles con la herramienta de
Para usar la herramienta
Obligatorio si se crea un servicio.
Es opcional para el servicio service: service-name
Nota: El comando module: service-name |
skip_files |
Opcional.
Con el elemento
skip_files: - ^(.*/)?#.*#$ - ^(.*/)?.*~$ - ^(.*/)?.*\.py[co]$ - ^(.*/)?.*/RCS/.*$ - ^(.*/)?\..*$ Con el patrón predeterminado se excluyen los archivos de copia de seguridad Emacs con nombres de la forma
Para ampliar la lista anterior de expresiones regulares, copia y pega la lista en tu skip_files: - ^(.*/)?#.*#$ - ^(.*/)?.*~$ - ^(.*/)?.*\.py[co]$ - ^(.*/)?.*/RCS/.*$ - ^(.*/)?\..*$ - ^(.*/)?.*\.bak$
Para omitir un directorio completo, agrega el nombre del directorio a la lista. Por ejemplo, para omitir un directorio llamado skip_files: - logs/ |
threadsafe |
Obligatorio.
Configura la aplicación para usar solicitudes simultáneas. Si usas la biblioteca de subprocesos de Python, los datos locales de subprocesos, como los muestra Este campo está obsoleto en el entorno de ejecución de Python 3. threadsafe: [true | false]
Nota: La directiva |
version |
Se recomienda quitar el elemento
A fin de obtener más información para usar estos comandos, consulta Implementa la app. Un identificador para la versión del código de la aplicación que implementas en App Engine.
El ID de versión puede contener letras en minúscula, dígitos y guiones. No puede comenzar con el prefijo
Nota: Los nombres de las versiones deben comenzar con una letra para distinguirlos de las instancias numéricas que siempre se especifican mediante un número. Así se evita la ambigüedad con URL como
Cada versión de una aplicación conserva su propia copia de |
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. Especifica el nombre completamente calificado de un conector en el campo vpc_access_connector: name: "projects/[PROJECT_ID]/locations/[REGION]/connectors/[CONNECTOR_NAME]" Para obtener más información, consulta Conecta recursos internos a una red de VPC. |
Elemento handlers
El elemento handlers
es un elemento obligatorio para el archivo de configuración app.yaml
. El elemento proporciona una lista de patrones de URL y descripciones acerca de cómo deben controlar. App Engine puede controlar las URL mediante la ejecución del código de aplicación o la entrega de archivos estáticos subidos con el código, como imágenes, CSS o JavaScript.
Los patrones se evalúan en el orden en que aparecen en el archivo app.yaml
, de arriba abajo. Para controlar la solicitud, se utiliza la primera asignación cuyo patrón coincide con la URL.
En la siguiente tabla, se muestran los subelementos del elemento handlers
que controlan el comportamiento de las secuencias de comandos, los archivos estáticos, los directorios estáticos y otras opciones de configuración.
Elemento | Descripción |
---|---|
application_readable |
Opcional. Booleano. Mediante la configuración predeterminada, los archivos declarados en los controladores de los archivos estáticos se suben como datos estáticos y solo se entregan a los usuarios finales. Una aplicación no puede leerlos. Si el campo se establece en verdadero, los archivos también se suben como datos de código para que la aplicación pueda leerlos.
Ambas cargas se cobran en el código y las cuotas de recursos de almacenamiento de datos estáticos.
Este campo está obsoleto en los entornos de ejecución más recientes de App Engine. |
auth_fail_action |
Opcional.
Describe la acción realizada cuando se especifica el elemento
Si una aplicación necesita un comportamiento diferente, esta puede implementar el control de los accesos de los usuarios. Consulta la API de usuarios para obtener más información. En el ejemplo siguiente, se requiere un inicio de sesión para el directorio handlers: - url: /profile/.* script: user_profile.app login: required - url: /admin/.* script: admin.app login: admin - url: /.* script: welcome.app
Puedes configurar un controlador para que rechace el acceso a las URL protegidas cuando el usuario no accedió, en lugar de redireccionar al usuario a la página de acceso. Para ello, agrega handlers: - url: /secure_api/.* script: api_handler.app login: required auth_fail_action: unauthorized |
expiration
|
Opcional.
El tiempo durante el cual los proxies y los navegadores web deben almacenar en caché el archivo estático que entrega este controlador. El valor es una string de números y unidades, separados por espacios, en la que las unidades pueden ser d por días, h por horas, m por minutos y s por segundos. Por ejemplo, "4d 5h" establece el vencimiento de la caché en 4 días y 5 horas después de que se solicita el archivo por primera vez. Si se omite, se usa el default_expiration de la aplicación. Consulta Vencimiento de la caché para obtener más detalles.
|
http_headers |
Opcional. Puedes configurar los encabezados HTTP para las respuestas del archivo estático o los controladores de directorio. Si necesitas establecer encabezados HTTP en los controladores de handlers: - url: /images static_dir: static/images http_headers: X-Foo-Header: foo X-Bar-Header: bar value vary: Accept-Encoding # ... Compatibilidad con CORSUn uso importante de esta función es admitir el uso compartido de recursos multiorigen (CORS), como el acceso a archivos alojados por otra app de App Engine.
Por ejemplo, puedes tener una app de juegos A continuación, se muestra cómo tendrías que hacer para que el controlador de archivos estáticos muestre ese valor de encabezado de respuesta requerido: handlers: - url: /images static_dir: static/images http_headers: Access-Control-Allow-Origin: https://mygame.uc.r.appspot.com # ...
Nota: Si deseas permitir que todos accedan a tus recursos, puedes usar el comodín |
login |
Opcional. Determina si el controlador de URL requiere que el usuario haya accedido. Este campo no está disponible en los entornos de ejecución más recientes de App Engine. Este elemento tiene tres valores posibles:
Cuando un controlador de URL con una configuración
Nota: La restricción de inicio de sesión |
mime_type |
Opcional. Si se especifica, todos los archivos que entrega el controlador se entregarán mediante el uso del tipo MIME especificado. Si no se especifica, el tipo MIME para un archivo se derivará de la extensión del nombre del archivo. Si el mismo archivo se sube con varias extensiones, la extensión resultante puede depender del orden en que se subieron. Para obtener más información sobre los tipos de medios MIME posibles, consulta el sitio web Tipos de medios MIME de IANA |
redirect_http_response_code |
Opcional. Se usa
handlers: - url: /youraccount/.* script: accounts.app login: required secure: always redirect_http_response_code: 301
Cuando se redirecciona una solicitud de un usuario, el código de estado HTTP se establecerá en el valor del parámetro |
script |
Opcional. Especifica la ruta a la secuencia de comandos desde el directorio raíz de la aplicación: handlers: # The root URL (/) is handled by the WSGI application named # "app" in home.py. No other URLs match this pattern. - url: / script: home.app # The URL /index.html is also handled by the home.py script. - url: /index\.html script: home.app # A regular expression can map parts of the URL to the # path of the script. - url: /browse/(books|videos|tools) script: \1.catalog.app # All other URLs use the WSGI application named in "app" # in not_found.py. - url: /.* script: not_found.app
Una directiva
Nota: Al igual que ocurre con una sentencia En los entornos de ejecución más recientes de App Engine, cambió el comportamiento de este campo. |
secure |
Opcional. Cualquier controlador de URL puede usar la configuración secure , incluidos los controladores de secuencia de comandos y de archivos estáticos. El elemento secure puede tener los siguientes valores:
handlers: - url: /youraccount/.* script: accounts.app login: required secure: always
El servidor web de desarrollado no admite conexiones HTTPS. Ignora el parámetro
A fin de orientar una versión específica de la app mediante el dominio Para usar dominios personalizados con HTTPS, primero debes activar y configurar los certificados SSL para ese dominio. El ingreso a las Cuentas de Google y el cierre de sesión siempre se realizan mediante el uso de una conexión segura, no relacionada con la forma en que se configuran las URL de la aplicación. |
static_dir
|
Opcional. La ruta al directorio que contiene los archivos estáticos, desde el directorio raíz de la aplicación. Todo después del final del patrón
Cada archivo en el directorio estático se entrega mediante un tipo MIME que coincide con la extensión del nombre del archivo, a menos que el ajuste
Todos los archivos en este directorio se suben con la aplicación como archivos estáticos. App Engine almacena y entrega archivos estáticos separados de los archivos de la aplicación. Los archivos estáticos no están disponibles en la configuración predeterminada del sistema de archivos de la app. Para cambiar esto, establece la opción handlers: # All URLs beginning with /stylesheets are treated as paths to # static files in the stylesheets/ directory. - url: /stylesheets static_dir: stylesheets # ... |
static_files
|
Opcional. Un controlador de patrón de archivo estático asocia un patrón de URL con las rutas a los archivos estáticos subidos con la aplicación. La expresión regular del patrón de URL puede definir agrupaciones de expresiones regulares que se utilizarán en la construcción de la ruta del archivo. Puedes usar esto en lugar de handlers: # All URLs ending in .gif .png or .jpg are treated as paths to # static files in the static/ directory. The URL pattern is a # regular expression, with a grouping that is inserted into the # path to the file. - url: /(.*\.(gif|png|jpg))$ static_files: static/\1 upload: static/.*\.(gif|png|jpg)$ # ...
App Engine almacena y entrega archivos estáticos separados de los archivos de la aplicación. Los archivos estáticos no están disponibles en la configuración predeterminada del sistema de archivos de la aplicación. Para cambiar esto, establece la opción Los archivos estáticos no pueden ser los mismos que los archivos de código de la aplicación. Si una ruta de archivo estático coincide con una ruta a una secuencia de comandos utilizada en un controlador dinámico, la secuencia de comandos no estará disponible para el controlador dinámico. |
upload |
Opcional. Una expresión regular que coincide con las rutas de los archivos para todos los archivos a los que el controlador hará referencia. Esto es necesario porque el controlador no puede determinar qué archivos en el directorio de la aplicación coinciden con los patrones |
url |
Elemento obligatorio en El patrón de URL tiene algunas diferencias en el comportamiento cuando se usa con los siguientes elementos:
|
Elementos de escalamiento
Mediante los elementos de la siguiente tabla, se configura el escalamiento de tu aplicación. A fin de obtener más información para escalar las apps de App Engine, consulta Tipos de escalamiento.
Elemento | Descripción |
---|---|
automatic_scaling |
Opcional. Solo se aplica a las aplicaciones que usan una clase de instancia de F1 o superior. Especifica este elemento a fin de cambiar la configuración predeterminada del ajuste de escala automático, como establecer niveles mínimos y máximos para la cantidad de instancias, la latencia y las conexiones simultáneas de un servicio. Puede contener los siguientes elementos:
automatic_scaling: target_cpu_utilization: 0.65 min_instances: 5 max_instances: 100 min_pending_latency: 30ms max_pending_latency: automatic max_concurrent_requests: 50 |
basic_scaling |
Las aplicaciones que usan una clase de instancia B1 o superior deben especificar este elemento o Este elemento habilita el ajuste de escala básico de las clases de instancia B1 y superiores, y puede contener los siguientes elementos:
basic_scaling: max_instances: 11 idle_timeout: 10m |
manual_scaling |
Las aplicaciones que usan una clase de instancia B1 o superior deben especificar este elemento o Este elemento habilita el ajuste de escala manual de las clases de instancia B1 y superiores, y puede contener el siguiente elemento:
manual_scaling: instances: 5 |