GCP Cloud ComposerからSendGrid経由でメール通知を行う

Cloud Composerからのメール送信はSendGridを使うのが簡単です。

以下の通り、Googleからも簡単な手順も用意されていますが、画面付きで手順書いてみます。

https://cloud.google.com/composer/docs/how-to/managing/creating?hl=ja#notification

SendGrid登録

Googleのマーケットプレイスから登録できます。無料プランで話を進めます。

https://console.cloud.google.com/marketplace/details/sendgrid-app/sendgrid-email?hl=ja

無料プランでも結構な量のメールが送れるので、Composerから使うだけなら検証くらいまでなら無料プランで十分な気もします。

基本は画面に沿っていくだけです。プラン確認して、Subscribeを実行します。

SendGridへ飛んで、SendGridでの登録作業に移ります。

ユーザを登録します。

登録後にGoogleに戻ると情報が連携されているのがわかります。

「SendGridウェブサイトでAPIキーを管理する」に飛びます。

SendGridにログオンしたら、API KeysのCreate API Keyを選択します。

API Keyの権限を調整できるので、Mail Sendのみ有効化してキーを発行しました。

キーが発行されたので控えます。

Cloud Composerの設定

Cloud Composer側の設定は本当に簡単で、環境変数に先程取得したAPIキーを「SENDGRID_API_KEY」として登録するのと、「SENDGRID_MAIL_FROM」でメールアドレスを登録するだけです。

設定完了までは数分かかりますが、登録できました。

メール送信テスト

メールの送信テストをしてみます。

エラーが起こった時のメールに加えて、EmailOperatorを使ったメール送信もテストしてみます。

https://github.com/apache/airflow/blob/1.10.3/airflow/operators/email_operator.py

簡単なDag書きます。

from airflow import DAG
from airflow.operators.email_operator import EmailOperator
from airflow.operators.bash_operator import BashOperator
from airflow.utils.dates import days_ago

default_args = {
    'owner': 'yusuke.otomo',
    'start_date': days_ago(1),
    'email_on_failure': True,
    'email': ['yusuke.otomo@beex-inc.com'],
}

dag = DAG(
    'mail-test',
    schedule_interval='@once',
    default_args=default_args,
)

send_mail = EmailOperator(
    task_id='sendmail',
    to='yusuke.otomo@beex-inc.com',
    subject='TEST Mail from Cloud Composer',
    html_content='Mail Contents',
    dag=dag,
)

failed_bash = BashOperator(
    task_id='run_bash',
    bash_command='exit 1',
    dag=dag,
)

send_mail >> failed_bash

実行してみると、想定通りメールの送信と、エラーを発生させることができました。

f:id:yomon8:20200115025248p:plain

こんな感じでEmailOperatorからメール飛んできます。

f:id:yomon8:20200115022413p:plain

BashOperatorのエラーも検知できました。

f:id:yomon8:20200115023739p:plain