Adicionar uma tarefa do App Engine a uma fila de tarefas do Cloud Tasks

O Cloud Tasks permite que você envie tarefas assíncronas para serviços do App Engine para processar cargas de trabalho em segundo plano. Neste guia de início rápido, você vai usar a API Cloud Tasks para criar e adicionar uma tarefa do App Engine a uma fila de tarefas do Cloud Tasks.

Antes de começar

  1. Instale a CLI do Google Cloud.

  2. Configure a CLI gcloud para usar sua identidade federada.

    Para mais informações, consulte Fazer login na CLI gcloud com sua identidade federada.

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

    gcloud init
  4. Crie ou selecione um Google Cloud projeto.

    Funções necessárias para selecionar ou criar um projeto

    • Selecionar um projeto: não é necessário ter um papel específico do IAM para selecionar um projeto. É possível selecionar qualquer projeto em que você tenha um papel.
    • Criar um projeto: para criar um projeto, é preciso ter o papel de Criador de projetos (roles/resourcemanager.projectCreator), que contém a permissão resourcemanager.projects.create. Saiba como conceder papéis.
    • Crie um projeto do Google Cloud :

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud .

  5. Verifique se o faturamento está ativado para o projeto do Google Cloud .

  6. Ative as APIs Cloud Resource Manager e API Cloud Tasks, se ainda não estiverem ativadas:

    Funções necessárias para ativar APIs

    Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão pelo papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

    gcloud services enable cloudresourcemanager.googleapis.com tasks.googleapis.com
  7. Crie credenciais de autenticação local para sua conta de usuário:

    gcloud auth application-default login

    Se um erro de autenticação for retornado, confirme se você fez login na CLI gcloud com sua identidade federada.

  8. A conta de serviço padrão do App Engine é criada automaticamente quando você usa o App Engine. Você pode usar essa conta de serviço ao testar este guia de início rápido. No entanto, dependendo da configuração da política da organização, a conta de serviço padrão pode não receber automaticamente o papel Editor no projeto. Nesse caso, conceda à conta de serviço os seguintes papéis:
    1. Administrador do Artifact Registry (roles/artifactregistry.admin)
    2. Gravador Create-on-Push do Artifact Registry (roles/artifactregistry.createOnPushWriter)
    3. Administrador do Compute (roles/compute.admin)
    4. Gravador de registros (roles/logging.logWriter)
    5. Leitor de objetos do Storage (roles/storage.objectViewer)

Adicionar um aplicativo do App Engine

Ao segmentar uma tarefa do App Engine e antes de implantar um app no ambiente padrão do App Engine, é necessário adicionar um aplicativo do App Engine ao projeto.

  1. No console do Google Cloud , acesse a página do App Engine.

    Acessar o App Engine

  2. Na caixa de diálogo Bem-vindo ao App Engine, faça o seguinte:

    • Se você já tiver criado um aplicativo do App Engine e a mensagem Seu aplicativo do App Engine foi criado for exibida, pule as etapas restantes desta seção e prossiga para as etapas na seção Instalar e implantar o exemplo.

      ou

    • Se você ainda não criou um aplicativo do App Engine, clique em Criar aplicativo e siga as etapas restantes nesta seção.

  3. Selecione uma região para o aplicativo e anote essa informação.

    Observe que europe-west e us-central são chamados, respectivamente, europe-west1 e us-central1 nos comandos do Cloud Tasks.

  4. Não selecione uma conta de serviço. A conta de serviço padrão do App Engine será usada.

  5. Clique em Próxima.

    O aplicativo é configurado e criado. Isso pode levar alguns minutos.

  6. Não faça o download do SDK Cloud. Em vez disso, clique em Farei isso mais tarde.

    Você vai receber a mensagem Seu aplicativo do App Engine foi criado.

Instalar e implantar a amostra

A amostra do Node.js usada neste guia de início rápido consiste em dois arquivos: createTask.js é executado localmente como uma ferramenta de linha de comando para criar e adicionar tarefas à fila de tarefas. server.js é implantado no App Engine como um serviço de worker para processar a tarefa.

  1. No terminal, clone o repositório do aplicativo de exemplo na sua máquina local.

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    
  2. Navegue até o diretório que contém o exemplo de código.

    cd nodejs-docs-samples/cloud-tasks/snippets
    
  3. Instale todas as dependências usando um gerenciador de pacotes do Node.js.

    Você pode usar o NPM:

    npm install
    

    Ou use o Yarn:

    yarn install
    
  4. Implante o serviço de worker (server.js) no ambiente padrão do App Engine.

    gcloud app deploy app.yaml
    
  5. Verifique se o app que contém o serviço está em execução.

    gcloud app browse
    
  6. No navegador, acesse o link fornecido. Exemplo:

    https://PROJECT_ID.uc.r.appspot.com/
    

    Você verá Hello, World!.

Criar uma fila de tarefas do Cloud Tasks

Use o comando gcloud tasks queues create para criar a fila no ambiente que você preparou.

  1. No terminal, crie uma fila que registre todas as operações.

    gcloud tasks queues create QUEUE_NAME \
        --log-sampling-ratio=1.0 \
        --location=REGION
    

    Substitua:

    • QUEUE_NAME: um nome para a fila do Cloud Tasks
    • REGION: a região em que você implantou o app.
  2. Aguarde a inicialização da fila e verifique se ela foi criada com sucesso.

    gcloud tasks queues describe QUEUE_NAME \
        --location=REGION
    

    A saída será semelhante a esta:

     name: projects/PROJECT_ID/locations/LOCATION_ID/queues/QUEUE_NAME
     rateLimits:
       maxBurstSize: 100
       maxConcurrentDispatches: 1000
       maxDispatchesPerSecond: 500.0
     retryConfig:
       maxAttempts: 100
       maxBackoff: 3600s
       maxDoublings: 16
       minBackoff: 0.100s
     state: RUNNING
    

Adicionar uma tarefa à fila do Cloud Tasks

Crie uma tarefa, adicione-a à fila criada e entregue essa tarefa ao serviço do worker.

  1. Defina as seguintes variáveis de ambiente. O cliente usa essas informações para criar a solicitação.

    export PROJECT_ID=PROJECT_ID
    export LOCATION_ID=REGION
    export QUEUE_ID=QUEUE_NAME
    
  2. Crie uma tarefa com um payload de hello e adicione essa tarefa à sua fila. O payload pode ser qualquer dado da solicitação que o serviço de worker precisa para processar a tarefa.

    node createTask.js $PROJECT_ID $QUEUE_ID $LOCATION_ID hello
    
  3. Verifique se a tarefa foi executada mostrando os registros do serviço de worker.

    gcloud app logs read
    

    Os registros serão parecidos com isto:

    2024-06-20 15:00:00 default[20240620t143852]  "POST /log_payload HTTP/1.1" 200
    2024-06-20 15:00:00 default[20240620t143852]  App listening on port 8081
    2024-06-20 15:00:00 default[20240620t143852]  Press Ctrl+C to quit.
    2024-06-20 15:00:00 default[20240620t143852]  Received task with payload: hello
    

Limpar

Para evitar cobranças na conta do Google Cloud pelos recursos usados nesta página, exclua o projeto do Google Cloud e os recursos.

Excluir um projeto do Google Cloud :

gcloud projects delete PROJECT_ID

Como alternativa, exclua os recursos que você criou:

  1. Exclua a fila de tarefas do Cloud Tasks:

    gcloud tasks queues delete QUEUE_NAME \
        --location=REGION
    
  2. Desative o aplicativo do App Engine.

A seguir