Práticas recomendadas: execute trabalhos agendados num perímetro dos VPC Service Controls

Esta página descreve as práticas recomendadas para executar tarefas agendadas do Cloud Run para projetos quando usar um perímetro dos VPC Service Controls. Google Cloud

O Cloud Scheduler não pode acionar trabalhos dentro de um perímetro do VPC Service Controls. Tem de seguir passos adicionais para configurar tarefas agendadas. Em particular, tem de encaminhar o pedido através de outro componente. Recomendamos que use um serviço do Cloud Run como proxy.

O diagrama seguinte mostra a arquitetura:

Perímetro do VPC SC do Cloud Run

Antes de começar

Configure o Cloud Run para o VPC Service Controls. Esta é uma configuração única que todas as tarefas agendadas subsequentes usam. Também tem de fazer alguma configuração por serviço mais tarde, que é descrita nas instruções que se seguem.

Configure uma tarefa agendada

Para configurar uma tarefa agendada dentro de um perímetro dos VPC Service Controls:

  1. Crie um trabalho e anote o nome do trabalho.

  2. Conclua a configuração do VPC Service Controls específica do Cloud Run por tarefa. Tem de associar o seu trabalho a uma rede VPC e encaminhar todo o tráfego através dessa rede.

    Se não tiver uma tarefa do Cloud Run existente que queira acionar, teste a funcionalidade implementando o contentor de tarefas do Cloud Run de exemplo us-docker.pkg.dev/cloudrun/container/job:latest no Cloud Run.

  3. Implemente o serviço do Cloud Run que funciona como um proxy. Consulte o Serviço de proxy de exemplo para ver um serviço de exemplo que aciona uma tarefa do Cloud Run em resposta a um pedido. Após a implementação, a consola apresenta o URL do serviço junto ao texto URL:.

  4. Conclua a configuração dos VPC Service Controls específicos do Cloud Run por serviço. Tem de ligar o serviço a uma rede VPC e encaminhar todo o tráfego através dessa rede. Certifique-se de que define a entrada como Interna.

  5. Crie uma tarefa cron do Cloud Scheduler que aciona o serviço de proxy do Cloud Run:

    1. Aceda à página da consola de tarefas do Cloud Scheduler

    2. Clique em Criar tarefa.

    3. Introduza os valores pretendidos para os campos Nome, Região, Frequência e Fuso horário. Para mais informações, consulte o artigo Crie uma tarefa cron com o Cloud Scheduler.

    4. Clique em Configurar a execução.

    5. Selecione o tipo de destino HTTP.

    6. Para URL, introduza o URL do serviço proxy do Cloud Run que anotou no passo anterior.

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

    8. Para o cabeçalho Auth, selecione Adicionar token OIDC

    9. Para a conta de serviço, selecione Conta de serviço predefinida do Compute Engine ou uma conta de serviço personalizada que tenha a autorização run.routes.invoke ou a função Cloud Run Invoker.

    10. Para o público-alvo, introduza o mesmo URL do serviço proxy do Cloud Run que anotou no passo anterior.

    11. Deixe todos os outros campos em branco.

    12. Clique em Criar para criar a tarefa cron do Cloud Scheduler.

Serviço de proxy de exemplo

A secção seguinte mostra um exemplo de um serviço Python que encaminha pedidos e aciona a tarefa do Cloud Run.

  1. Crie um ficheiro denominado main.py e cole o seguinte código no mesmo. Atualize o nome da tarefa, a região e o ID do projeto para os valores de que precisa.

    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 ficheiro com o nome requirements.txt e cole o seguinte código no mesmo:

    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 implemente o contentor. As implementações baseadas na origem podem ser difíceis de configurar num ambiente do VPC Service Controls devido à necessidade de configurar trabalhadores personalizados do Cloud Build. Se tiver um pipeline de compilação e implementação existente, use-o para compilar o código fonte num contentor e implementar o contentor como um serviço do Cloud Run.

    Se não tiver uma configuração de compilação e implementação existente, compile o contentor 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

    Tome nota do URL do serviço devolvido pelo comando deploy.

O que se segue?

Depois de usar esta funcionalidade, saiba mais lendo o seguinte: