Este tutorial mostra como usar o Cloud Tasks numa aplicação do App Engine para acionar uma função do Cloud Run e enviar um email agendado.
Objetivos
- Compreenda o código em cada um dos componentes.
- Crie uma conta do SendGrid.
- Transfira o código-fonte.
- Implemente uma função do Cloud Run para receber pedidos do Cloud Tasks e enviar um email através da API SendGrid.
- Crie uma fila do Cloud Tasks.
- Crie uma conta de serviço para autenticar os seus pedidos do Cloud Tasks.
- Implemente o código do cliente que permite a um utilizador enviar um email.
Custos
O Cloud Tasks, as funções do Cloud Run e o App Engine têm um nível gratuito. Por isso, desde que esteja a executar o tutorial no nível gratuito dos produtos indicados, não deve resultar em custos adicionais. Para mais informações, consulte a secção Preços.
Antes de começar
Selecione ou crie um Google Cloud projeto.
Inicialize uma aplicação do App Engine no seu projeto:
Na página Bem-vindo ao App Engine, clique em Criar aplicação.
Selecione uma região para a sua aplicação. Esta localização vai servir como o parâmetro
LOCATION_ID
para os seus pedidos do Cloud Tasks, por isso, tome nota. Tenha em atenção que duas localizações, denominadas europe-west e us-central nos comandos do App Engine, são denominadas, respetivamente, europe-west1 e us-central1 nos comandos do Cloud Tasks.Selecione Node.js para o idioma e Standard para o ambiente.
Se for apresentado o pop-up Ativar faturação, selecione a sua conta de faturação. Se não tiver atualmente uma conta de faturação, clique em Criar conta de faturação e siga o assistente.
Na página Começar, clique em Seguinte. Vai tratar disto mais tarde.
Ative as APIs Cloud Run Functions e Cloud Tasks.
Instale e inicialize a CLI gcloud.
Compreender o código
Esta secção explica o código da app e como funciona.
Criar a tarefa
A página de índice é publicada através de controladores no app.yaml
. As variáveis necessárias para a criação de tarefas são transmitidas como variáveis de ambiente.
Este código cria o ponto final /send-email
. Este ponto final processa os envios de formulários da página de índice e transmite esses dados ao código de criação de tarefas.
Este código cria efetivamente a tarefa e envia-a para a fila do Cloud Tasks. O código cria a tarefa:
Especificar o tipo de destino como
HTTP Request
.Especificar o
HTTP method
a usar e oURL
do destino.Definir o cabeçalho
Content-Type
comoapplication/json
para que as aplicações a jusante possam analisar a carga útil estruturada.Adicionar um email de conta de serviço para que o Cloud Tasks possa fornecer credenciais ao destino do pedido, o que requer autenticação. A conta de serviço é criada separadamente.
Verificar se a entrada do utilizador para a data está no máximo de 30 dias e adicioná-la ao pedido como campo
scheduleTime
.
Criar o email
Este código cria a função do Cloud Run que é o destino do pedido do Cloud Tasks. Usa o corpo do pedido para criar um email e enviá-lo através da API SendGrid.
A preparar a aplicação
Configurar o SendGrid
Crie uma conta do SendGrid.
- Pode fazê-lo manualmente através do Website do SendGrid
- Em alternativa, pode usar o Google Cloud Launcher, que cria uma conta para si e integra a faturação. Consulte o artigo Criar uma conta do SendGrid através do Cloud Launcher.
Crie uma chave da API SendGrid:
Inicie sessão na sua conta do SendGrid.
No menu de navegação do lado esquerdo, abra Definições e clique em Chaves de API.
Clique em Criar chave da API e selecione acesso restrito. No cabeçalho Mail Send, selecione Acesso total.
Copie a chave API quando for apresentada (só a vê uma vez. Certifique-se de que a cola noutro local para a poder usar mais tarde).
Transferir o código-fonte
Clone o repositório da app de exemplo para a sua máquina local:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Altere para o diretório que contém o código de exemplo:
cd cloud-tasks/
Implementar a função do Cloud Run
Navegue para o diretório
function/
:cd function/
Implemente 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 da API.Este comando usa sinalizadores:
--trigger-http
para especificar o tipo de acionador de funções do Cloud Run.--no-allow-unauthenticated
para especificar que a invocação da função requer autenticação.--set-env-var
para definir as suas credenciais do SendGrid
Defina o controlo de acesso para a função de modo a permitir apenas utilizadores autenticados.
Selecione a função
sendEmail
na IU das funções do Cloud Run.Se não vir informações de autorizações para
sendEmail
, clique em MOSTRAR PAINEL DE INFORMAÇÕES no canto superior direito.Clique no botão Adicionar diretores acima.
Defina Novos diretores como
allAuthenticatedUsers
.Defina a função.
- Funções de primeira geração (1.ª geração): defina a função como
Cloud Function Invoker
- Funções de segunda geração (2.ª geração): defina a função como
Cloud Run Invoker
- Funções de primeira geração (1.ª geração): defina a função como
Clique em GUARDAR.
Criar uma fila do Cloud Tasks
Crie uma fila com o seguinte comando
gcloud
:gcloud tasks queues create my-queue --location=LOCATION
Substitua
LOCATION
pela sua localização preferida para a fila, por exemplo,us-west2
. Se não especificar a localização, a CLI gcloud escolhe a predefinição.Verifique se foi criado com êxito:
gcloud tasks queues describe my-queue --location=LOCATION
Substitua
LOCATION
pela localização da fila.
Criar uma conta de serviço
O pedido Cloud Tasks tem de fornecer credenciais no cabeçalho Authorization
para que a função do Cloud Run autentique o pedido. Esta conta de serviço permite que o Cloud Tasks crie e adicione um token OIDC para esse fim.
Na IU de contas de serviço, clique em +CRIAR CONTA DE SERVIÇO.
Adicione um nome da conta de serviço(nome a apresentar simples) e selecione criar.
Defina a Função e clique em Continuar.
- Funções de primeira geração (1.ª geração): defina a função como
Cloud Function Invoker
- Funções de segunda geração (2.ª geração): defina a função como
Cloud Run Invoker
- Funções de primeira geração (1.ª geração): defina a função como
Selecione Concluído.
Implementar o ponto final e o criador de tarefas no App Engine
Navegue para o diretório
app/
:cd ../app/
Atualize as variáveis no
app.yaml
com os seus valores:Para encontrar a sua posição na fila, use o seguinte comando:
gcloud tasks queues describe my-queue --location=LOCATION
Substitua
LOCATION
pela localização da fila.Para encontrar o URL da função, use o seguinte comando:
gcloud functions describe sendEmail
Implemente a aplicação no ambiente padrão do App Engine com o seguinte comando:
gcloud app deploy
Abra a aplicação para enviar um postal como email:
gcloud app browse
Limpar
Depois de concluir o tutorial, pode limpar os recursos que criou para que deixem de usar a quota e incorrer em custos. As secções seguintes descrevem como eliminar ou desativar estes recursos.
Eliminar recursos
Pode limpar os recursos que criou no Google Cloud para que não ocupem quota e não lhe sejam faturados no futuro. As secções seguintes descrevem como eliminar ou desativar estes recursos.
Elimine a função do Cloud Run
Aceda à página Funções do Cloud Run na Google Cloud consola.
Clique nas caixas de verificação junto às suas funções.
Clique no botão Eliminar na parte superior da página e confirme a eliminação.
Elimine a fila do Cloud Tasks
Abra a página de filas do Cloud Tasks na consola.
Selecione o nome da fila que quer eliminar e clique em Eliminar fila.
Confirme a ação.
Eliminar o projeto
A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.
Para eliminar 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.
O que se segue?
- Saiba mais sobre a criação de tarefas de destino HTTP.
- Saiba mais sobre a configuração da fila do Cloud Tasks.