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 pela 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 Functions 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 APIs Cloud Run functions e 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 do Cloud Run functions.--no-allow-unauthenticated
para especificar que a invocação da função exige 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 interface 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 a função.
- Funções de 1ª 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 1ª 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
pelo seu local preferido para a fila, por exemplo,us-west2
. Se você não especificar o local, a CLI gcloud vai escolher 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 IU 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 2ª 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 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.