Nesta página, descrevemos como executar jobs do Cloud Run em uma programação usando o 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 Cloud de Confiance console, 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 Cloud de Confiance APIs, como 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 para seu projeto
Se você ainda não criou uma conta de serviço para o 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 para conceder à 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 criado um.
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 uma programação cron 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. Todos os erros ao iniciar a execução do job serão mostrados nos registros do serviço.Para criar várias programações para vários jobs, atualize o arquivo
croncom os jobs que você quer executar, além da programação associada. 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 do programador 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: