En este instructivo, se muestra cómo usar Cloud Tasks dentro de una aplicación de Google App Engine para activar una función de Cloud Functions y enviar un correo electrónico programado.
Objetivos
- Comprender el código en cada uno de los componentes
- Crear una cuenta de SendGrid
- Descargue el código fuente
- Implementa una función de Cloud para recibir solicitudes de Cloud Tasks y enviar un correo electrónico 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 que un usuario envíe un correo electrónico.
Costos
Cloud Tasks, Cloud Functions y App Engine tienen un nivel gratuito, por lo que, siempre que ejecutes el instructivo dentro del nivel gratuito de los productos determinados, no deberías generar costos adicionales. Para obtener más información, consulta Precios.
Antes de comenzar
Selecciona o crea un proyecto de GCP.
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 servirá como parámetro
LOCATION_ID
para tus solicitudes de Cloud Tasks, así que anótala. Ten en cuenta que hay dos ubicaciones, llamadas europe-west y us-central en los comandos de App Engine, que se llaman europe-west1 y us-central1 en los comandos de Cloud Tasks.Selecciona Node.js para el lenguaje y Estándar para el entorno.
Si aparece la ventana emergente Habilitar facturación, selecciona tu cuenta de facturación. Si no tienes una cuenta de facturación, haz clic en Crear cuenta de facturación y sigue los pasos del asistente.
En la página Comenzar, haz clic en Siguiente. Abordarás esto más adelante.
Habilita las API de Cloud Functions y Cloud Tasks.
Instala e inicializa la CLI de
gcloud
.
Comprende el código
En esta sección, se explica el código de la app y su funcionamiento.
Crea la tarea
La página de índice se entrega mediante controladores en app.yaml
. Las variables necesarias para la creación de la tarea se pasan como variables de entorno.
Este código crea el extremo /send-email
. Este extremo controla los envíos de formularios desde la página de índice y pasa esos datos al código de creación de la tarea.
Este código en realidad crea la tarea y la envía a la cola de Cloud Tasks. El código compila la tarea de la siguiente manera:
Especifica el tipo de destino como
HTTP Request
.Especifica el
HTTP method
que se usará y elURL
del destino.Configurar el encabezado
Content-Type
comoapplication/json
para que las aplicaciones descendentes puedan analizar la carga útil estructuradaAgregar un correo electrónico de la cuenta de servicio para que Cloud Tasks pueda proporcionar credenciales al destino de la solicitud, lo que requiere autenticación La cuenta de servicio se crea por separado.
Verifica que la entrada del usuario para la fecha esté dentro del máximo de 30 días y agrega a la solicitud como campo
scheduleTime
.
Crea el correo electrónico
Este código crea la función de Cloud Functions que es el destino de la solicitud de Cloud Task. Usa el cuerpo de la solicitud para construir un correo electrónico y enviarlo a través de la API de SendGrid.
Prepara la aplicación
Configura SendGrid
Crear una cuenta de SendGrid
- Puedes hacerlo de manera manual a través del sitio web de SendGrid.
- o puedes usar Google Cloud Launcher, que creará una cuenta para ti e integrará la facturación. Consulta Crea una cuenta de SendGrid con Cloud Launcher.
Crea una clave de API de SendGrid:
Accede a tu cuenta de SendGrid.
En la barra de navegación izquierda, abre Configuración y haz clic en Claves de API.
Haz clic en Crear clave de API y selecciona el acceso restringido. En el encabezado Enviar correo electrónico, selecciona Acceso completo.
Copia la clave de API cuando se muestre (solo verás esto una vez, asegúrate de pegarla en algún lugar para poder usarla más adelante).
Descarga el código fuente
Clona el repositorio de la app de muestra en tu máquina local:
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Ve al directorio que contiene el código de muestra:
cd cloud-tasks/
Implementa la función de Cloud Functions
Navega al directorio
function/
.cd function/
Para implementar la función, reemplaza
sendgrid_api_key
por la clave:gcloud functions deploy sendEmail --runtime nodejs14 --trigger-http --set-env-vars SENDGRID_API_KEY=sendgrid_api_key
En este comando, se usan marcas:
--trigger-http
para especificar el tipo de activador de Cloud Functions--set-env-var
para configurar tus credenciales de SendGrid
Configura el control de acceso para que la función solo permita usuarios autenticados.
Selecciona la función
sendEmail
en la IU de Cloud Functions.Si no ves la información de permisos para
sendEmail
, haz clic en MOSTRAR PANEL DE INFORMACIÓN en la esquina superior derecha.En el encabezado Invocador de Cloud Functions, borra el
allUsers
principal.Haga clic en el botón Agregar principales que se encuentra más arriba.
Establece Nuevos principales en
allAuthenticatedUsers
.Establece la función en
Cloud Function Invoker
.Haz clic en GUARDAR.
Crea una cola de Cloud Tasks
Crea una cola con el siguiente comando de
gcloud
:gcloud tasks queues create my-queue
Verifica que se haya creado correctamente:
gcloud tasks queues describe my-queue
Crea una cuenta de servicio
La solicitud de Cloud Tasks debe proporcionar credenciales en el encabezado Authorization
para que Cloud Function autentique la solicitud. Esta cuenta de servicio permite que Cloud Tasks cree y agregue un token OIDC para ese fin.
En IAM y administración | IU de cuentas de servicio, haz clic en + CREAR CUENTA DE SERVICIO.
Agrega un nombre de cuenta de servicio (nombre visible descriptivo) y selecciona Crear.
Selecciona la función Invocador de Cloud Functions y haz clic en Continuar.
Seleccione Listo.
Implementa el extremo y el creador de tareas en App Engine
Navega al directorio
app/
:cd ../app/
Actualiza las variables de
app.yaml
con tus valores:Para encontrar la ubicación de tu cola, usa el siguiente comando:
gcloud tasks queues describe my-queue
Para encontrar la URL de tu función, usa el siguiente comando:
gcloud functions describe sendEmail
Implemente la aplicación en el entorno estándar de App Engine mediante el siguiente comando:
gcloud app deploy
Abre la aplicación para enviar una postal como un correo electrónico:
gcloud app browse
Limpia
Una vez que completes el instructivo, puedes limpiar los recursos que creaste para que dejen de usar la cuota y generar cargos. En las siguientes secciones, se describe cómo borrar o desactivar estos recursos.
Borrar recursos
Una vez que completes el instructivo, puedes limpiar los recursos que creaste en GCP para que no consuman tu cuota y no se facturen en el futuro. En las secciones siguientes, se describe cómo borrar o desactivar estos recursos.
Borra la función de Cloud Functions
Vaya a la página Cloud Functions en Cloud Console.
Haz clic en las casillas de verificación junto a tus funciones.
Haz clic en el botón Borrar en la parte superior de la página y confirma la eliminación.
Borra la cola de Cloud Task
Abre la página de listas de tareas en cola de Cloud Tasks en Console.
Selecciona la cola que deseas borrar y haz clic en Borrar cola.
Confirma la acción.
Borra el proyecto
La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.
Para borrar el proyecto, sigue estos pasos:
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
¿Qué sigue?
- Obtén más información sobre cómo crear tareas de destino HTTP.
- Obtén más información sobre cómo configurar tu cola de Cloud Tasks.