En este tutorial se muestra cómo usar Cloud Tasks en una aplicación de App Engine para activar una función de Cloud Run y enviar un correo programado.
Objetivos
- Entender el código de cada uno de los componentes.
- Crea una cuenta de SendGrid.
- Descarga el código fuente.
- Despliega una función de Cloud Run para recibir solicitudes de Cloud Tasks y enviar un correo a través de la API de SendGrid.
- Crea una cola de Cloud Tasks.
- Crea una cuenta de servicio para autenticar tus solicitudes de Cloud Tasks.
- Implementa el código de cliente que permite a un usuario enviar un correo.
Costes
Cloud Tasks, las funciones de Cloud Run y App Engine tienen un nivel gratuito, por lo que, si sigues el tutorial dentro del nivel gratuito de los productos en cuestión, no deberías incurrir en costes adicionales. Para obtener más información, consulta los precios.
Antes de empezar
Selecciona o crea un Google Cloud proyecto.
Inicializa una aplicación de App Engine en tu proyecto:
En la página Bienvenido a App Engine, haz clic en Crear aplicación.
Selecciona una región para tu aplicación. Esta ubicación será el parámetro
LOCATION_ID
de tus solicitudes de Cloud Tasks, así que anótala. Ten en cuenta que dos ubicaciones, llamadas "europe-west" y "us-central" en los comandos de App Engine, se denominan "europe-west1" y "us-central1" en los comandos de Cloud Tasks.Selecciona Node.js como idioma y Standard como entorno.
Si aparece la ventana emergente Habilitar facturación, selecciona tu cuenta de facturación. Si no tienes ninguna cuenta de facturación, haz clic en Crear cuenta de facturación y sigue los pasos del asistente.
En la página Empezar, haga clic en Siguiente. Te encargarás de esto más adelante.
Habilita las APIs de funciones de Cloud Run y Cloud Tasks.
Instala e inicializa gcloud CLI.
Información sobre el código
En esta sección se explica el código de la aplicación y cómo funciona.
Crear la tarea
La página de índice se publica mediante controladores en app.yaml
. Las variables necesarias para crear tareas se transfieren como variables de entorno.
Este código crea el endpoint /send-email
. Este endpoint gestiona los envíos de formularios de la página de índice y transfiere esos datos al código de creación de tareas.
Este código crea la tarea y la envía a la cola de Cloud Tasks. El código crea la tarea de la siguiente manera:
Especifica el tipo de segmentación como
HTTP Request
.Especificar el
HTTP method
que se va a usar y elURL
del objetivo.Asigna el valor
application/json
al encabezadoContent-Type
para que las aplicaciones posteriores puedan analizar la carga útil estructurada.Añadir un correo de cuenta de servicio para que Cloud Tasks pueda proporcionar credenciales al destino de la solicitud, que requiere autenticación. La cuenta de servicio se crea por separado.
Comprobando que la fecha introducida por el usuario no supere el máximo de 30 días y añadiéndola a la solicitud como campo
scheduleTime
.
Crear el correo
Este código crea la función de Cloud Run que es el destino de la solicitud de Cloud Tasks. Usa el cuerpo de la solicitud para crear un correo y enviarlo a través de la API de SendGrid.
Preparar la aplicación
Configurar SendGrid
Crea una cuenta de SendGrid.
- Puedes hacerlo manualmente a través del sitio web de SendGrid
- También puedes usar Google Cloud Launcher, que creará una cuenta por ti e integrará la facturación. Consulta Crear una cuenta de SendGrid con Cloud Launcher.
Crea una clave de API de SendGrid:
Inicia sesión en tu cuenta de SendGrid.
En el menú de navegación de la izquierda, abre Configuración y haz clic en Claves de API.
Haz clic en Crear clave de API y selecciona acceso restringido. En el encabezado Envío de correo, selecciona Acceso completo.
Copia la clave de API cuando se muestre (solo se mostrará una vez, así que asegúrate de pegarla en algún sitio para poder usarla más adelante).
Descargar el código fuente
Clona el repositorio de aplicaciones de muestra en la máquina local:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Accede al directorio que contiene el código de muestra:
cd cloud-tasks/
Desplegar la función de Cloud Run
Ve al directorio
function/
:cd function/
Despliega la función:
gcloud functions deploy sendEmail --runtime nodejs14 --trigger-http \ --no-allow-unauthenticated \ --set-env-vars SENDGRID_API_KEY=SENDGRID_API_KEY \
Sustituye
SENDGRID_API_KEY
por tu clave de API.Este comando usa marcas:
--trigger-http
para especificar el tipo de activador de Cloud Run Functions.--no-allow-unauthenticated
para especificar la invocación de la función requiere autenticación.--set-env-var
para configurar sus credenciales de SendGrid.
Define el control de acceso de la función para permitir solo a los usuarios autenticados.
Selecciona la función
sendEmail
en la interfaz de usuario de Cloud Run Functions.Si no ves la información de los permisos de
sendEmail
, haz clic en MOSTRAR PANEL DE INFORMACIÓN en la esquina superior derecha.Haz clic en el botón Añadir directores situado arriba.
Asigna el valor
allAuthenticatedUsers
a Nuevos directores.Define el rol.
- Funciones de primera generación: asigna el rol
Cloud Function Invoker
- Funciones de segunda generación: asigna el rol
Cloud Run Invoker
- Funciones de primera generación: asigna el rol
Haz clic en GUARDAR.
Crear una cola de Cloud Tasks
Crea una cola con el siguiente comando
gcloud
:gcloud tasks queues create my-queue --location=LOCATION
Sustituye
LOCATION
por la ubicación que prefieras para la cola (por ejemplo,us-west2
). Si no especificas la ubicación, gcloud CLI elegirá la predeterminada.Comprueba que se haya creado correctamente:
gcloud tasks queues describe my-queue --location=LOCATION
Sustituye
LOCATION
por la ubicación de la cola.
Creando una cuenta de servicio
La solicitud de Cloud Tasks debe proporcionar credenciales en el encabezado Authorization
para que la función de Cloud Run autentique la solicitud. Esta cuenta de servicio permite que Cloud Tasks cree y añada un token OIDC para ello.
En la interfaz de usuario de cuentas de servicio, haz clic en + CREAR CUENTA DE SERVICIO.
Añade un nombre de cuenta de servicio(nombre visible) y selecciona Crear.
Define el Rol y haz clic en Continuar.
- Funciones de primera generación: asigna el rol
Cloud Function Invoker
- Funciones de segunda generación: asigna el rol
Cloud Run Invoker
- Funciones de primera generación: asigna el rol
Selecciona Hecho.
Desplegar el endpoint y el creador de tareas en App Engine
Ve al directorio
app/
:cd ../app/
Actualiza las variables de
app.yaml
con tus valores:Para consultar tu posición en la cola, usa el siguiente comando:
gcloud tasks queues describe my-queue --location=LOCATION
Sustituye
LOCATION
por la ubicación de la cola.Para encontrar la URL de tu función, usa el siguiente comando:
gcloud functions describe sendEmail
Despliega la aplicación en el entorno estándar de App Engine con el siguiente comando:
gcloud app deploy
Abre la aplicación para enviar una postal por correo electrónico:
gcloud app browse
Limpieza
Cuando termines el tutorial, puedes eliminar los recursos que has creado para que dejen de usar cuota y generar cargos. En las siguientes secciones se explica cómo eliminar o desactivar dichos recursos.
Eliminar recursos
Puedes eliminar los recursos que has creado en Google Cloud para que no ocupen cuota y no se te facturen en el futuro. En las siguientes secciones se explica cómo eliminar o desactivar dichos recursos.
Eliminar la función de Cloud Run
Ve a la página Funciones de Cloud Run de la Google Cloud consola.
Marca las casillas situadas junto a las funciones.
Haz clic en el botón Eliminar situado en la parte superior de la página y confirma la eliminación.
Eliminar la cola de Cloud Tasks
Abre la página de colas de Cloud Tasks de la consola.
Selecciona el nombre de la cola que deseas eliminar y haz clic en Eliminar cola.
Confirma la acción.
Eliminar el proyecto
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Para ello, sigue las instrucciones que aparecen a continuación:
- 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.