Configurar notificações por e-mail

Cloud Composer 1 | Cloud Composer 2

Nesta página, você aprenderá a configurar serviços SMTP no ambiente do Cloud Composer.

Antes de começar

Se o ambiente do Cloud Composer estiver configurado para IP privado, verifique se ele tem conectividade com o endpoint de API do serviço de e-mail externo (como https://api.sendgrid.com ou o servidor SMTP preferido).

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

Inscreva-se com o SendGrid no console do Google Cloud, caso ainda não tenha feito isso, clique em "Manage On Provider" para acessar o domínio do SendGrid e, em seguida, em "Settings" para recuperar seu nome de usuário e criar uma chave de API. Sendo um desenvolvedor do Google Cloud, é possível começar com 12.000 e-mails gratuitos por mês.

Acessar a API SendGrid Email

Configurar variáveis

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

  • (Recomendado) Armazenar valores no Secret Manager.

  • Armazenar valores no Airflow.

Armazenar valores no Secret Manager

Para armazenar valores no Secret Manager:

  1. Instale o pacote PyPI apache-airflow-providers-sendgrid.

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

  3. 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
  4. Crie um secret para a conexão do SendGrid chamado 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.

  5. Configure o endereço de e-mail para o SendGrid:

    • (Airflow 2.2.4 e versões posteriores) Não é possível configurar o endereço de e-mail por meio de 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 no remetente, como noreply@example.com.
    • (versões 2.1.4 a 2.1.3 do Airflow) Defina a seguinte variável de ambiente para o ambiente:

      Nome Valor
      SENDGRID_MAIL_FROM O endereço de e-mail no remetente, 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 da API 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 da API SendGrid.
  3. Configure o endereço de e-mail para o SendGrid:

    • (Airflow 2.2.4 e versões posteriores) Substitua a seguinte opção de configuração do Airflow:

      Seção Chave Valor
      email from_email O endereço de e-mail no remetente, como noreply@example.com.
    • (versões 2.1.4 a 2.1.3 do Airflow) Defina a seguinte variável de ambiente para o ambiente:

      Nome Valor
      SENDGRID_MAIL_FROM O endereço de e-mail no remetente, 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 upload do DAG no ambiente e verifique se a tarefa foi bem-sucedida.
  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. Verifique 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 no remetente, 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 Cloud Composer não é compatível com esse método. Em vez disso, é possível usar dois outros métodos para configurar uma senha SMTP.

Usar um comando para recuperar uma 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 barras 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 Gerenciador de secrets para recuperar uma senha SMTP

É possível configurar o Secret Manager como seu 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:

    Seção Chave Valor
    smtp smtp_password_secret smtp-password

A seguir