SendGridとTwilio Functionsを利用したサーバレス環境からのメール送信

SendGridとTwilio Functionsを利用したサーバレス環境からのメール送信

この記事は 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 SIDAuth TokenTwilioのコンソール画面上で確認できます。

SendGrid APIキーの作成

メール送信するためにSendGridのAPIキーが必要になります。SendGridアカウントを作成後に、API Keysページにて作成してください。権限は以下のようにFull Accessを選択します:

Create API Key

画面上に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 serverless:start コマンドを実行

まとめ

本チュートリアルでは、Twilio SendGridとTwilio Functionsを利用してサーバレス環境からメールを送信する方法を学びました。参考になれば幸いです。Happy hacking!

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。