Esta página descreve como executar tarefas do Cloud Run de forma programada através do crontab.
Funções necessárias
Para receber as autorizações necessárias para as operações descritas nesta página, peça ao seu administrador que lhe conceda uma das seguintes funções da IAM no seu trabalho do Cloud Run:
- Para executar tarefas através da CLI do Google Cloud: Cloud Run Invoker (
roles/run.invoker) na tarefa do Cloud Run. - Para executar tarefas através da Cloud de Confiance consola, substituir configurações de tarefas ou cancelar execuções de tarefas: programador do Cloud Run (
roles/run.developer) na tarefa do Cloud Run.
Para ver uma lista de funções e autorizações de IAM associadas ao Cloud Run, consulte os artigos Funções de IAM do Cloud Run e Autorizações de IAM do Cloud Run. Se a sua tarefa do Cloud Run interagir com Cloud de Confiance APIs, como as bibliotecas de cliente da Google Cloud, consulte o guia de configuração da identidade do serviço. Para mais informações sobre a concessão de funções, consulte as autorizações de implementação e a gestão do acesso.
Conceda acesso da conta de serviço ao seu projeto
Se não tiver criado uma conta de serviço para a tarefa do Cloud Run, crie uma conta de serviço. Por exemplo:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Substitua SERVICE_ACCOUNT_NAME pelo nome da sua conta de serviço, por exemplo, job-scheduler.
Para receber as autorizações de que a sua conta de serviço precisa para executar tarefas, peça ao seu administrador para conceder à sua conta de serviço a função de executor de tarefas (roles/run.jobsExecutor) no seu projeto. Por exemplo:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:job-scheduler@PROJECT_ID.s3ns.iam.gserviceaccount.com \ --role roles/run.jobsExecutor
Substitua PROJECT_ID pelo nome do ID do seu projeto.
Antes de começar
Crie uma tarefa do Cloud Run se ainda não tiver criado nenhuma.
Configure uma tarefa do Cloud Run para ser executada de acordo com uma programação
Para executar uma tarefa do Cloud Run com base numa programação:
Crie um novo diretório com o nome
cloud-run-jobs-schede altere o diretório para:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
Crie um ficheiro
Dockerfilee cole as seguintes linhas no mesmo: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
Crie um ficheiro
entrypoint.she cole as seguintes linhas no mesmo:gcloud config set project $PROJECT gcloud config set run/region $REGION cron gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
Crie um ficheiro
main.pye cole o seguinte código Python no mesmo: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)))
Crie um ficheiro
requirements.txte cole as seguintes dependências no mesmo:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
Crie um ficheiro
cronno seu diretório e adicione uma programação cron para executar a tarefa. Por exemplo:0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
Este comando executa uma tarefa denominada
test-jobtodos os dias às 02:00. Todos os erros ao iniciar a execução da tarefa são apresentados nos registos do serviço.Para criar várias programações para várias tarefas, atualize o ficheiro
croncom todas as tarefas que quer executar, juntamente com a respetiva programação associada. Por exemplo:${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 ...
Implemente o serviço do programador de tarefas:
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
Substitua o seguinte:
- JOB-NAME: o nome da sua tarefa do Cloud Run.
- PROJECT_ID: o ID do projeto.
- REGION: a região da sua tarefa do Cloud Run, por exemplo,
europe-west1.
O que se segue?
Depois de usar esta funcionalidade, pode fazer o seguinte: