En esta página, se describe cómo ejecutar trabajos de Cloud Run según un programa con crontab.
Roles obligatorios
Para obtener los permisos que necesitas para las operaciones descritas en esta página, pídele a tu administrador que te otorgue uno de los siguientes roles de IAM en tu trabajo de Cloud Run:
- Para ejecutar trabajos con Google Cloud CLI: Invocador de Cloud Run (
roles/run.invoker) en el trabajo de Cloud Run - Para ejecutar trabajos con la Cloud de Confiance consola, anular configuraciones de trabajos o cancelar ejecuciones de trabajos: Desarrollador de Cloud Run (
roles/run.developer) en el trabajo de Cloud Run
Para obtener una lista de los roles y los permisos de IAM asociados con Cloud Run, consulta los roles de IAM de Cloud Run y los permisos de IAM de Cloud Run. Si tu trabajo de Cloud Run interactúa con Cloud de Confiance las APIs, como las bibliotecas cliente de Cloud, consulta la guía de configuración de identidades del servicio. Para obtener más información sobre cómo otorgar roles, consulta permisos de implementación y administra el acceso.
Otorga acceso a tu proyecto a la cuenta de servicio
Si no creaste una cuenta de servicio para tu trabajo de Cloud Run, crea una. Por ejemplo:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Reemplaza 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 trabajos, pídele a tu
administrador que le otorgue el
rol de ejecutor de trabajos
(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
Reemplaza PROJECT_ID por el nombre del ID de tu proyecto.
Antes de comenzar
Crea un trabajo de Cloud Run si aún no lo creaste.
Configura un trabajo de Cloud Run para que se ejecute según un programa
Para ejecutar un trabajo de Cloud Run según un programa, haz lo siguiente:
Crea un directorio nuevo llamado
cloud-run-jobs-schedy usa el comando de cambio de directorio en él: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 el siguiente código de Python en él: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 agrega un programa 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 un trabajo llamado
test-jobtodos los días a las 2 a.m. Cualquier error que inicie la ejecución del trabajo se mostrará en los registros del servicio.Para crear varios programas para varios trabajos, actualiza el archivo
croncon los trabajos que deseas ejecutar, junto con su programa asociado. 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 ...
Implementa el servicio del programador de trabajos:
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
Reemplaza lo siguiente:
- JOB-NAME: el nombre del trabajo de Cloud Run.
- PROJECT_ID: ID del proyecto
- REGION: la región del trabajo de Cloud Run, por
ejemplo,
europe-west1.
¿Qué sigue?
Después de usar esta función, puedes hacer lo siguiente: