Preguntas frecuentes sobre App Engine

¿Cómo accedo a mi cuenta de App Engine?

Para las cuentas de Google normales, incluidos los usuarios de Gmail, puedes acceder a tu cuenta de App Engine en Google Cloud Console.

¿Cómo creo un proyecto de Cloud para App Engine?

Usa Google Cloud Console para crear un proyecto Cloud.

¿Qué lenguajes admite Google App Engine?

Actualmente, el entorno estándar de App Engine admite Java, Python, PHP, Go y Node.js. Además, tus plantillas de sitio web pueden incluir JavaScript junto con tu HTML que, entre otras funciones, te permite escribir aplicaciones web habilitadas para AJAX.

¿Qué tipo de certificaciones recibió App Engine?

App Engine completó correctamente el proceso de auditoría para los estándares SAS 70 Tipo II, SSAE 16 Tipo II, ISO 27001 y, además, ISAE 3402 Tipo II.

¿Cuáles son mis derechos sobre los proyectos que creo?

Entre Google y los clientes de App Engine, el cliente posee todos los derechos de propiedad intelectual de sus datos almacenados y su código de aplicación y proyecto. Google posee todos los derechos de propiedad intelectual de los servicios y software de App Engine y Google Cloud Platform.

Para obtener más información, incluidas las definiciones de estos términos, consulta las Condiciones del Servicio de Google Cloud.

¿Puedo desarrollar una aplicación de App Engine aunque no tenga una cuenta?

Por supuesto. Incluso si aún no tienes una cuenta de App Engine, puedes descargar nuestro SDK y comenzar el desarrollo.

¿Cuántas aplicaciones puedo crear con App Engine?

La cantidad de proyectos de App Engine que puedes crear depende de una variedad de factores, incluidos los recursos que utilizas y tu historial de uso anterior de Google Cloud Platform. Los clientes pueden tener una cuota diferente en función de estos y otros factores.

Si intentas exceder el límite de tu proyecto, Cloud Console te solicita que completes un formulario de solicitud. Esto sucede si intentas crear un proyecto cuando ya alcanzaste tu cuota. El formulario requiere que especifiques la cantidad de proyectos adicionales que necesitas, junto con sus correspondientes cuentas de correo electrónico, cuentas de facturación y usos previstos.

Puedes encontrar más información sobre las solicitudes de aumento de cuota en la página de solicitudes de cuota de proyecto.

¿Qué tipo de contenido está permitido en Google App Engine?

Consulta nuestras Condiciones del Servicio si tienes preguntas sobre qué tipo de contenido está permitido en App Engine.

¿Por qué ocurre el error de URI para /favicon.ico?

Las aplicaciones que no incluyeron un archivo favicon.ico pueden incluir el URI /favicon.ico en la lista de URI con error. Favalon.ico es un archivo que solicita el navegador web de un usuario cuando intenta cargar la página. Favicon.ico es el ícono de tu sitio web, y generalmente se muestra en la barra de URL del navegador del usuario, junto a la dirección web de tu sitio.

Para tu aplicación, favicon.ico debería ser una imagen estática. Puedes subir un archivo favicon.ico con tu aplicación y, en tu archivo app.yaml, configurar tu aplicación para que entregue la imagen cuando se solicite la URL /favicon.ico. A continuación, se muestran entradas de ejemplo en appengine-web.xml (Java) y app.yaml (Python/PHP/Go). En el ejemplo de Python/PHP/Go, favicon.ico se encuentra en static/images. Para simplificar, el mismo archivo está en el directorio raíz (war) en el ejemplo de Java.

Python/PHP/Go

app.yaml
- url: /favicon\.ico
  static_files: static/images/favicon.ico
  upload: static/images/favicon\.ico

Java

appengine-web.xml
<static-files>
  <include path="/favicon.ico" />
</static-files>

¿Qué es GQL?

GQL es un lenguaje de consulta que se usa con Datastore. Las aplicaciones de Python pueden usarlo para buscar entidades. Emplea una sintaxis similar a SQL para recuperar entidades enteras del almacén de datos de tu aplicación y, además, incluye la capacidad de filtrar propiedades, especificar el orden de clasificación de los resultados y limitar el número de entidades mostradas. Aquí puedes encontrar la referencia completa del lenguaje GQL.

¿GQL está disponible para Java?

GQL no está incluido en el SDK de Java, sin embargo, se puede usar a través de la API de Cloud Datastore. Recomendamos que los desarrolladores de Java usen JDO o JPA en lugar de GQL porque son de tipo seguro. El uso de JDO o JPA permite al desarrollador descubrir errores en el IDE en lugar de en el entorno de ejecución, y ofrece menos espacio para ataques de inyección de código SQL.

¿Por qué mis consultas deben estar cubiertas por índices y cómo las incluyo?

Si ejecutas una consulta que filtra las propiedades de varias entidades o también ordena los resultados por varias propiedades, necesitarás un índice para esa consulta. Debes tener un índice para cada consulta de ese tipo que ejecutes con tu aplicación. El índice del almacén de datos para una consulta mantiene y actualiza una lista de claves ordenadas de la manera que especifica la consulta para permitir un acceso rápido a los datos en el almacén de datos. Puedes encontrar una explicación completa de los índices del almacén de datos en nuestra documentación (Java | Python | Go).

Cuando desarrollas tu aplicación con el SDK de Cloud, cada consulta que ejecutas automáticamente se indexa en el momento en que es necesario. Si pruebas exhaustivamente tu aplicación antes de subirla a tu sitio web, todos los índices que tu aplicación necesitará se incluirán en los archivos index.yaml de tu aplicación. Puedes agregar índices manualmente si encuentras una consulta que no fue cubierta por tus pruebas de desarrollo. Si deseas obtener más información sobre cómo escribir índices para tu aplicación, consulta la documentación del índice.

¿Por qué mis índices se marcaron como error?

Pueden ser índices con alto crecimiento (Python | Java | Go), o pueden haber ocurrido otros problemas similares durante la escritura de entidades particulares en tu almacén de datos. Puedes vaciarlos y, a continuación, intentar compilarlos nuevamente con la ayuda de las instrucciones de Consultas (Python | Java | Go) y de Índices (Python | Java | Go).

¿Por qué mis índices permanecen en los estados de compilación o borrado por largos períodos de tiempo?

Incluso si no tienes muchas entidades de los tipos correspondientes, el tiempo que toma compilar o borrar los índices puede variar ampliamente en función de la cantidad total de datos en el almacén de datos, los índices que se están compilando en la actualidad para otras aplicaciones y la carga del almacén de datos debido a las solicitudes de usuario, entre otros factores. En algunos casos, los trabajos de índice pueden tardar horas o incluso días en completarse.

Aun así, a veces podemos ayudar con índices que parecen estar atascados. Si crees que esto le ha sucedido a tus índices, puedes publicar una pregunta en el grupo google-appengine.

¿Cómo puedo autenticar a los usuarios de mi aplicación?

El servicio de usuarios (Java | Python | Go) te permite autenticar a los usuarios que tienen una Cuenta de Google o una cuenta en su propio dominio de G Suite. Debes elegir una de estas formas de autenticación para tu aplicación.

Si tu aplicación usa Cuentas de Google, cuando solicita el acceso de un usuario, el usuario es dirigido a una página de acceso de Google para ingresar un nombre de usuario y contraseña, o a fin de crear una cuenta nueva. Una vez que accedió correctamente, el usuario vuelve a tu sitio web y la información del usuario está disponible para tu aplicación a través de la propiedad del usuario.

¿Hay alguna biblioteca de terceros que no sea compatible con App Engine?

Python

Un pequeño porcentaje de módulos nativos C de Python y subconjuntos de módulos nativos C de Python no están disponibles con App Engine. Los módulos inhabilitados se dividen en las siguientes categorías:

  • Las bibliotecas que mantienen bases de datos en el disco no están habilitadas en Python para App Engine.
  • El sistema no te permite invocar subprocesos y, como resultado, algunos métodos de SO del módulo están inhabilitados.
  • Los subprocesos no están disponibles.
  • Por motivos de seguridad, la mayoría de los módulos basados en C están inhabilitados.
  • Otras características limitadas son las que se indican a continuación:
    • El cálculo de referencia está inhabilitado.
    • cPickle tiene un alias para pickle.
    • Las llamadas al sistema están inhabilitadas.

Ten en cuenta que los paquetes de terceros que usan cualquiera de las características anteriores no funcionarán con App Engine (paquetes como PostgreSQL, etcétera).

Go

La mayoría de los paquetes de Go puros funcionan en App Engine. Es posible que un paquete no funcione debido a uno de estos motivos:

  • El paquete importa syscall o unsafe.
  • El paquete usa cgo o assembly.
  • El paquete requiere funciones en paquetes que están bloqueadas, como escribir en el disco o acceso directo a la red.

¿Por qué mi aplicación se inhabilitó?

Una aplicación puede inhabilitarse si no cumple con nuestros Términos y Condiciones. Además, si se descubre que una aplicación utiliza una cantidad excesiva de recursos del sistema debido a un error o a otro problema que conduce a un uso ineficiente de los recursos, podemos inhabilitar la aplicación para que el desarrollador pueda solucionar los problemas de desarrollo mediante nuestro SDK de desarrollo antes de volver a habilitar la aplicación en App Engine.

¿Por qué mi aplicación supera la cuota?

App Engine establece límites de cuota en la cantidad de cada recurso del sistema que una aplicación puede consumir en un día. Todas las aplicaciones tienen una configuración de cuota predeterminada, o "cuotas libres", que deberían permitir aproximadamente 5 millones de páginas vistas al mes para una aplicación eficiente. Puedes leer más sobre las cuotas del sistema en la documentación de cuota.

A medida que tu aplicación crece, puede necesitar una asignación de recursos mayor que la que proporciona la configuración de cuota predeterminada. Para comprar recursos de procesamiento adicionales, habilita la facturación de tu aplicación. La facturación permite a los desarrolladores aumentar los límites de todos los recursos del sistema y pagar límites aún más altos en el uso de CPU, ancho de banda, almacenamiento y correo electrónico.

¿Cómo informo una aplicación que infringe los Términos y Condiciones?

Para informar una aplicación que infringe los Términos y Condiciones de App Engine, comunícate con nosotros. Determinaremos si la aplicación está en infracción y, si es necesario, contactaremos al desarrollador de la aplicación en relación con la infracción.

¿Debo usar el SDK para entregar solicitudes externas?

El comando dev_appserver está diseñado para las pruebas locales y no permite las conexiones externas de forma predeterminada. Puedes anular esto mediante la marca --host <hostname> cuando lo ejecutes, pero no se recomienda hacerlo porque el SDK no está endurecido por seguridad y puede contener vulnerabilidades.

¿Cómo entrego contenido comprimido?

App Engine hace todo lo posible para entregar contenido en formato gzip a los navegadores que lo admiten. El aprovechamiento de este esquema es automático y no requiere modificaciones en las aplicaciones.

Usamos una combinación de encabezados de solicitud (Accept-Encoding y User-Agent) y encabezados de respuesta (Content-Type) para determinar si el usuario final puede o no aprovechar el contenido en formato gzip. Este enfoque evita algunos errores conocidos con contenido en formato gzip en navegadores populares. Para forzar la entrega del contenido en formato gzip, los clientes pueden proporcionar gzip como el valor de los encabezados de solicitud Accept-Encoding y User-Agent. El contenido nunca se comprimirá en formato gzip si no hay un encabezado Accept-Encoding presente.

Esto se explica con más detalle en la documentación del entorno de ejecución (Python | Java | PHP | Go).

¿App Engine admite SSL (HTTPS)?

App Engine te permite entregar tráfico SSL (HTTPS) a través de tu dominio appspot.com. Simplemente agrega el parámetro secure a tu controlador app.yaml para las URL a través de las cuales deseas admitir el tráfico seguro. Si deseas obtener información detallada acerca de cómo configurar tu aplicación para el tráfico seguro, consulta los documentos sobre la configuración de la aplicación (Java | Python | PHP | Go).

También puedes entregar tráfico SSL (HTTPS) mediante un dominio personalizado. Además, puedes usar dominios simples si empleas un dominio personalizado con SSL.

¿Puedo usar encabezados de Seguridad de transporte estricta en mi proyecto?

En App Engine, es posible usar Seguridad de transporte estricta. Para agregar encabezados HTTP Strict-Transport-Security (HSTS) a tu aplicación, debes implementar los encabezados en el código de la app, no en el archivo de configuración de la app (app.yaml o appengine-web.xml) para ver sus detalles.

¿Puedo usar SSL (HTTPS) en App Engine con mi dominio personalizado?

Puedes entregar SSL a través de tu dominio personalizado.

¿Las herramientas como remote_api usan SSL (HTTPS)?

Las herramientas del SDK que usan acceso (remote_api, appengine_rpc) emplean SSL cuando comunican tu dirección de correo electrónico y contraseña.

Los SDK de Python y Go tienen la capacidad de validar el certificado SSL a través de la conexión remota. Para ello, debes tener el módulo de Python ssl instalado en tu sistema. Si estás usando Python 2.5, puedes instalar el módulo desde http://pypi.python.org/pypi/ssl/. Si se produce un error al validar el certificado SSL, las herramientas generarán un InvalidCertificateException que explique el problema.

El SDK de Java también habilita SSL de forma predeterminada. Si se encuentra un error al validar el certificado SSL, se mostrará un javax.net.ssl.SSLHandshakeException.

