TwilioSendGridを使用したPythonFlaskWebアプリのカスタムエラーレポートメール

公開: 2020-05-18

Python Webアプリケーションが本番環境でスローするエラーを早く知るほど、それをより早く解決できます。 この投稿では、Pythonで構築されたFlaskWebアプリケーション用のTwilioSendGridを使用してカスタムの例外レポートメールを送信する方法を紹介します。

チュートリアルの要件

このチュートリアルを実行するには、次のソフトウェアが必要です。

  • Python3.6以降。 オペレーティングシステムがPythonインタープリターを提供していない場合は、python.orgにアクセスしてインストーラーをダウンロードできます。
  • TwilioSendGridアカウント。 この記事では、アカウントをまだお持ちでない場合の設定について説明します。 無料のSendGridアカウントを使用すると、1日あたり最大100通のメールを永久に送信できます。

TwilioSendGridの使用

まず、プログラムによるアクセス用にSendGridを設定します。 すでにアカウントをお持ちの場合は、「APIキーの取得」セクションに進んでください。

次の方法でTwilioSendGridアカウントを作成します。

  1. TwilioSendGridのサインアップページに移動します。
  2. ユーザー名、パスワード、および電子メールアドレスを作成します。
  3. フォームの残りの部分に進み、[アカウントの作成]をクリックします。

もう少し情報を求める別のプロンプトが表示されたら、確認プロセスを完了する必要があります。 この多段階の検証プロセスは、あなたのような正当な開発者にサービスを提供しながら、悪意のあるスパマーを防ぐのに役立ちます。

アカウントの確認にサインアップしたときに使用したアドレスにメールが届きます。 検証が終了したら、SendGridダッシュボードに移動します。

APIキーの取得

認証してAPIリクエストを行うには、TwilioSendGridのAPIキーが必要です。

ダッシュボードに移動し、[設定]をクリックします。 次に、「APIキー」をクリックします。

[APIキーの作成]ボタンをクリックして、APIキーに「Flaskエラーレポート」という名前を付けます。 「アクセス制限」を選択します。

次に、「メール送信」ドロップダウンをクリックします。 スライダーを使用して「メール送信」オプションを有効にします。

一番下までスクロールして、[作成して表示]ボタンをクリックします。 キーをコピーして、アプリケーションで使用するため、安全な場所に貼り付けます。

Python開発環境を作成する

次に、コードを記述する前にPython環境をセットアップする必要があります。 プロジェクト用の新しいディレクトリを作成し、その下に仮想環境を作成します。 次に、仮想環境内に必要なPythonパッケージをインストールします。

UnixまたはMacOSシステムを使用している場合は、ターミナルを開き、次のコマンドを入力して上記のタスクを実行します。

Windowsのチュートリアルをフォローしている方は、コマンドプロンプトウィンドウに次のコマンドを入力してください。

最後のコマンドは、Pythonパッケージインストーラーであるpipを使用して、このプロジェクトで使用する2つのパッケージをインストールします。

  • Flaskは、Webアプリケーション用のマイクロフレームワークです。
  • Flaskは、オプションでpython-dotenvを使用して環境変数を管理できるため、このパッケージもインストールしています。

注: SendGridライブラリは、公式のTwilio SendGridPythonAPIクライアントです。

Flaskアプリケーションのセットアップ

これで、基本的なFlaskアプリケーションのコードを書き始めることができます。 前の手順でflask-error-alertsディレクトリに移動し、選択したエディタを起動します。 2つのファイルを作成します。

  1. .env
  2. app.py

最初のファイルは「dot-env」ファイルと呼ばれます。 ここでは、前の手順のSendGrid APIキーと、Flaskアプリケーションの他の構成値を配置します。 2番目のファイルは、Flaskアプリケーションが配置される場所です。 これらのファイルにいくつかの変更を加えて、Flaskアプリケーションをテストしてみましょう。

.envファイルを編集して以下を含めます。

app.pyを編集して以下を含めます。

これで、アプリケーションが期待どおりに実行されることを確認できます。 ターミナルを開いてvirtualenvがアクティブになっていることを確認してから、組み込みの開発サーバーでFlaskアプリを実行します。

次に、ブラウザをlocalhost:5000 /に移動して、「Helloworld!」が表示されることを確認します。 文章。

上のスクリーンショットのような画面が表示されたら、準備は完了です。

SendGridを使用したアラートの構成

未処理の例外の作成

