📧
Lambda(Node.js)でSendGridを使ってメールを送信するまで
前提条件
前提条件を下記に示します。
- SendGrid.comでAPI KEYの発行が済んでいる
環境構築
どこでもよいので、ディレクトリを作成し、移動した後、下記を実行します。色々オプションを聞かれますが、全部デフォルト設定で大丈夫だと思います。
npm init
その後、作成したディレクトで下記を実行します。
npm install --save @sendgrid/mail
—save
オプションはパッケージインストール時に、package.json
のdependencies
に追記してくれる機能ですが、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