注
Apache Airflow ジョブは、Apache Airflow を使用しています。
Apache Airflow には、タスクが失敗、成功、または再試行したときにメール通知とアラートを送信できる強力な機能が含まれます。 この機能は、ワークフローを監視し、発生する可能性のある問題のトラブルシューティングを行うために不可欠です。
メール通知とアラートを有効にするには、Airfow に代わってメールを送信できる簡易メール転送プロトコル (SMTP) サーバーを設定する必要があります。 SMTP は、インターネット経由でメールを送受信するための標準プロトコルです。 独自の SMTP サーバー、または Outlook、Gmail、SendGrid、Mailgun などのサードパーティのサービスを使用できます。 この記事では、Gmail を使って Apache Airflow ジョブ用に SMTP サーバーを構成する方法を見ていきます。
前提条件
SMTP サーバー: サーバーまたはサービスの SMTP ホスト、ポート、ユーザー名、パスワードが必要です。 Gmail を使用している場合は、お使いのアカウントのアプリ パスワードを作成します。
通知とアラートの送信者として使用するメール アドレス。 このメール アドレスは、SMTP ユーザー名と同じにすることもできますし、または SMTP サービスで許可されている場合は別のメール アドレスにすることもできます。
通知とアラートを受信する 1 個以上のメール アドレス。 ご自身のメール アドレス、またはチーム メンバー、利害関係者、またはクライアントのメール アドレスを指定できます。
環境変数を設定する
前提条件が揃ったら、SMTP サーバーまたはサービスを使うように Apache Airflow ジョブを構成できます。 次のフィールドにある
Airflow configurations
セクションを編集します:- AIRFLOW__SMTP__SMTP_HOST: SMTP サーバーまたはサービスのホスト名または IP アドレス。
- AIRFLOW__SMTP__SMTP_STARTTLS: SMTP サーバーまたはサービスに接続するときに TLS (トランスポート層セキュリティ) 暗号化を使用するかどうか。 SMTP サーバーまたはサービスが TLS をサポートしている場合は、この構成を True に設定し、それ以外の場合は False に設定します。
- AIRFLOW__SMTP__SMTP_SSL: SMTP サーバーまたはサービスに接続するときに SSL (Secure Sockets Layer) 暗号化を使用するかどうか。 SMTP サーバーまたはサービスで SSL が必要な場合は True、それ以外の場合は False に設定します。
- AIRFLOW__SMTP__SMTP_USER: SMTP サーバーまたはサービスのユーザー名。 通常、このユーザー名がメール アドレスとなりますが、SendGrid を使用している場合は API キーとなります。
- AIRFLOW__SMTP__SMTP_PASSWORD: SMTP サーバーまたはサービスのパスワード。 通常、このパスワードはお使いの電子メールのパスワードです。Gmail を使用している場合はアプリのパスワードとなります。
- AIRFLOW__SMTP__SMTP_PORT: SMTP サーバーまたはサービスのポート番号。 このポートは、暗号化方法と SMTP サービスに応じて、通常 25、465、または 587 となります。
- AIRFLOW__SMTP__SMTP_MAIL_FROM: 通知とアラートの送信者として使用する電子メール アドレス。 このメールは SMTP ユーザー名と同じにするとこができますが、SMTP サービスで許可されている場合は別のメールにすることができます。
Gmail を使用している場合は、次の値を参照してください。
Airflow の構成 Gmail AIRFLOW__SMTP__SMTP_HOST smtp.gmail.com AIRFLOW__SMTP__SMTP_STARTTLS 正しい AIRFLOW__SMTP__SMTP_SSL いいえ AIRFLOW__SMTP__SMTP_USER your_email@gmail.com AIRFLOW__SMTP__SMTP_PASSWORD あなたのアプリパスワード AIRFLOW__SMTP__SMTP_PORT 587 AIRFLOW__SMTP__SMTP_MAIL_FROM your_email@gmail.com
例: DAG 障害時に電子メールを送信する DAG
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from airflow.utils.email import send_emailfrom datetime import datetime
default_args = {
"owner": "airflow",
"start_date": datetime(2024, 3, 1),
"email": ["your_email@gmail.com"], # The email address that you want to receive the notifications and alerts
"email_on_failure": True,
"email_on_retry": False,
"retries": 0
}
with DAG(
"email_callback_test",
default_args=default_args,
schedule_interval=None
) as dag:
fail_task = BashOperator(
task_id="fail_task",
bash_command="cd fail",
)
fail_task
SMTP サーバーから受信した電子メールのサンプル
この電子メールには以下の情報が含まれています。
試行回数
エラー
ログ: 失敗したタスク ログにリダイレクトするリンク。
ホスト: Apache Airflow ジョブのホスト名
ホスト: Apache Airflow ジョブのホスト名
成功をマークする: 失敗した DAG 状態にリダイレクトするリンク。