次に、未処理の例外がある場合に電子メールアラートを送信するようにFlaskアプリケーションを構成する必要があります。 最初に行うことは、未処理の例外をスローするようにapp.pyを変更することです。

未処理の例外が発生する状況を作成したので、アプリケーションを再起動して現在の動作を観察してみましょう。 「Ctrl+C」を使用してFlaskアプリケーションを停止し、もう一度開始しましょう。

localhost:5000 /に移動すると、500の内部サーバーが取得されます。 しかし、これは私たちが期待していたことです。バグが原因でクラッシュしたアプリケーションでも同じことが起こります。

Flaskの未処理の例外にフックする

アプリケーションが未処理の例外に応答して電子メールを送信するように、Flaskの組み込みの例外ハンドラーにフックできるようにするコードを追加する必要があります。 これが完了すると、SendGridを使用して例外に関するメールを送信できるようになります。 そのテキストエディタを起動して、このコードをapp.pyに追加しましょう:

Flaskにはエラーハンドラーが組み込まれています(詳細については、こちらをご覧ください)。 @app.errorhandlerデコレータを使用して、Flaskアプリケーションに関数を登録します。 これは@app.routeデコレータと非常に似ていますが、アプリケーションで特定のタイプのエラーが発生したときに実行される関数を登録できる点が異なります。 この場合、 InternalServerError例外に注意を払っています。 これは、Flaskとその基盤となるユーティリティライブラリWerkzeugが、未処理の例外が発生するたびに発生する例外です。

注:トレースバック情報を取得するには、Pythonの組み込みトレースバックモジュールを使用しています。 error_tbと呼ばれる作成した変数は、トレースバックを含む文字列です。 このトレースバックは、Flaskアプリケーションで未処理の例外が発生したときにターミナルに表示されるものとまったく同じです。 この情報を次のセクションのSendGridメールに渡します。

app.finalize_requestメソッドへの呼び出しも追加しました。 これにより、Flaskアプリケーションのデフォルトの動作が維持されます。未処理の例外が発生した場合でも、内部サーバーのエラー応答がブラウザーに返されます。

SendGridを使用してアラートメールを送信する

これで、アラートメールを送信するためのコードを設定できるようになりました。 それでは、app.pyを更新して以下を含めることでそれを行いましょう:

Mailオブジェクトを設定するcreate_messageという関数を追加しました。 このオブジェクトは、.envファイルからFROM_EMAILTO_EMAILをプルします。 そうは言っても、.envファイルに次の行を追加する必要があります。

.envファイルを使用して値をロードしているため、dotenvモジュールのload_dotenv関数への呼び出しも追加する必要がありました。 これにより、コードの実行時に、必要な環境変数がアプリケーションコードで使用できるようになります。

上部近くに、SendGridAPIクライアントのインスタンスを作成しました。

このクライアントは、 SENDGRID_API_KEYという名前の環境変数を自動的に検索し、それを使用してSendGridサーバーに対して認証します。 .envファイル内の他の変数と同様に、 load_dotenv呼び出しは、変数がプロセスの環境にインポートされることを保証します。

このセクションの最後の注目すべき追加は、SendGridAPI呼び出しです。

そのコードブロックで発生しているのは、SendGridを使用して電子メールを送信しようとすることだけですが、例外が発生した場合は、エラーが何であったかを出力するだけです。 本番アプリケーションでは、SendGridサービスが一時的に利用できないことがエラーの原因として最も可能性が高いため、この操作を再試行することをお勧めします。

アラートのテスト

コードに変更を加えたら、テストしてみましょう。 したがって、ここでの期待は、localhost:5000/にあるFlaskアプリケーションにアクセスすることです。

  1. ブラウザで500内部サーバーエラーを受け取ります。
  2. トレースバックを含む電子メールアラートを受信します。

変更を有効にするためにFlaskアプリケーションを再起動する必要があることをテストします。 したがって、Flask開発サーバーを実行している場合は、「Ctrl + C」で停止してから、次のコマンドで再起動します。

次に、localhost:5000 /に移動して、500内部サーバーエラーを受け取ります。 1、2分後、次のようなメールが届きます。

結論

あります! 比較的少量のコードで非常に便利なアラートシステムを構築しました。 未処理の例外が発生するたびに、Flaskアプリケーションが電子メールアラートを送信するようになりました。

このチュートリアルを楽しんでいただければ幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。 このチュートリアルで開発されたすべてのコードは、ここにあります。