Nesta página, descrevemos como executar jobs do Cloud Run em uma programação usando crontab.
Funções exigidas
Para receber as permissões necessárias para as operações descritas nesta página, peça ao administrador para conceder a você um dos seguintes papéis do IAM no job do Cloud Run:
- Para executar jobs usando a Google Cloud CLI: invocador do Cloud Run (
roles/run.invoker) no job do Cloud Run. - Para executar jobs usando o console do Cloud de Confiance , substituir as configurações de jobs ou cancelar execuções de jobs: Desenvolvedor do Cloud Run (
roles/run.developer) no job do Cloud Run.
Para uma lista de papéis e permissões do IAM associados ao Cloud Run, consulte Papéis do IAM do Cloud Run e Permissões do IAM do Cloud Run. Se o job do Cloud Run interagir com APIs doCloud de Confiance , como as bibliotecas de cliente do Cloud, consulte o guia de configuração de identidade de serviço. Para mais informações sobre como conceder papéis, consulte permissões de implantação e gerenciar acesso.
Conceder acesso à conta de serviço ao projeto
Se você não tiver criado uma conta de serviço para seu job do Cloud Run, crie uma. 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 permissões necessárias para executar jobs, peça ao administrador que conceda à sua conta de serviço o papel de Executor de jobs (roles/run.jobsExecutor) no projeto. 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 projeto.
Antes de começar
Crie um job do Cloud Run se ainda não tiver feito isso.
Configurar um job do Cloud Run para ser executado em uma programação
Para executar um job do Cloud Run em uma programação:
Crie um novo diretório com o nome
cloud-run-jobs-schede altere o diretório nele:mkdir cloud-run-jobs-sched cd cloud-run-jobs-sched
Crie um arquivo
Dockerfilee cole as seguintes linhas nele: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 arquivo
entrypoint.she cole as seguintes linhas nele: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 arquivo
main.pye cole o seguinte código Python nele: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 arquivo
requirements.txte cole as seguintes dependências nele:Flask==3.0.3 gunicorn==23.0.0 Werkzeug==3.0.3
Crie um arquivo
cronno diretório e adicione um cronograma para executar o job. Exemplo:0 2 * * * gcloud run jobs execute --async test-job > /proc/1/fd/1 2>&1
Esse comando executa um job chamado
test-jobtodos os dias às 2h. Os erros ao iniciar a execução do job vão aparecer nos registros do serviço.Para criar vários agendamentos para vários jobs, atualize o arquivo
croncom todos os jobs que você quer executar, além do agendamento associado. 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 ...
Implante o serviço de agendador de jobs:
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:
- JOB-NAME: o nome do seu job do Cloud Run;
- PROJECT_ID: o ID do projeto.
- REGION: a região do seu job do Cloud Run, por
exemplo,
europe-west1.
A seguir
Após usar esse recurso, você poderá fazer o seguinte: