Configurar notificaciones por correo electrónico

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

En esta página se explica cómo configurar los servicios SMTP de su entorno de Cloud Composer.

Antes de empezar

  • Si tu entorno de Cloud Composer está configurado para usar una IP privada, asegúrate de que tenga conectividad con el endpoint de la API de tu servicio de correo externo (como https://api.sendgrid.com o tu servidor SMTP preferido).

  • Los componentes de Airflow en entornos de IP pública establecen conexiones salientes, incluido el envío de mensajes de correo, desde direcciones IP públicas y puertos asignados automáticamente. Si quieres que tus entornos de IP pública envíen correos desde direcciones IP y puertos predeterminados, puedes hacerlo conectando una red de VPC a tu entorno y cambiándolo a IP privada. Para obtener más información sobre las redes en Cloud Composer 3, consulta Cambiar el tipo de red del entorno.

  • El programador de Airflow de Cloud Composer 3 solo admite los siguientes backends de correo electrónico personalizados:

    • airflow.providers.sendgrid.utils.emailer.send_email
    • airflow.utils.email.send_email_smtp

    Si configuras otro backend de correo electrónico personalizado, esta configuración no se propagará al programador. Por lo tanto, si se enviaran correos directamente desde el programador, este dejaría de responder y fallaría repetidamente.

    Los workers de Airflow y los procesadores de DAG admiten otros back-ends personalizados, por lo que puedes enviar correos desde estos componentes. Un caso habitual en el que el correo se envía directamente desde el programador son las alertas por correo sobre fallos de DAG. Como solución alternativa, puedes enviar alertas de fallo de DAG a través de una retrollamada registrada. Se enviarán desde el procesador de DAG. También puedes usar otros back-ends personalizados con operadores de Airflow que envíen correos. En este caso, el correo se enviará desde un trabajador de Airflow que procese la tarea.

Configurar los servicios de correo de SendGrid

Para recibir notificaciones, configura las variables de entorno para enviar correos a través del servicio de correo SendGrid.

Registrarse en SendGrid

Si aún no lo has hecho, regístrate en SendGrid en la Google Cloud consola, haz clic en Manage On Provider para ir al dominio de SendGrid y, a continuación, en Settings para obtener tu nombre de usuario y crear una clave de API. Como desarrollador de Google Cloud , puedes empezar con 12.000 correos gratuitos al mes.

Ir a la API Email de SendGrid

Configurar variables

SendGrid usa la clave de API y una dirección de correo electrónico De para enviar correos. Puede proporcionar esta información con una de las siguientes opciones:

Almacenar valores en Secret Manager

Para almacenar valores en Secret Manager, sigue estos pasos:

  1. Configura Secret Manager para tu entorno. Asegúrate de configurar los permisos y las opciones de configuración de Airflow para el backend de secretos.

  2. Anula las siguientes opciones de configuración de Airflow:

    Sección Clave Valor
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  3. Crea un secreto para la conexión de SendGrid llamada airflow-connections-sendgrid_default. Asigna el valor del secreto al URI de conexión. Por ejemplo:

    sendgrid://<username>:<sendgrid_api_key>@smtp.sendgrid.net:587
    

    Para obtener más información sobre cómo almacenar conexiones en Secret Manager, consulta el artículo Gestionar conexiones de Airflow.

  4. Configura la dirección de correo de SendGrid. No es posible configurar la dirección de correo a través de un secreto. En su lugar, anula la siguiente opción de configuración de Airflow:

    Sección Clave Valor
    email from_email La dirección de correo electrónico del remitente, como noreply@example.com.

Almacenar valores en Airflow

  1. Anula las siguientes opciones de configuración de Airflow:

    Sección Clave Valor
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  2. En Airflow, configura la conexión llamada sendgrid_default. Especifica la clave de API de Sendgrid en el URI de conexión. Por ejemplo:

    gcloud composer environments run ENVIRONMENT_NAME \
      --location LOCATION \
      connections add -- \
      --conn-uri "sendgrid://USERNAME:SENDGRID_API_KEY@smtp.sendgrid.net:587" \
      sendgrid_default
    

    Haz los cambios siguientes:

    • ENVIRONMENT_NAME: el nombre de tu entorno.
    • LOCATION: la región en la que se encuentra el entorno.
    • USERNAME: nombre de usuario de SendGrid.
    • SENDGRID_API_KEY: la clave de API de SendGrid.
  3. Configura la dirección de correo de SendGrid. No es posible configurar la dirección de correo a través de un secreto. En su lugar, anula la siguiente opción de configuración de Airflow:

    Sección Clave Valor
    email from_email La dirección de correo electrónico del remitente, como noreply@example.com.

Probar la configuración de SendGrid

Para probar la configuración de SendGrid, sigue estos pasos:

  1. Crea un DAG de prueba que use EmailOperator. Por ejemplo:

import datetime

import airflow
from airflow.operators.email import EmailOperator


with airflow.DAG(
    "composer_sample_sendgrid",
    start_date=datetime.datetime(2022, 1, 1),
) as dag:
    task_email = EmailOperator(
        task_id="send-email",
        conn_id="sendgrid_default",
        # You can specify more than one recipient with a list.
        to="user@example.com",
        subject="EmailOperator test for SendGrid",
        html_content="This is a test message sent through SendGrid.",
        dag=dag,
    )
  1. Sube el DAG a tu entorno y comprueba que la tarea se completa correctamente.
  2. Inicia sesión en SendGrid con tus credenciales de SendGrid.
  3. En la interfaz de usuario de SendGrid, ve a la página Activity (Actividad).
  4. Busca el correo en la lista. Deberías ver que SendGrid ha procesado y enviado el correo.
  5. Si el correo no se procesa ni se entrega:

    • Comprueba tu configuración de SendGrid.
    • Verifica que hayas habilitado el backend de Secret Manager. Asegúrate de haber concedido permisos adicionales y de haber definido anulaciones para las opciones de configuración de Airflow.
    • Comprueba el filtro de spam de tu cliente de correo.

Configurar servicios SMTP de terceros

Para enviar correos a través de un servicio SMTP de terceros, anula la opción de configuración de email_backend Airflow y configura otros parámetros relacionados con SMTP.

Para configurar un servicio SMTP de terceros, anula las siguientes opciones de configuración de Airflow:

Sección Clave Valor
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host El nombre de host del servidor SMTP.
smtp smtp_user Nombre de usuario del servidor SMTP.
smtp smtp_port Puerto del servidor SMTP. El puerto 25 no está disponible. Puedes usar otros puertos, como los puertos SMTP estándar 465 y 587.
smtp smtp_password No se puede definir una contraseña mediante smtp_password. Para definir una contraseña SMTP, sigue las instrucciones que se indican en Configurar una contraseña SMTP.
smtp smtp_mail_from La dirección de correo electrónico del remitente, como noreply-composer@.
smtp smtp_starttls Para aumentar la seguridad, selecciona True.
smtp smtp_ssl Para aumentar la seguridad, selecciona True.

Configurar una contraseña SMTP para un servicio SMTP de terceros

Mantener una contraseña SMTP en texto sin formato en el archivo de configuración de Airflow es una práctica de seguridad inadecuada. Por eso, Cloud Composer no admite este método. En su lugar, puedes usar otros dos métodos para configurar una contraseña SMTP.

Usar un comando para obtener la contraseña de SMTP

Puede usar una anulación de configuración para especificar un comando que obtenga la contraseña SMTP. Cuando se comunica con tu servicio SMTP, Airflow usa este comando para obtener el valor de la contraseña. Especifica un solo comando, sin operadores de Bash, como tuberías y redirecciones.

Para usar este método, anula la siguiente opción de configuración de Airflow:

Sección Clave Valor
smtp smtp_password_cmd Especifica un comando que devuelva la contraseña SMTP.

Usar un secreto almacenado en Secret Manager para obtener una contraseña SMTP

Puedes configurar Secret Manager como backend de secretos de Airflow.

Una vez que haya configurado Secret Manager para su entorno de Composer, podrá almacenar una contraseña SMTP en Secret Manager:

  1. Para crear un secreto, sigue estos pasos:

    echo -n "SMTP_PASSWORD" | gcloud beta secrets create \
      airflow-config-smtp-password \
      --data-file=- \
      --replication-policy=automatic
    

    Sustituye SMTP_PASSWORD por tu contraseña de SMTP.

  2. Configura Airflow para obtener la contraseña SMTP de Secret Manager. Para ello, anula la siguiente opción de configuración de Airflow:

    Sección Clave Valor
    smtp smtp_password_secret smtp-password

Siguientes pasos