SendGridとTwilio Functionsを利用したサーバレス環境からのメール送信
- 2020年8月21日
- by SendGrid
- Category: 技術ネタ 機能・使い方
この記事は Send Serverless Emails using SendGrid and Twilio Functions の抄訳です。
ソフトウェア開発者の間では、従来型の高価なサーバベースのアーキテクチャをやめてサーバレスアプリケーションに移行するのがトレンドになっています。この新しいアプリケーション開発方法は、イベントドリブンであり、迅速なデプロイが可能です。また、サーバの維持コストと比較して安価かつ、従量課金で利用できます。
本チュートリアルでは、Twilio FunctionsとSendGridを利用したサーバレス環境からメール送信する方法をご紹介します。
前提条件
本チュートリアルを進めるために以下の準備が必要です:
1. SendGridアカウント 2. Twilioアカウント 3. Twilio CLI 4. Nodeバージョン8以上 |
はじめに
Twilioのフリーアカウントを作成後、ローカル環境でFunctionsの開発とデプロイを行うためTwilio CLIをインストールします。CLIをインストールするためにターミナル上で以下のコマンドを実行してください。
$ brew tap twilio/brew && brew install twilio
CLIのインストールが完了したら、ターミナル上で twilio コマンドを入力し以下のような表示になることを確認してください。
Twilio CLIをインストールしただけでは、serverlessコマンドは利用できません。これをインストールするために以下のコマンドを実行します:
$ twilio plugins:install @twilio-labs/plugin-serverless
ターミナル上で twilio login コマンドを実行してTwilioアカウントにログインすると自動的にAPIキーが作成されます。ログインの際に必要となるTwilioのAccount SIDとAuth TokenはTwilioのコンソール画面上で確認できます。
SendGrid APIキーの作成
メール送信するためにSendGridのAPIキーが必要になります。SendGridアカウントを作成後に、API Keysページにて作成してください。権限は以下のようにFull Accessを選択します:
画面上にAPIキーが表示されたら、後で利用するためにコピーしておきます。
プロジェクトのセットアップ
新たにターミナルウィンドウを開いて、以下のコマンドを実行します:
$ mkdir demo && cd demo $ twilio serverless:init demo-email $ cd demo-email $ npm install @sendgrid/mail --save $ rm -rf functions/* $ cd functions && touch mail.js
このコマンドを実行することで、demo-emailという名前のFunctionプロジェクトを作成し、functionsフォルダ配下の定型コードを削除します。コードはこの後スクラッチから作成しますが、その前にdemo-emailフォルダ内に自動生成される.envファイルに、以下の内容を追記します。その際、値は先ほど作成したSendGridのAPIキーに置き換えてください。
SENDGRID_API_KEY=your_sendgrid_api_key
設定画面で「Enable ACCOUNT_SID」と「AUTH_TOKEN」のチェックボックスをONにしてください。
サーバFunctionの作成
mail.js に以下のコードを記載します。
exports.handler = function(context, event, callback) { const sgMail = require("@sendgrid/mail"); sgMail.setApiKey(context.SENDGRID_API_KEY); const message = { to: "felistaswaceera@gmail.com", from: "trial@trail.com", subject: "Sending Emails with Twilio SendGrid and Twilio Server Functions is Easy", text: "How simple can this be?" }; sgMail .send(message) .then(() => { callback(null, "Email sent successfully"); }) .catch(e => { console.log(e); }); };
上述のスニペットで、3つの引数を伴ったFunctionが公開されます。各引数の詳細は以下のとおりです:
- context – Twilio Functions実行環境内の環境変数やヘルパーメソッドへのアクセスを提供するオブジェクトです
- event – Functionに渡されたリクエストパラメータを含むオブジェクトです
- callback – Function実行後に呼び出される関数です
Function内で、SendGrid経由でメール送信するために、@sendgrid/mailというnpmパッケージを利用します。
Functionのデプロイとテスト
ターミナル上で、以下のコマンドを実行してください:
$ cd .. && twilio serverless:deploy
デプロイに成功すると、以下のような内容が出力されます:
Functions に記載されているURLをコピーしてブラウザでアクセスすると、以下のような内容のメールが届くはずです。
ローカル環境におけるテスト
ローカル環境でFunctionのテストを行うために、コードを以下のように修正します:
exports.handler = function(context, event, callback) { const sgMail = require("@sendgrid/mail"); sgMail.setApiKey(process.env.SENDGRID_API_KEY); const message = { to: "felistaswaceera@gmail.com", from: "trial@trail.com", subject: "Sending Emails with Twilio SendGrid and Twilio Server Functions is Easy", text: "How simple can this be?" }; sgMail .send(message) .then(() => { callback(null, "Email sent successfully"); }) .catch(e => { console.log(e); }); };
ターミナル上で twilio serverless:start コマンドを実行すると以下のように表示されます。メールFunctionのURLをコピーしてブラウザでアクセスすると、新たなメールが届くはずです。
まとめ
本チュートリアルでは、Twilio SendGridとTwilio Functionsを利用してサーバレス環境からメールを送信する方法を学びました。参考になれば幸いです。Happy hacking!