Neste tutorial, mostramos como usar o Cloud Tasks em um aplicativo do App Engine para acionar uma função do Cloud Run e enviar um e-mail programado.
Objetivos
- Entender o código em cada um dos componentes.
- Crie uma conta do SendGrid.
- Fazer o download do código-fonte.
- Implante uma função do Cloud Run para receber solicitações do Cloud Tasks e enviar um e-mail usando a API SendGrid.
- Criar uma fila do Cloud Tasks.
- Criar uma conta de serviço para autenticar suas solicitações do Cloud Tasks.
- Implantar o código do cliente que permite que um usuário envie um e-mail.
Custos
O Cloud Tasks, o Cloud Run e o App Engine têm um nível gratuito. Portanto, desde que você execute o tutorial dentro desse nível dos produtos determinados, isso não resultará em custos adicionais. Para mais informações, consulte Preços.
Antes de começar
Selecione ou crie um projeto do Google Cloud.
Inicialize um aplicativo do App Engine no seu projeto:
Na página Bem-vindo ao App Engine, clique em Criar aplicativo.
Selecione uma região para o aplicativo. Esse local servirá como o parâmetro
LOCATION_ID
para suas solicitações do Cloud Tasks. Portanto, anote-o. Observe que dois locais, denominados europe-west e us-central nos comandos do App Engine, são chamados, respectivamente, europe-west1 e us-central1 nos comandos do Cloud Tasks.Selecione Node.js para a linguagem e Padrão para o ambiente.
Se o pop-up Ativar faturamento for exibido, selecione sua conta de faturamento. Se você não tiver uma conta de faturamento atualmente, clique em Criar conta de faturamento e siga o assistente.
Na página Primeiros passos, clique em Avançar. Você cuidará disso mais tarde.
Ative as funções do Cloud Run e as APIs do Cloud Tasks.
Instale e inicialize a gcloud CLI.
Noções básicas sobre o código
Esta seção analisa o código do aplicativo e explica como ele funciona.
Como criar a tarefa
A página de índice é veiculada usando gerenciadores no app.yaml
. As variáveis necessárias para a criação de tarefas são passadas como variáveis de ambiente.
Esse código cria o endpoint /send-email
. Esse endpoint processa os envios de formulário da página de índice e passa esses dados para o código de criação de tarefas.
Na verdade, esse código cria a tarefa e a envia para a fila do Cloud Tasks. O código cria a tarefa por:
Especificando o tipo de segmentação como
HTTP Request
.Especificando o
HTTP method
a ser usado e oURL
do destino.Definir o cabeçalho
Content-Type
comoapplication/json
para que os aplicativos downstream possam analisar o payload estruturado.Adicionar um e-mail da conta de serviço para que o Cloud Tasks possa fornecer credenciais à segmentação da solicitação, o que requer autenticação. A conta de serviço é criada separadamente.
Verifique se a entrada do usuário para data está dentro do máximo de 30 dias e adicione-a à solicitação como campo
scheduleTime
.
Como criar o e-mail
Esse código cria a função do Cloud Run que é o destino da solicitação do Cloud Tasks. Ele usa o corpo da solicitação para construir um e-mail e enviá-lo por meio da API SendGrid.
Como preparar o aplicativo
Como configurar o SendGrid
Crie uma conta do SendGrid.
- É possível fazer isso manualmente por meio do site do SendGrid
- ou usar o Google Cloud Launcher, que criará uma conta para você e integrará o faturamento. Consulte Como criar uma conta do SendGrid usando o Cloud Launcher.
Crie uma chave de API do SendGrid:
Faça login na sua conta do SendGrid.
Na barra de navegação esquerda, abra Configurações e clique em Chaves de API.
Clique em Criar chave de API e selecione acesso restrito. No cabeçalho Enviar e-mail, selecione Acesso total.
Copie a chave de API quando ela for exibida (você verá essa opção apenas uma vez, cole-a em algum lugar para usá-la mais tarde).
Como fazer o download do código-fonte
Clone o repositório do app de amostra na máquina local:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Acesse o diretório que contém o exemplo de código:
cd cloud-tasks/
Como implantar a função do Cloud Run
Navegue até o diretório
function/
:cd function/
Implante a função:
gcloud functions deploy sendEmail --runtime nodejs14 --trigger-http \ --no-allow-unauthenticated \ --set-env-vars SENDGRID_API_KEY=SENDGRID_API_KEY \
Substitua
SENDGRID_API_KEY
pela sua chave de API.Este comando usa sinalizações:
--trigger-http
para especificar o tipo de gatilho das funções do Cloud Run.--no-allow-unauthenticated
para especificar a invocação da função requer autenticação.--set-env-var
para definir suas credenciais do SendGrid
Defina o controle de acesso da função para permitir apenas usuários autenticados.
Selecione a função
sendEmail
na IU do Cloud Run functions.Se você não vir informações de permissões para
sendEmail
, clique em MOSTRAR PAINEL DE INFORMAÇÕES no canto superior direito.Clique no botão Adicionar principais acima.
Defina Novos principais como
allAuthenticatedUsers
.Defina o Papel.
- Funções de primeira geração (1a geração): defina o papel como
Cloud Function Invoker
- Funções de 2ª geração: defina o papel como
Cloud Run Invoker
.
- Funções de primeira geração (1a geração): defina o papel como
Clique em SALVAR.
Como criar uma fila do Cloud Tasks
Crie uma fila usando o seguinte comando
gcloud
:gcloud tasks queues create my-queue --location=LOCATION
Substitua
LOCATION
pela opção desejada. location da fila, por exemplo,us-west2
. Se você sem especificar o local, a CLI gcloud escolhe o padrão.Verifique se ele foi criado com sucesso:
gcloud tasks queues describe my-queue --location=LOCATION
Substitua
LOCATION
pelo local da fila.
Como criar uma conta de serviço
A solicitação do Cloud Tasks precisa fornecer credenciais no cabeçalho Authorization
para que a função do Cloud Run autentique a solicitação. Essa conta de serviço permite que o Cloud Tasks crie e adicione um token OIDC para essa finalidade.
Na interface das contas de serviço, clique em + CRIAR CONTA DE SERVIÇO.
Adicione um nome de conta de serviço (nome de exibição amigável) e selecione Criar.
Defina o Papel e clique em Continuar.
- Funções de 1ª geração: defina o papel como
Cloud Function Invoker
. - Funções de segunda geração (2a geração): defina o papel como
Cloud Run Invoker
- Funções de 1ª geração: defina o papel como
Selecione Concluído.
Como implantar o endpoint e o criador de tarefas no App Engine
Navegue até o diretório
app/
:cd ../app/
Atualize as variáveis no
app.yaml
com seus valores:Para encontrar o local da fila, use o seguinte comando:
gcloud tasks queues describe my-queue --location=LOCATION
Substitua
LOCATION
pelo local da fila.Para encontrar o URL da função, use o seguinte comando:
gcloud functions describe sendEmail
Implante o aplicativo no ambiente padrão do App Engine usando o seguinte comando:
gcloud app deploy
Abra o aplicativo para enviar um cartão-postal como um e-mail:
gcloud app browse
Limpar
Depois de concluir o tutorial, você pode limpar os recursos que criou para que eles parem de usar a cota e gerar cobranças. Nas seções a seguir, você aprenderá a excluir e desativar esses recursos.
Como excluir recursos
É possível limpar os recursos criados no Google Cloud para que eles não ocupem a cota e você não receba cobranças por eles no futuro. As próximas seções descrevem como excluir ou desativar esses recursos.
Excluir a função do Cloud Run
Acesse a página Funções do Cloud Run no console do Google Cloud.
Clique nas caixas de seleção ao lado das funções.
Clique no botão Excluir na parte superior da página e confirme.
Excluir a fila do Cloud Tasks
Abra a página de filas do Cloud Tasks no console.
Selecione o nome da fila que você quer excluir e clique em Excluir fila.
Confirme a ação.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
A seguir
- Saiba mais sobre como criar tarefas de destino HTTP.
- Saiba mais sobre como configurar sua fila do Cloud Tasks.