Configurar notificações por e-mail

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

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 for configurado para IP privado, verifique se ele tem conectividade ao endpoint de API do seu serviço de e-mail externo (como https://api.sendgrid.com ou o servidor SMTP de sua preferência).

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.

Inscreva-se no SendGrid

Se ainda não tiver feito isso, inscreva-se no SendGrid no console do Google Cloud, 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. 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 da API e um endereço de e-mail de origem para enviar e-mails. É possível fornecer essas informações com uma das seguintes opções:

  • (Recomendado) Armazene valores no Secret Manager.

  • Armazenar valores no Airflow.

Armazenar valores no Secret Manager

Para armazenar valores no Secret Manager:

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

  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 chamado airflow-connections-sendgrid_default: Defina o valor do secret como 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 para o SendGrid:

    • (Airflow 2.2.4 e versões posteriores) Não é possível configurar o usando um secret. Em vez disso, modifique a seguinte opção de configuração do Airflow:

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

      Nome Valor
      SENDGRID_MAIL_FROM O endereço de e-mail do 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 chamado 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 mais recentes) 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.
    • (versões do Airflow 2.1.4 a 2.1.3) Defina a seguinte variável de ambiente para seu ambiente:

      Nome Valor
      SENDGRID_MAIL_FROM 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 upload do DAG para seu ambiente e verifique se que a tarefa seja 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ê vai notar 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. Marca verifique se você concedeu permissões extras e definiu substituições para o Airflow de configuração do Terraform.
    • 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 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 pipes e redirecionamentos.

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

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 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