Práticas recomendadas: execute trabalhos programados em um perímetro do VPC Service Controls

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:

Perímetro do VPC SC do Cloud Run

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:

  1. Crie um job e anote o nome dele.

  2. 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.

  3. 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:.

  4. 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.

  5. Crie um job cron do Cloud Scheduler que acione o serviço de proxy do Cloud Run:

    1. Acesse a página do console de trabalhos do Cloud Scheduler

    2. Clique em Criar job.

    3. 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.

    4. Clique em Configurar a execução.

    5. Selecione o tipo de destino HTTP.

    6. Em URL, insira o URL do serviço de proxy do Cloud Run que você anotou na etapa anterior.

    7. Para o método HTTP, selecione Get.

    8. Em "Cabeçalho de autenticação", selecione Adicionar token OIDC.

    9. 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 papel Cloud Run Invoker.

    10. Em "Público-alvo", insira o mesmo URL do serviço de proxy do Cloud Run que você anotou na etapa anterior.

    11. Não preencha os outros campos.

    12. 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.

  1. 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)))
  2. Crie um arquivo chamado requirements.txt e cole o seguinte código nele:

    google-cloud-run
    flask
  3. 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"]
  4. 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: