設定電子郵件通知

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本頁說明如何為 Cloud Composer 環境設定 SMTP 服務。

事前準備

  • 如果 Cloud Composer 環境已設定私人 IP,請確認環境已連線至外部電子郵件服務的 API 端點 (例如 https://api.sendgrid.com 或偏好的 SMTP 伺服器)。

  • 公開 IP 環境中的 Airflow 元件會建立傳出連線,包括從自動分配的公開 IP 位址和通訊埠傳送電子郵件。如要讓公開 IP 環境透過預先決定的 IP 位址和連接埠傳送電子郵件,可以將虛擬私有雲網路連線至環境,然後切換至私人 IP。如要進一步瞭解 Cloud Composer 3 中的網路,請參閱「變更環境網路類型」。

  • Cloud Composer 3 中的 Airflow 排程器僅支援下列自訂電子郵件後端

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

    如果您設定其他自訂電子郵件後端,這項設定不會傳播至排程器。因此,如果直接從排程器傳送電子郵件,排程器會停止回應並重複失敗。

    Airflow 工作站和 DAG 處理器支援其他自訂後端,因此您可以從這些元件傳送電子郵件。如果排程器直接傳送電子郵件,通常是 DAG 失敗的電子郵件快訊。如要解決這個問題,可以改為透過已註冊的回呼函式傳送 DAG 失敗警報。這些訊息會從 DAG 處理器傳送。您也可以搭配使用其他自訂後端與 Airflow 運算子,傳送電子郵件。在這種情況下,電子郵件會由處理工作的 Airflow 工作站傳送。

設定 SendGrid 電子郵件服務

如要接收通知,請設定環境變數,透過 SendGrid 電子郵件服務傳送電子郵件。

註冊 SendGrid

如果您尚未註冊 SendGrid,請在 Google Cloud 主控台中註冊,按一下「Manage On Provider」前往 SendGrid 網域,然後按一下「Settings」擷取使用者名稱並建立 API 金鑰。 Google Cloud 開發人員一開始可享有每月 12,000 封免費電子郵件的配額。

前往 SendGrid Email API

設定變數

SendGrid 會使用 API 金鑰和「寄件者」電子郵件地址傳送郵件。你可以透過下列任一方式提供這項資訊:

在 Secret Manager 中儲存值

如要在 Secret Manager 中儲存值,請按照下列步驟操作:

  1. 為環境設定 Secret Manager。請務必為密鑰後端設定權限和 Airflow 設定選項。

  2. 覆寫下列 Airflow 設定選項:

    區段
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  3. 為名為 airflow-connections-sendgrid_default 的 SendGrid 連線建立密鑰。將密鑰的值設為連線 URI。例如:

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

    如要進一步瞭解如何在 Secret Manager 中儲存連線,請參閱「管理 Airflow 連線」。

  4. 設定 SendGrid 的電子郵件地址。無法透過密鑰設定電子郵件地址。請覆寫下列 Airflow 設定選項:

    區段
    email from_email 「寄件者」電子郵件地址,例如 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 設定選項:

    區段
    email from_email 「寄件者」電子郵件地址,例如 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 上傳到環境,並檢查工作是否成功。
  2. 使用您的 SendGrid 憑證登入 SendGrid。
  3. 在 SendGrid UI 中,前往「Activity」頁面。
  4. 在清單中搜尋電子郵件。您會看到 SendGrid 處理並發送了電子郵件。
  5. 如果 SendGrid 未處理及發送電子郵件,請執行下列操作:

    • 檢查 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 「寄件者」電子郵件地址,例如 noreply-composer@
smtp smtp_starttls 為了提高安全性,請設為 True
smtp smtp_ssl 為了提高安全性,請設為 True

設定第三方 SMTP 服務的 SMTP 密碼

在 Airflow 設定檔中以純文字形式保留 SMTP 密碼,是糟糕的安全做法。因此 Cloud Composer 不支援這個方法。您可以改用其他兩種方法設定 SMTP 密碼。

使用指令擷取 SMTP 密碼

您可以使用設定覆寫,指定取得 SMTP 密碼的指令。Airflow 與 SMTP 服務通訊時,會使用這項指令取得密碼值。指定單一指令,不含管道和重新導向等 Bash 運算子。

如要使用這個方法,請覆寫下列 Airflow 設定選項:

區段
smtp smtp_password_cmd 指定會傳回 SMTP 密碼的指令。

使用儲存在 Secret Manager 中的密鑰擷取 SMTP 密碼

您可以設定 Secret Manager 做為 Airflow 密鑰後端。

為 Composer 環境設定 Secret Manager 後,您就可以在 Secret Manager 中儲存 SMTP 密碼:

  1. 建立新密鑰:

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

    SMTP_PASSWORD 替換為您的 SMTP 密碼。

  2. 設定 Airflow,從 Secret Manager 取得 SMTP 密碼。如要這麼做,請覆寫下列 Airflow 設定選項:

    區段
    smtp smtp_password_secret smtp-password

後續步驟