Esta página descreve as práticas recomendadas para executar jobs programados do Cloud Run para projetos Google Cloud ao usar um perímetro do VPC Service Controls.
O Cloud Scheduler não pode acionar jobs dentro de um perímetro do VPC Service Controls. É necessário seguir outras etapas para configurar jobs programados. Mais especificamente, você precisa usar um proxy para a solicitação por outro componente. Recomendamos usar um serviço do Cloud Run como proxy.
Veja a seguir a arquitetura apresentada pelo diagrama:
Antes de começar
Configure o Cloud Run para VPC Service Controls. Essa é uma configuração única que todos os jobs programados subsequentes usam. Também será necessário fazer algumas configurações por serviço mais tarde, conforme descrito nas instruções a seguir.
Configurar um job programado
Para configurar um job programado em um perímetro do VPC Service Controls:
Crie um job e anote o nome dele.
Conclua a configuração do VPC Service Controls específica para cada job do Cloud Run. É necessário conectar o job a uma rede VPC e rotear todo o tráfego por essa rede.
Se você não tiver um job do Cloud Run que queira acionar, teste o recurso implantando o contêiner de jobs de exemplo do Cloud Run
us-docker.pkg.dev/cloudrun/container/job:latest
no Cloud Run.Implante o serviço do Cloud Run que funciona como um proxy. Consulte Exemplo de serviço de proxy para conferir um exemplo de serviço que aciona um job do Cloud Run em resposta a uma solicitação. Após a implantação, o console mostra o URL do serviço ao lado do texto URL:.
Conclua a configuração do VPC Service Controls específico do Cloud Run por serviço. É necessário conectar o serviço a uma rede VPC e rotear todo o tráfego por essa rede. Defina a entrada como Internal.
Crie um job cron do Cloud Scheduler que acione o serviço de proxy do Cloud Run:
Clique em Criar job.
Insira os valores que você quer para os campos Nome, Região, Frequência e Fuso horário. Para mais informações, consulte Criar um cron job usando o Cloud Scheduler.
Clique em Configurar a execução.
Selecione o tipo de destino HTTP.
Em URL, insira o URL do serviço de proxy do Cloud Run que você anotou na etapa anterior.
Para o método HTTP, selecione Get.
Em "Cabeçalho de autenticação", selecione Adicionar token OIDC.
Em "Conta de serviço", selecione Conta de serviço padrão do Compute Engine ou uma conta de serviço personalizada com a permissão
run.routes.invoke
ou o papelCloud Run Invoker
.Em "Público-alvo", insira o mesmo URL do serviço de proxy do Cloud Run que você anotou na etapa anterior.
Não preencha os outros campos.
Clique em Criar para criar o job cron do Cloud Scheduler.
Exemplo de serviço de proxy
A seção a seguir mostra um exemplo de serviço Python que faz a solicitação de proxy e aciona o job do Cloud Run.
Crie um arquivo chamado
main.py
e cole o código a seguir nele. Atualize o nome do job, a região e o ID do projeto com os valores necessários.import os from flask import Flask app = Flask(__name__) # pip install google-cloud-run from google.cloud import run_v2 @app.route('/') def hello(): client = run_v2.JobsClient() # UPDATE TO YOUR JOB NAME, REGION, AND PROJECT ID job_name = 'projects/YOUR_PROJECT_ID/locations/YOUR_JOB_REGION/jobs/YOUR_JOB_NAME' print("Triggering job...") request = run_v2.RunJobRequest(name=job_name) operation = client.run_job(request=request) response = operation.result() print(response) return "Done!" if __name__ == '__main__': app.run(debug=True, host="0.0.0.0", port=int(os.environ.get("PORT", 8080)))
Crie um arquivo chamado
requirements.txt
e cole o seguinte código nele:google-cloud-run flask
Crie um Dockerfile com o seguinte conteúdo:
FROM python:3.9-slim-buster WORKDIR /app COPY requirements.txt requirements.txt RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python3", "main.py"]
Crie e implante o contêiner. As implantações baseadas na origem podem ser difíceis de configurar em um ambiente do VPC Service Controls devido à necessidade de configurar workers personalizados do Cloud Build. Se você já tiver um pipeline de build e implantação, use-o para criar o código-fonte em um contêiner e implantar o contêiner como um serviço do Cloud Run.
Se você não tiver uma configuração de build e implantação, crie o contêiner localmente e envie-o para o Artifact Registry, por exemplo:
PROJECT_ID=YOUR_PROJECT_ID REGION=YOUR_REGION AR_REPO=YOUR_AR_REPO CLOUD_RUN_SERVICE=job-runner-service docker build -t $CLOUD_RUN_SERVICE . docker tag $CLOUD_RUN_SERVICE $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE docker push $REGION_ID-docker.pkg.dev/$PROJECT_ID/AR_REPO/$CLOUD_RUN_SERVICE
Anote o URL do serviço retornado pelo comando de implantação.
A seguir
Depois de usar esse recurso, leia os seguintes artigos para saber mais: