En esta página se describe cómo ejecutar trabajos de Cloud Run de forma programada mediante crontab.
Roles obligatorios
Para obtener los permisos que necesitas para las operaciones descritas en esta página, pide a tu administrador que te asigne uno de los siguientes roles de gestión de identidades y accesos en tu trabajo de Cloud Run:
- Para ejecutar tareas con Google Cloud CLI, usa Invocador de Cloud Run (
roles/run.invoker) en la tarea de Cloud Run. - Para ejecutar tareas con la Cloud de Confiance consola, anular configuraciones de tareas o cancelar ejecuciones de tareas, debes tener el rol Desarrollador de Cloud Run (
roles/run.developer) en la tarea de Cloud Run.
Para ver una lista de los roles y permisos de gestión de identidades y accesos asociados a Cloud Run, consulta los artículos Roles de gestión de identidades y accesos de Cloud Run y Permisos de gestión de identidades y accesos de Cloud Run. Si tu trabajo de Cloud Run interactúa con APIs deCloud de Confiance , como las bibliotecas de cliente de Cloud, consulta la guía de configuración de la identidad de servicio. Para obtener más información sobre cómo conceder roles, consulta los artículos sobre permisos de implementación y gestión del acceso.
Concede a la cuenta de servicio acceso a tu proyecto
Si no has creado una cuenta de servicio para tu trabajo de Cloud Run, crea una. Por ejemplo:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Sustituye SERVICE_ACCOUNT_NAME por el nombre de tu cuenta de servicio, por ejemplo, job-scheduler.
Para obtener los permisos que necesita tu cuenta de servicio para ejecutar tareas, pide a tu administrador que le conceda el rol Ejecutor de tareas (roles/run.jobsExecutor) en tu proyecto. Por ejemplo:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role roles/run.jobsExecutor
Sustituye PROJECT_ID por el nombre de tu ID de proyecto.
Antes de empezar
Crea un trabajo de Cloud Run si aún no lo has hecho.
Configurar una tarea de Cloud Run para que se ejecute según una programación
Para ejecutar una tarea de Cloud Run según una programación, haz lo siguiente:
Crea un directorio llamado
cloud-run-jobs-schedy cambia al directorio:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
Crea un archivo
Dockerfiley pega las siguientes líneas en él:FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:536.0.1 RUN apt-get update -y && \ apt-get install -y python3-dev python3-pip python3-venv && \ apt-get install -y cron ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ ENV VIRTUAL_ENV=/opt/venv RUN python3 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" RUN pip install --no-cache-dir -r requirements.txt # Set up the cron schedule. RUN crontab /app/cron CMD /app/entrypoint.sh
Crea un archivo
entrypoint.shy pega las siguientes líneas en él:gcloud config set project $PROJECT gcloud config set run/region $REGION cron gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Crea un archivo
main.pyy pega en él el siguiente código de Python:import os from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World!" if __name__ == "__main__": app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Crea un archivo
requirements.txty pega las siguientes dependencias en él:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
Crea un archivo
cronen tu directorio y añade una programación cron para ejecutar el trabajo. Por ejemplo:0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
Este comando ejecuta una tarea llamada
test-jobtodos los días a las 2:00. Los errores que se produzcan al iniciar la ejecución del trabajo se mostrarán en los registros del servicio.Para crear varias programaciones para varios trabajos, actualiza el archivo
croncon los trabajos que quieras ejecutar, junto con la programación asociada. Por ejemplo:${cron_schedule} gcloud run jobs execute --async ${job_1} > /proc/1/fd/1 2>&1 ${cron_schedule} gcloud run jobs execute --async ${job_2} > /proc/1/fd/1 2>&1 ...
Despliega el servicio de programador de tareas:
gcloud run deploy JOB_NAME \ --source . \ --region REGION \ --set-env-vars PROJECT=PROJECT_ID,REGION=REGION \ --service-account SERVICE_ACCOUNT \ --no-allow-unauthenticated \ --min-instances=1 \ --no-cpu-throttling
Haz los cambios siguientes:
- JOB-NAME: el nombre de tu tarea de Cloud Run.
- PROJECT_ID: tu ID de proyecto.
- REGION: la región de tu trabajo de Cloud Run. Por ejemplo,
europe-west1.
Siguientes pasos
Después de usar esta función, puedes hacer lo siguiente: