Crie um trabalho de shell no Cloud Run

Saiba como criar uma tarefa simples do Cloud Run e, em seguida, implementá-la a partir da origem, que automaticamente compacta o seu código numa imagem de contentor, carrega a imagem de contentor para o Artifact Registry e, em seguida, implementa-a no Cloud Run. Pode usar outros idiomas além dos apresentados.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

  7. Verify that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.

  9. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Se estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

  13. Verify that billing is enabled for your Google Cloud project.

  14. Enable the Cloud Run Admin API and Cloud Build APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com

    Depois de ativar a Cloud Run Admin API, a conta de serviço predefinida do Compute Engine é criada automaticamente.

  15. Reveja os preços do Cloud Run ou estime os custos com a calculadora de preços.
  16. Funções necessárias

    Para receber as autorizações de que precisa para concluir este início rápido, peça ao seu administrador que lhe conceda as seguintes funções do IAM:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

    Conceda à conta de serviço do Cloud Build acesso ao seu projeto

    O Cloud Build usa automaticamente a conta de serviço predefinida do Compute Engine como a conta de serviço predefinida do Cloud Build para compilar o seu código-fonte e recurso do Cloud Run, a menos que substitua este comportamento.

    Para que o Cloud Build compile as suas origens, conceda à conta de serviço do Cloud Build a função Cloud Run Builder (roles/run.builder) no seu projeto:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \
        --role=roles/run.builder

    Substitua PROJECT_ID pelo seu Google Cloud ID do projeto e SERVICE_ACCOUNT_EMAIL_ADDRESS pelo endereço de email da conta de serviço do Cloud Build. Se estiver a usar a conta de serviço predefinida do Compute Engine como conta de serviço do Cloud Build, use o seguinte formato para o endereço de email da conta de serviço:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Substitua PROJECT_NUMBER pelo seu Google Cloud número do projeto.

    Para ver instruções detalhadas sobre como encontrar o ID e o número do projeto, consulte o artigo Criar e gerir projetos.

    A atribuição da função de criador do Cloud Run demora alguns minutos a propagar-se.

    Escrever a tarefa de exemplo

    Para escrever uma tarefa do Cloud Run que execute um script de shell:

    1. Crie um novo diretório com o nome jobs e altere o diretório para o mesmo:

      mkdir jobs
      cd jobs
      
    2. Crie um ficheiro Dockerfile com o seguinte conteúdo:

      
      # Use the official Ubuntu image from Docker Hub as
      # a base image
      FROM ubuntu:24.04
      
      # Execute next commands in the directory /workspace
      WORKDIR /workspace
      
      # Copy over the script to the /workspace directory
      COPY script.sh .
      
      # Just in case the script doesn't have the executable bit set
      RUN chmod +x ./script.sh
      
      # Run the script when starting the container
      CMD [ "./script.sh" ]
      
    3. No mesmo diretório, crie um ficheiro script.sh para o código do trabalho real. Copie as seguintes linhas de exemplo para o ficheiro:

      #!/bin/bash
      set -euo pipefail
      
      # In production, consider printing commands as they are executed. 
      # This helps with debugging if things go wrong and you only 
      # have the logs.
      #
      # Add -x:
      # `set -euox pipefail`
      
      CLOUD_RUN_TASK_INDEX=${CLOUD_RUN_TASK_INDEX:=0}
      CLOUD_RUN_TASK_ATTEMPT=${CLOUD_RUN_TASK_ATTEMPT:=0}
      
      echo "Starting Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT}..."
      
      # SLEEP_MS and FAIL_RATE should be a decimal
      # numbers. parse and format the input using 
      # printf. 
      #
      # printf validates the input since it 
      # quits on invalid input, as shown here:
      #
      #   $: printf '%.1f' "abc"
      #   bash: printf: abc: invalid number
      #
      SLEEP_MS=$(printf '%.1f' "${SLEEP_MS:=0}")
      FAIL_RATE=$(printf '%.1f' "${FAIL_RATE:=0}")
      
      # Wait for a specific amount of time to simulate
      # performing some work
      SLEEP_SEC=$(echo print\("${SLEEP_MS}"/1000\) | perl)
      sleep "$SLEEP_SEC" # sleep accepts seconds, not milliseconds
      
      # Fail the task with a likelihood of $FAIL_RATE
      
      # Bash does not do floating point arithmetic. Use perl 
      # to convert into integer and multiply by 100.
      FAIL_RATE_INT=$(echo print\("int(${FAIL_RATE:=0}*100"\)\) | perl)
      
      # Generate a random number between 0 and 100
      RAND=$(( RANDOM % 100))
      if (( RAND < FAIL_RATE_INT )); then 
          echo "Task #${CLOUD_RUN_TASK_INDEX}, Attempt #${CLOUD_RUN_TASK_ATTEMPT} failed."
          exit 1
      else 
          echo "Completed Task #${CLOUD_RUN_TASK_INDEX}."
      fi
      

      As tarefas do Cloud Run permitem que os utilizadores especifiquem o número de tarefas que a tarefa deve executar. Este código de exemplo mostra como usar a variável de ambiente CLOUD_RUN_TASK_INDEX incorporada. Cada tarefa representa uma cópia em execução do contentor. Tenha em atenção que as tarefas são normalmente executadas em paralelo. A utilização de várias tarefas é útil se cada tarefa puder processar independentemente um subconjunto dos seus dados.

      Cada tarefa tem conhecimento do respetivo índice, armazenado na variável de ambiente CLOUD_RUN_TASK_INDEX. A variável de ambiente CLOUD_RUN_TASK_COUNT incorporada contém o número de tarefas fornecidas no momento da execução do trabalho através do parâmetro --tasks.

      O código apresentado também mostra como repetir tarefas, usando a variável de ambiente CLOUD_RUN_TASK_ATTEMPT incorporada, que contém o número de vezes que esta tarefa foi repetida, começando em 0 para a primeira tentativa e aumentando 1 para cada repetição sucessiva, até --max-retries.

      O código também permite gerar falhas como forma de testar as repetições e gerar registos de erros para que possa ver como são.

    O seu código está completo e pronto para ser incluído num contentor.

    Crie um contentor de trabalhos, envie-o para o Artifact Registry e implemente-o no Cloud Run

    Este início rápido usa a implementação a partir da origem, que cria o contentor, carrega-o para o Artifact Registry e implementa a tarefa no Cloud Run:

    gcloud run jobs deploy job-quickstart \
        --source . \
        --tasks 50 \
        --set-env-vars SLEEP_MS=10000 \
        --set-env-vars FAIL_RATE=0.1 \
        --max-retries 5 \
        --region REGION \
        --project=PROJECT_ID

    onde PROJECT_ID é o ID do projeto e REGION é a sua região, por exemplo, europe-west1. Tenha em atenção que pode alterar os vários parâmetros para os valores que quiser usar para fins de teste. SLEEP_MS simula o trabalho e FAIL_RATE faz com que X% das tarefas falhem para que possa experimentar o paralelismo e tentar novamente as tarefas com falhas.

    Execute uma tarefa no Cloud Run

    Para executar a tarefa que acabou de criar:

    gcloud run jobs execute job-quickstart --region REGION

    Substitua REGION pela região que usou quando criou e implementou a tarefa, por exemplo, europe-west1.

    Limpar

    Para evitar custos adicionais na sua conta Google Cloud , elimine todos os recursos implementados com este início rápido.

    Elimine o seu repositório

    O Cloud Run só cobra pelo tempo de execução da sua tarefa. No entanto, ainda pode ser cobrado pelo armazenamento da imagem do contentor no Artifact Registry. Para eliminar repositórios do Artifact Registry, siga os passos em Eliminar repositórios na documentação do Artifact Registry.

    Elimine a sua tarefa

    As tarefas do Cloud Run só incorrem em custos quando uma tarefa está a ser executada. Para eliminar a tarefa do Cloud Run, siga um destes passos:

    Consola

    Para eliminar uma tarefa:

    1. Na Google Cloud consola, aceda ao Cloud Run:

      Aceda ao Cloud Run

    2. Localize a tarefa que quer eliminar na lista de tarefas e clique na caixa de verificação para a selecionar.

    3. Clique em Eliminar. Esta ação termina todas as execuções de tarefas em curso e todas as instâncias de contentores em execução.

    gcloud

    Para eliminar uma tarefa, execute o seguinte comando:

    gcloud run jobs delete JOB_NAME

    Substitua JOB_NAME pelo nome da tarefa.

    Elimine o projeto de teste

    A eliminação do seu projeto Google Cloud interrompe a faturação de todos os recursos nesse projeto. Para libertar todos os Google Cloud recursos no seu projeto, siga estes passos:

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    O que se segue?

    Para mais informações sobre a criação de um contentor a partir do código-fonte e o envio para um repositório, consulte: