📧

Lambda(Node.js)でSendGridを使ってメールを送信するまで

2023/01/25に公開

前提条件

前提条件を下記に示します。

  • SendGrid.comでAPI KEYの発行が済んでいる

環境構築

どこでもよいので、ディレクトリを作成し、移動した後、下記を実行します。色々オプションを聞かれますが、全部デフォルト設定で大丈夫だと思います。

npm init

その後、作成したディレクトで下記を実行します。

npm install --save @sendgrid/mail

—saveオプションはパッケージインストール時に、package.jsondependenciesに追記してくれる機能ですが、npmのバージョン5以降はデフォルトでdependenciesに追記してくれるようになったので、バージョン5以降であれば不要です。(あっても動きます。)

コマンド実行後、フォルダの中身が以下のようになっているので、このうち、node_modulesをzip化します。

ここからはAWSコンソールでの作業になります。Lambdaコンソールの左側メニューから「レイヤー」を選択します。

「レイヤーの作成」を押下し、先ほどzip化したnode_moduleをアップロードし、レイヤーの作成を行います。

次に、Lambda関数を新規作成します。

作成後のページ下部の「レイヤー」から「レイヤーの追加」を選択します。

レイヤーを選択します。デフォルトでは「AWSレイヤー」が選択されているので、「カスタムレイヤー」を選択後、プルダウンを押下すると、先ほど作成したレイヤーがあるので、それを選択します。

関数内メニューの「設定」→「環境変数」から前提条件で用意していたAPIKEYを登録します。

コーディング

今回は確認だけなので、SendGridで公開されているサンプルそのままですが、用途に応じて変更ください。

import mail from '@sendgrid/mail';
const sgMail = mail;

export const handler = async (event) => {
  sgMail.setApiKey(process.env.SENDGRID_API_KEY);
  const msg = {
    to: "xxxxxxxx@gmail.com", // Change to your recipient
    from: "xxxxxxxx@gmail.com", // Change to your verified sender
    subject: "Sending with SendGrid is Fun",
    text: "and easy to do anywhere, even with Node.js",
  };

  try {
    const response = await sgMail.send(msg);
    console.log("Email sent");
  } catch (err) {
    console.error(err);
  }

  // TODO implement
  const response = {
    statusCode: 200,
    body: JSON.stringify("Hello from Lambda!"),
  };
  return response;
};

動作確認

あとはコンソールからテストするだけです。
今回作成したものについては、確かに受信できることを確認しました。

Discussion