Me gustaría asignar mi aplicación a un dominio simple (como http://example.com).

Un "dominio simple" permite a los usuarios acceder a tu aplicación directamente en el nombre de dominio (http://example.com), sin necesidad de un subdominio como http://www.example.com o http://myapp.example.com. Puedes configurar tu aplicación de App Engine con un dominio simple en la consola del proyecto de Google Cloud. Consulta sobre el uso de dominios personalizados.

Los dominios simples también son compatibles si usas un dominio personalizado con SSL.

Direcciones IP para servicios de App Engine

Los servicios salientes, como las API de URL Fetch, Sockets y correo electrónico, usan un gran conjunto de direcciones IP. Los rangos de direcciones IP en este grupo están sujetos a cambios de rutina. De hecho, puede parecer que dos llamadas a la API secuenciales desde la misma aplicación se originan en dos direcciones IP diferentes.

A fin de encontrar los rangos actuales de direcciones IP que App Engine usa para el tráfico saliente, haz lo siguiente:

  1. En una shell de comandos, ingresa el siguiente comando:
    nslookup -q=TXT _cloud-netblocks.googleusercontent.com 8.8.8.8

    La respuesta contiene todos los _cloud-netblocks actuales para App Engine. Por ejemplo:

    Non-authoritative answer:
    _cloud-netblocks.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks1.googleusercontent.com include:_cloud-netblocks2.googleusercontent.com include:_cloud-netblocks3.googleusercontent.com include:_cloud-netblocks4.googleusercontent.com include:_cloud-netblocks5.googleusercontent.com ?all"

    Estos resultados no son estáticos. Cuando ingresas el comando, es posible que veas más o menos bloques de red que el ejemplo anterior.

  2. Para cada netblock que aparece en la respuesta, ingresa la siguiente consulta:
    nslookup -q=TXT netblock-name 8.8.8.8

    Por ejemplo, si la consulta anterior mostró cinco bloqueos de red, deberías realizar las siguientes cinco consultas:

    nslookup -q=TXT _cloud-netblocks1.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks2.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks3.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks4.googleusercontent.com 8.8.8.8
    nslookup -q=TXT _cloud-netblocks5.googleusercontent.com 8.8.8.8

Cada consulta de un bloque de red específico muestra un rango de IP que puedes usar para el tráfico saliente de App Engine. Por ejemplo, la consulta de _cloud-netblocks1 anterior podría mostrar lo siguiente:

Non-authoritative answer:
_cloud-netblocks1.googleusercontent.com	text = "v=spf1 include:_cloud-netblocks6.googleusercontent.com include:_cloud-netblocks7.googleusercontent.com ip6:2600:1900::/35 ip4:8.34.208.0/20 ip4:8.35.192.0/21 ip4:8.35.200.0/23 ip4:23.236.48.0/20 ip4:23.251.128.0/19 ip4:34.64.0.0/11 ip4:34.96.0.0/14 ?all"

En este ejemplo, vemos que ambos rangos de IP, 8.34.208.0/20 y 8.35.192.0/21, se pueden usar para el tráfico de App Engine. Otras consultas de bloqueos de red adicionales pueden mostrar rangos de IP adicionales.

Ten en cuenta que el uso del filtrado de direcciones IP estáticas no se considera un medio de protección seguro y efectivo. Por ejemplo, un atacante podría configurar una aplicación de App Engine maliciosa que podría compartir el mismo rango de direcciones IP que tu aplicación. En cambio, te sugerimos que adoptes un enfoque de defensa en profundidad con OAuth y Certs.

¿Puedo acceder a mi instancia de App Engine en una dirección IP privada?

App Engine en sí no proporciona una forma de asignar direcciones IP estáticas a una aplicación. Sin embargo, puedes usar Cloud Load Balancing y NEG sin servidores a fin de reservar una dirección IP estática para tu balanceador de cargas, que luego dirige el tráfico a tu app. Si deseas obtener más información sobre los precios, consulta los precios de direcciones IP externas.

¿Cómo defino trabajos cron para mi aplicación?

Consulta la documentación específica del lenguaje para obtener información sobre la definición de trabajos cron para tu aplicación (Java | Python | Go | PHP).

¿Qué son las listas de tareas en cola?

Las listas de tareas en cola proporcionan un mecanismo para agregar dinámicamente solicitudes nuevas que se llevarán a cabo en un momento posterior. Si una aplicación necesita ejecutar algún trabajo en segundo plano, puede usar la API de la lista de tareas en cola para organizar ese trabajo en unidades pequeñas y discretas llamadas Tareas. Las tareas se insertan en una o más Colas. App Engine detecta automáticamente las tareas nuevas y las ejecuta cuando los recursos del sistema lo permiten. Para obtener más detalles, consulta la documentación de la API de la lista de tareas en cola (Java | Python | Go | PHP).

¿Puedo usar los Grupos de Google para otorgar acceso a mi proyecto de App Engine?

Si agregas un Grupo de Google a tu proyecto de App Engine, los miembros del grupo tendrán acceso a los recursos de ese proyecto, por ejemplo, Almacén de datos, Listas de tareas en cola, Memcache, etcétera.

¿Cómo evito que los usuarios o las subredes accedan a mi aplicación?

App Engine proporciona un servicio de protección de DoS que te permite incluir en la lista negra direcciones IP o subredes. Para obtener más detalles, consulta la documentación del servicio de protección de DoS (Java | Python | Go | PHP).

¿Cómo obtengo más información sobre interrupciones y problemas de accesibilidad de mi aplicación?

El Panel de estado de Google Cloud proporciona información de estado sobre los servicios que forman parte de Google Cloud Platform.

En China, la accesibilidad de App Engine puede ser intermitente. Consulta el Informe de transparencia de Google para obtener información sobre los problemas de accesibilidad de otros productos de Google en China.