メール通知を構成する

Cloud Composer 1 | Cloud Composer 2

このページでは、Cloud Composer 環境の SMTP サービスを構成する方法について説明します。

始める前に

Cloud Composer 環境がプライベート IP 用に構成されている場合は、外部メールサービス(https://api.sendgrid.com、任意の SMTP サーバーなど)用の API エンドポイントに接続できることを確認してください。

SendGrid メールサービスを構成する

通知を受け取るには、SendGrid メールサービスを介してメールを送信するように環境変数を構成します。

SendGrid に登録する

まだ登録していない場合は、Google Cloud コンソールで SendGrid に登録します。[プロバイダで管理] をクリックして SendGrid ドメインに移動し、[設定] をクリックしてユーザー名を取得して API キーを作成します。Google Cloud デベロッパーは、1 か月あたり 12,000 件の無料メールを利用できます。

SendGrid Email API に移動

変数の設定

SendGrid では、API キーと From のメールアドレスを使用してメールを送信します。この情報は、次のいずれかのオプションで指定できます。

  • (推奨)Secret Manager に値を保存します。

  • 値を Airflow に保存します。

Secret Manager に値を保存する

Secret Manager に値を保存するには:

  1. apache-airflow-providers-sendgrid PyPI パッケージをインストールします。

  2. 環境に Secret Manager を構成するシークレットのバックエンドの権限と Airflow 構成オプションを設定してください。

  3. 次の Airflow 構成オプションをオーバーライドします。

    セクション キー
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  4. airflow-connections-sendgrid_default という名前の SendGrid 接続用のシークレットを作成します。シークレットの値を接続 URI に設定します。次に例を示します。

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

    Secret Manager での接続の保存の詳細については、Airflow 接続を管理するをご覧ください。

  5. SendGrid のメールアドレスを構成します。

    • (Airflow 2.2.4 以降のバージョン)シークレットを使用してメールアドレスを設定することはできません。代わりに、次の Airflow 構成オプションをオーバーライドします。

      セクション キー
      email from_email From: に指定するメールアドレス(noreply@example.com など)。
    • (Airflow バージョン 2.1.4 ~ 2.1.3)環境に次の環境変数を設定します

      名前
      SENDGRID_MAIL_FROM From: に指定するメールアドレス(noreply@example.com など)。

値を Airflow に保存する

  1. 次の Airflow 構成オプションをオーバーライドします。

    セクション キー
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  2. Airflow で、sendgrid_default という名前の接続を構成します。接続 URI で SendGrid API キーを指定します。次に例を示します。

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

    以下を置き換えます。

    • ENVIRONMENT_NAME: 環境の名前。
    • LOCATION: 環境が配置されているリージョン。
    • USERNAME: SendGrid ユーザー名。
    • SENDGRID_API_KEY: SendGrid API キー。
  3. SendGrid のメールアドレスを構成します。

    • (Airflow 2.2.4 以降のバージョン)次の Airflow 構成のオプションをオーバーライドします。

      セクション キー
      email from_email From: に指定するメールアドレス(noreply@example.com など)。
    • (Airflow バージョン 2.1.4 ~ 2.1.3)環境に次の環境変数を設定します

      名前
      SENDGRID_MAIL_FROM From: に指定するメールアドレス(noreply@example.com など)。

SendGrid 構成をテストする

SendGrid 構成をテストする手順は次のとおりです。

  1. EmailOperator を使用するテスト DAG を作成します。次に例を示します。

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. 環境に DAG をアップロードし、EmailOperator タスクが成功することを確認します。
  2. SendGrid の認証情報を使用して SendGrid にログインします。
  3. SendGrid UI で、[Activity] ページに移動します。
  4. メールのリストを検索します。SendGrid がメールを処理して配信したことを確認します。
  5. メールが処理、配信されていない場合は、次の手順を行います。

    • SendGrid の構成を確認します。
    • Secret Manager バックエンドが有効になっていることを確認します。追加の権限を付与し、Airflow 構成オプションのオーバーライドを設定してください。
    • メール クライアントのスパムフィルタを確認します。

サードパーティの SMTP サービスを構成する

サードパーティの SMTP サービスを介してメールを送信するには、email_backend Airflow 構成オプションをオーバーライドして他の SMTP 関連パラメータを構成します。

サードパーティの SMTP サービスを構成するには、次の Airflow 構成オプションをオーバーライドします。

セクション キー
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host SMTP サーバーのホスト名。
smtp smtp_user SMTP サーバーのユーザー名。
smtp smtp_port SMTP サーバーのポート。ポート 25 は使用できません。標準の SMTP ポート 465 や 587 など、他のポートを使用することもできます。
smtp smtp_password smtp_password を介したパスワードの設定はサポートされていません。SMTP パスワードを設定するには、SMTP パスワードを構成するの手順に従ってください。
smtp smtp_mail_from From: に指定するメールアドレス(noreply-composer@ など)。
smtp smtp_starttls セキュリティを強化するには、True に設定します。
smtp smtp_ssl セキュリティを強化するには、True に設定します。

サードパーティの SMTP サービスの SMTP パスワードを構成する

Airflow 構成ファイルに書式なしテキストで SMTP パスワードを保存することは、セキュリティ対策として不適切です。そのため、Cloud Composer ではこのメソッドをサポートしていません。代わりに、他の 2 つの方法を使用して SMTP パスワードを構成できます。

コマンドを使って SMTP パスワードを取得する

構成のオーバーライドを使用して、SMTP パスワードを取得するコマンドを指定できます。SMTP サービスと通信するとき、Airflow はこのコマンドを使用してパスワードの値を取得します。パイプやリダイレクトなどの bash の演算子を使用せずに、1 つのコマンドを指定します。

この方法を使用するには、次の Airflow 構成オプションをオーバーライドします。

セクション キー
smtp smtp_password_cmd SMTP パスワードを返すコマンドを指定します。

Secret Manager に保存されているシークレットを使用して SMTP パスワードを取得する

Airflow シークレット バックエンドとして Secret Manager を構成できます。

Composer 環境の Secret Manager を構成すると、SMTP パスワードを Secret Manager に保存できます。

  1. 新しいシークレットを作成します。

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

    SMTP_PASSWORD を SMTP パスワードに置き換えます。

  2. Secret Manager から SMTP パスワードを取得するように Airflow を構成します。これを行うには、次の Airflow 構成オプションをオーバーライドします。

    セクション キー
    smtp smtp_password_secret smtp-password

次のステップ