Configurar notificações por e-mail

Airflow gerenciado (Geração 3) | Airflow gerenciado (Geração 2) | Airflow gerenciado (Geração 1 legada)

Nesta página, explicamos como configurar serviços SMTP para o ambiente do Airflow gerenciado.

Antes de começar

  • Se o ambiente do Airflow Gerenciado estiver configurado com um IP privado, verifique se ele tem conectividade com o endpoint de API do seu serviço de e-mail externo, como https://api.sendgrid.com, ou o servidor SMTP de sua preferência.

  • Os componentes do Airflow em ambientes de IP público estabelecem conexões de saída, incluindo o envio de mensagens de e-mail, de endereços IP públicos e portas alocados automaticamente. Se você quiser que os ambientes de IP público enviem e-mails de endereços IP e portas predeterminados, você pode fazer isso conectando uma rede VPC ao seu ambiente e mudando para IP privado. Para mais informações sobre redes no Airflow gerenciado (Geração 3), consulte Alterar o tipo de rede do ambiente.

  • O programador do Airflow no Airflow gerenciado (Geração 3) oferece suporte apenas aos seguintes back-ends de e-mail personalizados:

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

    Se você configurar um back-end de e-mail personalizado diferente, essa configuração não será propagada para o programador. Como resultado, o envio de e-mails diretamente do programador faria com que ele parasse de responder e falhasse repetidamente.

    Os workers e processadores DAG do Airflow oferecem suporte a outros back-ends personalizados. Portanto, é possível enviar e-mails desses componentes. Um caso comum em que os e-mails são enviados diretamente do escalonador são os alertas de falha do DAG. Como solução alternativa, envie alertas de falha do DAG por um callback registrado em vez disso. Eles serão enviados do processador DAG. Também é possível usar outros back-ends personalizados com operadores do Airflow que enviam e-mails. Nesse caso, o e-mail será enviado de um worker do Airflow que processa a tarefa.

Configurar serviços de e-mail SendGrid

Para receber notificações, configure as variáveis de ambiente para enviar e-mails por meio do serviço SendGrid.

Inscrever-se no SendGrid

Se ainda não tiver feito isso, inscreva-se no SendGrid no Google Cloud console, clique em "Gerenciar no provedor" para acessar o domínio do SendGrid e clique em "Configurações" para recuperar seu nome de usuário e criar uma chave de API. Como um Google Cloud desenvolvedor, você começa com 12.000 e-mails sem custo financeiro por mês.

Acessar a API SendGrid Email

Configurar variáveis

O SendGrid usa a chave de API e um endereço de e-mail "De" para enviar e-mails. Você pode fornecer essas informações com uma das seguintes opções:

Armazenar valores no Secret Manager

Para armazenar valores no Secret Manager:

  1. Configure o Secret Manager para seu ambiente. Configure as permissões e as opções de configuração do Airflow para o back-end de secrets.

  2. Substitua as seguintes opções de configuração do Airflow:

    Seção Chave Valor
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  3. Crie um secret para a conexão do SendGrid chamada airflow-connections-sendgrid_default. Defina o valor do secret como o URI de conexão. Exemplo:

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

    Para mais informações sobre como armazenar conexões no Secret Manager, consulte Gerenciar conexões do Airflow.

  4. Configure o endereço de e-mail do SendGrid. Não é possível configurar o endereço de e-mail por um secret. Em vez disso, substitua a seguinte opção de configuração do Airflow:

    Seção Chave Valor
    email from_email O endereço de e-mail "De", como noreply@example.com.

Armazenar valores no Airflow

  1. Substitua as seguintes opções de configuração do Airflow:

    Seção Chave Valor
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  2. No Airflow, configure a conexão chamada sendgrid_default. Especifique a chave de API do Sendgrid no URI de conexão. Exemplo:

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

    Substitua:

    • ENVIRONMENT_NAME: o nome do ambiente;
    • LOCATION: a região em que o ambiente está localizado;
    • USERNAME: o nome de usuário do SendGrid;
    • SENDGRID_API_KEY: a chave de API do SendGrid.
  3. Configure o endereço de e-mail do SendGrid. Não é possível configurar o endereço de e-mail por um secret. Em vez disso, substitua a seguinte opção de configuração do Airflow:

    Seção Chave Valor
    email from_email O endereço de e-mail "De", como noreply@example.com.

Testar a configuração do SendGrid

Para testar a configuração do SendGrid:

  1. crie um DAG de teste que use EmailOperator; Exemplo:

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. faça o upload do DAG para o ambiente e verifique se a tarefa foi concluída;
  2. faça login no SendGrid com as respectivas credenciais;
  3. na IU do SendGrid, acesse a página "Activity";
  4. procure o e-mail na lista. Você verá que o SendGrid processou e entregou o e-mail.
  5. se o e-mail não tiver sido processado e entregue:

    • verifique a configuração do SendGrid;
    • verifique se você ativou o back-end do Secret Manager. Confira se você concedeu permissões extras e definiu substituições para as opções de configuração do Airflow.
    • verifique o filtro de spam no seu cliente de e-mail.

Configurar serviços SMTP de terceiros

Para enviar e-mails por meio de um serviço SMTP de terceiros, substitua a opção de configuração email_backend do Airflow e configure outros parâmetros relacionados a SMTP.

Para configurar um serviço SMTP de terceiros, substitua as seguintes opções de configuração do Airflow:

Seção Chave Valor
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host O nome do host do servidor SMTP.
smtp smtp_user O nome de usuário no servidor SMTP.
smtp smtp_port A porta do servidor SMTP. A porta 25 não está disponível. É possível usar outras portas, como as portas SMTP padrão 465 e 587.
smtp smtp_password Não é possível definir uma senha por smtp_password. Para definir uma senha SMTP, siga as instruções em Como configurar uma senha SMTP.
smtp smtp_mail_from O endereço de e-mail "De", como noreply-composer@.
smtp smtp_starttls Para mais segurança, defina como True.
smtp smtp_ssl Para mais segurança, defina como True.

Configurar uma senha SMTP para um serviço SMTP de terceiros

Manter uma senha SMTP em texto simples no arquivo de configuração do Airflow é uma prática de segurança ineficiente. É por isso que o Airflow gerenciado não oferece suporte a esse método. Em vez disso, é possível usar dois outros métodos para configurar uma senha SMTP.

Usar um comando para recuperar a senha SMTP

É possível usar uma substituição de configuração para especificar um comando que recebe a senha SMTP. Ao se comunicar com o serviço SMTP, o Airflow usa esse comando para receber o valor da senha. Especifique um único comando, sem operadores bash, como pipes e redirecionamentos.

Para usar esse método, substitua a seguinte opção de configuração do Airflow:

Seção Chave Valor
smtp smtp_password_cmd Especifique um comando que retorne a senha SMTP.

Como usar um secret armazenado no Secret Manager para recuperar uma senha SMTP

É possível configurar o Secret Manager como back-end de secrets do Airflow.

Depois de configurar o Secret Manager para o ambiente do Composer, é possível armazenar uma senha SMTP no Secret Manager:

  1. Crie um novo secret:

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

    Substitua SMTP_PASSWORD pela senha do SMTP.

  2. Configure o Airflow para receber a senha SMTP do Secret Manager. Para fazer isso, substitua a seguinte opção de configuração do Airflow. O Airflow anexa automaticamente o airflow-config- prefixo ao valor especificado para smtp_password_secret quando recupera o airflow-config-smtp-password secret do Secret Manager.

    Seção Chave Valor
    smtp smtp_password_secret smtp-password

A seguir