Configure as notificações por email

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Esta página explica como configurar os serviços SMTP para o seu ambiente do Cloud Composer.

Antes de começar

  • Se o seu ambiente do Cloud Composer estiver configurado para IP privado, certifique-se de que tem conetividade com o ponto final da API para o seu serviço de email externo (como o https://api.sendgrid.com ou o seu servidor SMTP preferido).

  • Os componentes do Airflow em ambientes de IP público estabelecem ligações de saída, incluindo o envio de mensagens de email, a partir de portas e endereços IP públicos atribuídos automaticamente. Se quiser que os seus ambientes de IP público enviem emails a partir de endereços IP e portas predeterminados, pode fazê-lo associando uma rede VPC ao seu ambiente e mudando-o para IP privado. Para mais informações sobre as redes no Cloud Composer 3, consulte o artigo Altere o tipo de rede do ambiente.

  • O agendador do Airflow no Cloud Composer 3 suporta apenas os seguintes backends de email personalizados:

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

    Se configurar um back-end de email personalizado diferente, esta configuração não é propagada para o agendador. Como resultado, o envio de emails diretamente do programador faria com que este deixasse de responder e falhasse repetidamente.

    Os trabalhadores do Airflow e os processadores DAG suportam outros backends personalizados, pelo que pode enviar emails a partir destes componentes. Um caso comum em que o email é enviado diretamente do programador são os alertas por email sobre falhas de DAG. Como solução alternativa, pode enviar alertas de falha de DAG através de um callback registado. São enviados pelo processador DAG. Também pode usar outros backends personalizados com operadores do Airflow que enviam emails. Neste caso, o email é enviado por um worker do Airflow que processa a tarefa.

Configure os serviços de email do SendGrid

Para receber notificações, configure as variáveis de ambiente para enviar emails através do serviço de email SendGrid.

Inscreva-se no SendGrid

Se ainda não o fez, inscreva-se no SendGrid na Google Cloud consola, clique em Gerir no fornecedor para aceder ao domínio do SendGrid e clique em Definições para obter o seu nome de utilizador e criar uma chave de API. Enquanto Google Cloud programador, pode começar com 12 000 emails gratuitos por mês.

Aceda à API SendGrid Email

Configure variáveis

O SendGrid usa a chave da API e um endereço de email De para enviar correio. Pode fornecer estas informações com uma das seguintes opções:

Armazene valores no Secret Manager

Para armazenar valores no Secret Manager:

  1. Configure o Secret Manager para o seu ambiente. Certifique-se de que configura as autorizaçõ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:

    Secção Chave Valor
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  3. Crie um segredo para a ligação do SendGrid com o nome airflow-connections-sendgrid_default. Defina o valor do segredo como o URI de ligação. Por exemplo:

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

    Para mais informações sobre o armazenamento de associações no Secret Manager, consulte o artigo Faça a gestão das associações do Airflow.

  4. Configure o endereço de email para o SendGrid. Não é possível configurar o endereço de email através de um segredo. Em alternativa, substitua a seguinte opção de configuração do Airflow:

    Secção Chave Valor
    email from_email O endereço de email De, como noreply@example.com.

Armazene valores no Airflow

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

    Secção Chave Valor
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  2. No Airflow, configure a associação denominada sendgrid_default. Especifique a chave da API Sendgrid no URI de ligação. Por 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 o seguinte:

    • ENVIRONMENT_NAME: o nome do seu ambiente.
    • LOCATION: a região onde o ambiente está localizado.
    • USERNAME: o nome de utilizador do SendGrid.
    • SENDGRID_API_KEY: a chave da API SendGrid.
  3. Configure o endereço de email para o SendGrid. Não é possível configurar o endereço de email através de um segredo. Em alternativa, substitua a seguinte opção de configuração do Airflow:

    Secção Chave Valor
    email from_email O endereço de email De, como noreply@example.com.

Teste a configuração do SendGrid

Para testar a configuração do SendGrid:

  1. Crie um DAG de teste que use o EmailOperator. Por 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. Carregue o DAG para o seu ambiente e verifique se a tarefa é concluída com êxito.
  2. Inicie sessão no SendGrid com as suas credenciais do SendGrid.
  3. Na IU do SendGrid, aceda à página Atividade.
  4. Pesquise o email na lista. Deverá ver que o SendGrid processou e entregou o email.
  5. Se o email não for processado nem entregue:

    • Verifique a configuração do SendGrid.
    • Confirme se ativou o back-end do Gestor Secreto. Certifique-se de que concedeu autorizações adicionais e definiu substituições para as opções de configuração do Airflow.
    • Verifique o filtro de spam no seu cliente de email.

Configure serviços SMTP de terceiros

Para enviar emails através de um serviço SMTP de terceiros, substitua a opção de configuração do email_backend Airflow e configure outros parâmetros relacionados com o SMTP.

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

Secção Chave Valor
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host O nome do anfitrião do servidor SMTP.
smtp smtp_user O nome de utilizador no servidor SMTP.
smtp smtp_port A porta do servidor SMTP. A porta 25 não está disponível. Pode usar outras portas, como as portas SMTP padrão 465 e 587.
smtp smtp_password A definição de uma palavra-passe através de smtp_password não é suportada. Para definir uma palavra-passe SMTP, siga as instruções fornecidas em Configurar uma palavra-passe SMTP.
smtp smtp_mail_from O endereço de email De, como noreply-composer@.
smtp smtp_starttls Para maior segurança, defina a opção como True.
smtp smtp_ssl Para maior segurança, defina a opção como True.

Configure uma palavra-passe SMTP para um serviço SMTP de terceiros

Manter uma palavra-passe SMTP em texto simples no ficheiro de configuração do Airflow é uma má prática de segurança. É por isso que o Cloud Composer não suporta este método. Em alternativa, pode usar outros dois métodos para configurar uma palavra-passe SMTP.

Usar um comando para obter a palavra-passe SMTP

Pode usar uma substituição de configuração para especificar um comando que obtenha a palavra-passe SMTP. Quando comunica com o seu serviço SMTP, o Airflow usa este comando para obter o valor da palavra-passe. Especifique um único comando, sem operadores bash, como pipes e redirecionamentos.

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

Secção Chave Valor
smtp smtp_password_cmd Especifique um comando que devolva a palavra-passe SMTP.

Usar um segredo armazenado no Secret Manager para obter uma palavra-passe SMTP

Pode configurar o Secret Manager como o backend de segredos do Airflow.

Depois de configurar o Secret Manager para o seu ambiente do Composer, pode armazenar uma palavra-passe SMTP no Secret Manager:

  1. Crie um novo segredo:

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

    Substitua SMTP_PASSWORD pela sua palavra-passe SMTP.

  2. Configure o Airflow para obter a palavra-passe SMTP do Secret Manager. Para tal, substitua a seguinte opção de configuração do Airflow:

    Secção Chave Valor
    smtp smtp_password_secret smtp-password

O que se segue?