periodicity job google engine deploy bigquery app google-app-engine google-cloud-platform app.yaml

google-app-engine - job - gcloud deploy cron



trabajo de cron en el motor de la aplicaciĆ³n de google no funciona (1)

He tomado el sitio web básico de tutorial de python 3 en el matraz de este tutorial de Google Cloud y puedo configurarlo y el sitio web funciona bien.

Además, también quería ejecutar un script python que se ejecuta todos los días para recopilar algunos datos, pero el trabajo cron simplemente no funciona. También agregué el inicio de sesión: admin para restringir a cualquiera a usar directamente esa URL

cron.yaml

cron: - description: test dispatch vs target url: /cronapp schedule: every 5 hours

app.yaml

runtime: python env: flex entrypoint: gunicorn -b :$PORT main:app runtime_config: python_version: 3 handlers: - url: /cronapp script: cronapp.py login: admin

Llamo esto porque http://myproject.appspot.com/cronapp tampoco funciona y devuelve un 404. ¿Qué estoy haciendo mal? cualquier ayuda es apreciada


Su archivo app.yaml está mezclando el elemento Handlers de entorno estándar en una configuración de entorno flexible , por lo que probablemente se ignore. Probablemente pueda ver las solicitudes de cron en los registros de la aplicación en la consola de desarrollador (aunque con errores).

/cronapp agregar un controlador para /cronapp dentro del código de su aplicación , no en app.yaml . No estoy del todo seguro de cómo hacerlo (todavía estoy usando el entorno estándar), depende de su aplicación y / o su marco. Eche un vistazo a la revisión del código Hola Mundo para un ejemplo de matraz.

Actualizar:

Puede que no sea del todo correcto, basé mi respuesta en la documentación, pero me di cuenta de algunas inconsistencias (le envié un comentario de documentación a Google).

El entorno flexible Asegurar URL para cron (que aparece principalmente copiado del entorno estándar equivalente ) menciona un par de soluciones:

  • uno de hecho basado en la opción login: admin to handler :

Puede restringir una URL agregando login: admin a la sección de configuración del controlador en app.yaml . Para obtener más información, consulte Cómo asegurar URLs

Pero el handler no se menciona en la Configuración de su aplicación con app.yaml y las URL de seguridad apuntan a una etiqueta inexistente. Entonces no estoy seguro de si esto está funcionando o no.

  • el segundo se basa en el encabezado X-Appengine-Cron (lo mismo que en el entorno estándar):

Las solicitudes del Servicio Cron también contendrán un encabezado HTTP:

X-Appengine-Cron: true

El encabezado X-Appengine-Cron está configurado internamente por Google App Engine. Si su controlador de solicitudes encuentra este encabezado, puede confiar en que la solicitud es una solicitud de cron. Si el encabezado está presente en una solicitud de usuario externa a su aplicación, se elimina, a excepción de las solicitudes de los administradores conectados de la aplicación, que pueden establecer el encabezado para fines de prueba.

Pero en los encabezados eliminados se menciona que:

Además, algunos encabezados seleccionados que coinciden con el siguiente patrón se eliminan de la solicitud:

  • X-Appengine-*

No está claro si esto se extiende a X-Appengine-Cron o no. Vale la pena intentarlo. Este es mi control en el código del controlador cron (estándar env, basado en webapp2):

if self.request.headers.get(''X-AppEngine-Cron'') is None: self.abort(403) # HTTPForbidden