E-Mail-Benachrichtigungen konfigurieren

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Auf dieser Seite wird erläutert, wie Sie SMTP-Dienste für Ihre Cloud Composer-Umgebung konfigurieren.

Hinweise

Wenn Ihre Cloud Composer-Umgebung für private IP-Adressen konfiguriert ist, muss eine Verbindung zum API-Endpunkt für Ihren externen E-Mail-Dienst (z. B. https://api.sendgrid.com oder Ihren bevorzugten SMTP-Server) bestehen.

SendGrid-E-Mail-Dienste konfigurieren

Damit Sie Benachrichtigungen erhalten, konfigurieren Sie Ihre Umgebungsvariablen so, dass E-Mails über den SendGrid-E-Mail-Dienst gesendet werden.

Bei SendGrid registrieren

Falls noch nicht geschehen, melden Sie sich in der Google Cloud Console bei SendGrid an. Klicken Sie auf „Manage On Provider“ (Auf Anbieter verwalten), um zur SendGrid-Domain zu wechseln. Klicken Sie dann auf „Settings“ (Einstellungen), um Ihren Nutzernamen abzurufen und einen API-Schlüssel zu erstellen. Als Google Cloud-Entwickler können Sie mit 12.000 kostenlosen E-Mails pro Monat starten.

Zur SendGrid Email API

Variablen konfigurieren

SendGrid verwendet zum Senden von E-Mails den API-Schlüssel und eine Absender-E-Mail-Adresse. Sie können diese Informationen mit einer der folgenden Optionen angeben:

  • (Empfohlen) Speichern Sie Werte in Secret Manager.

  • Werte in Airflow speichern.

Werte in Secret Manager speichern

So speichern Sie Werte in Secret Manager:

  1. Installieren Sie das PyPI-Paket apache-airflow-providers-sendgrid.

  2. Konfigurieren Sie Secret Manager für Ihre Umgebung. Achten Sie darauf, Berechtigungen und Airflow-Konfigurationsoptionen für das Secret-Back-End einzurichten.

  3. Überschreiben Sie die folgenden Airflow-Konfigurationsoptionen:

    Bereich Schlüssel Wert
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  4. Erstellen Sie ein Secret für die SendGrid-Verbindung mit dem Namen airflow-connections-sendgrid_default. Legen Sie den Wert des Secrets auf den Verbindungs-URI fest. Beispiel:

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

    Weitere Informationen zum Speichern von Verbindungen in Secret Manager finden Sie unter Airflow-Verbindungen verwalten.

  5. Konfigurieren Sie die E-Mail-Adresse für SendGrid:

    • (Airflow 2.2.4 und höher) Es ist nicht möglich, die E-Mail-Adresse über ein Secret einzurichten. Überschreiben Sie stattdessen die folgende Airflow-Konfigurationsoption:

      Bereich Schlüssel Wert
      email from_email Die E-Mail-Adresse „Von“, z. B. noreply@example.com.
    • (Airflow-Versionen 2.1.4 bis 2.1.3) Legen Sie die folgende Umgebungsvariable für Ihre Umgebung fest:

      Name Wert
      SENDGRID_MAIL_FROM Die E-Mail-Adresse „Von“, z. B. noreply@example.com.

Werte in Airflow speichern

  1. Überschreiben Sie die folgenden Airflow-Konfigurationsoptionen:

    Bereich Schlüssel Wert
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  2. Konfigurieren Sie die Verbindung in Airflow mit dem Namen sendgrid_default. Geben Sie den Sendgrid API-Schlüssel im Verbindungs-URI an. Beispiel:

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

    Ersetzen Sie Folgendes:

    • ENVIRONMENT_NAME: der Name Ihrer Umgebung
    • LOCATION: Region, in der sich die Umgebung befindet.
    • USERNAME: der SendGrid-Nutzername.
    • SENDGRID_API_KEY: der SendGrid API-Schlüssel.
  3. Konfigurieren Sie die E-Mail-Adresse für SendGrid:

    • (Airflow 2.2.4 und höher) Überschreiben Sie die folgende Airflow-Konfigurationsoption:

      Bereich Schlüssel Wert
      email from_email Die E-Mail-Adresse „Von“, z. B. noreply@example.com.
    • (Airflow-Versionen 2.1.4 bis 2.1.3) Legen Sie die folgende Umgebungsvariable für Ihre Umgebung fest:

      Name Wert
      SENDGRID_MAIL_FROM Die E-Mail-Adresse „Von“, z. B. noreply@example.com.

SendGrid-Konfiguration testen

So testen Sie die SendGrid-Konfiguration:

  1. Erstellen Sie einen Test-DAG, der EmailOperator verwendet. Beispiel:

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. Laden Sie den DAG in Ihre Umgebung hoch und prüfen Sie, ob die Aufgabe erfolgreich ausgeführt wurde.
  2. Melden Sie sich bei SendGrid mit Ihren SendGrid-Anmeldedaten an.
  3. Wechseln Sie in der SendGrid-Benutzeroberfläche zur Seite "Aktivität".
  4. Durchsuchen Sie die Liste nach der E-Mail. Es sollte angezeigt werden, dass SendGrid die E-Mail verarbeitet und zugestellt hat.
  5. Falls die E-Mail nicht verarbeitet und zugestellt wurde:

    • Prüfen Sie die SendGrid-Konfiguration.
    • Prüfen Sie, ob das Secret Manager-Back-End aktiviert ist. Achten Sie darauf, dass Sie zusätzliche Berechtigungen gewährt und Überschreibungen für die Airflow-Konfigurationsoptionen festgelegt haben.
    • Überprüfen Sie den Spamfilter in Ihrem E-Mail-Client.

SMTP-Dienste von Drittanbietern konfigurieren

Zum Senden von E-Mails über den SMTP-Dienst eines Drittanbieters überschreiben Sie die Airflow-Konfigurationsoption email_backend und konfigurieren Sie weitere SMTP-bezogene Parameter.

Zum Konfigurieren eines SMTP-Dienstes eines Drittanbieters überschreiben Sie die folgenden Airflow-Konfigurationsoptionen:

Bereich Schlüssel Wert
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host Der Hostname für den SMTP-Server.
smtp smtp_user Der Nutzername auf dem SMTP-Server.
smtp smtp_port Der Port für den SMTP-Server. Port 25 ist nicht verfügbar. Sie können auch andere Ports verwenden, z. B. die SMTP-Standardports 465 und 587.
smtp smtp_password Das Festlegen eines Passworts über smtp_password wird nicht unterstützt. Folgen Sie der Anleitung unter SMTP-Passwort konfigurieren, um ein SMTP-Passwort festzulegen.
smtp smtp_mail_from Die E-Mail-Adresse „Von“, z. B. noreply-composer@.
smtp smtp_starttls Attribut zur Erhöhung der Sicherheit mit True.
smtp smtp_ssl Attribut zur Erhöhung der Sicherheit mit True.

SMTP-Passwort für den SMTP-Dienst eines Drittanbieters konfigurieren

Die Beibehaltung eines SMTP-Passworts als Klartext in der Airflow-Konfigurationsdatei ist nicht empfehlenswert. Deshalb unterstützt Cloud Composer diese Methode nicht. Stattdessen können Sie ein SMTP-Passwort mit zwei anderen Methoden konfigurieren.

SMTP-Passwort mit einem Befehl abrufen

Sie können eine Konfigurationsüberschreibung verwenden, um einen Befehl anzugeben, der das SMTP-Passwort abruft. Bei der Kommunikation mit Ihrem SMTP-Dienst verwendet Airflow diesen Befehl, um den Wert des Passworts abzurufen. Geben Sie einen einzelnen Befehl ohne Bash-Operatoren wie Pipes und Weiterleitungen an.

Überschreiben Sie die folgende Airflow-Konfigurationsoption, um diese Methode zu verwenden:

Bereich Schlüssel Wert
smtp smtp_password_cmd Geben Sie einen Befehl an, der das SMTP-Passwort zurückgibt.

SMTP-Passwort mit einem in Secret Manager gespeicherten Secret abrufen

Sie können Secret Manager als Back-End für Airflow-Secrets konfigurieren.

Nachdem Sie Secret Manager für Ihre Composer-Umgebung konfiguriert haben, können Sie ein SMTP-Passwort im Secret Manager speichern:

  1. Erstellen Sie ein neues Secret:

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

    Ersetzen Sie SMTP_PASSWORD durch Ihr SMTP-Passwort.

  2. Konfigurieren Sie Airflow so, dass das SMTP-Passwort vom Secret Manager abgerufen wird. Überschreiben Sie dazu die folgende Airflow-Konfigurationsoption:

    Bereich Schlüssel Wert
    smtp smtp_password_secret smtp-password

Nächste Schritte