AWS Lamdaから SendGridでメールを送る (SESを使わない邪道の道)

2022年3月9日水曜日

AWS SendGrid

t f B! P L

まず AWSでメールを送るなら、SESを使えっていうツッコミはなしでお願いします。

この記事では、AWS Lamda + Pythonで、SendGrid 経由でメールを送信する方法を紹介します。っと言っても至って普通の手順ですが。。。。

関数の準備(ローカル作業)

ローカル上で AWS Lamda にアップロードする関数(コード+ライブラリの一式)を作る。

まずは、適当な名前でフォルダを作って、必要なファイルを中身を空で作る。

mkdir sendgrid_lamda
cd sendgrid_lamda
mkdir dist
mkdir package
touch requirements.txt
touch lambda_function.py
touch event.json
touch build.sh
chmod 755 build.sh

上で作成した空のファイルに、中身を埋めていく。

requirements.txt

SendGridの依存関係を追加しておく。(2022年3月時点だと 6.0.5 が最新バージョンやった)

sendgrid==6.0.5

lambda_function.py

関数の中身を書く。

ほぼ 公式のサンプルコードのままであるが、SendGridの APIを使ってメールを送るコードを書く。送信先のメールアドレスは適時変える。

import json
import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

def lambda_handler(event, context):
    
    message = Mail(
        from_email='from_email@example.com',
        to_emails='to_email@gmail.com',
        subject='Sending with Twilio SendGrid is Fun',
        html_content='<strong>ABCDE</strong>')
    try:
        sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
        response = sg.send(message)
        print(response.status_code)
        print(response.body)
        print(response.headers)
    except Exception as e:
        print(e.message)

    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Send Mail!!')
    }

build. sh

AWS Lamdaにアップロードする zipファイルを作るための、ビルド用のシェルを作る。

#!/bin/bash

rm -rf package/*
cp *.py package/
pip install -r requirements.txt -t ./package/

cd ./package/
zip -r ../dist/lambda.zip .

ビルド(zipファイルの作成)

上で作った build.sh を実行して、AWS Lamdaにアップロードする zipファイルを作る。

./build.sh

ビルドが成功していれば、dist/lambda.zip が出来ているハズ。

関数のデプロイ(AWSでの作業)

ここからは AWS上での作業だ。

コンソールにログインして、Lamdaの関数を新しく作成する。

enter image description here

名前は適当でOK、ランタイムは Python 3.9を選びます。

enter image description here

関数のデプロイ

先ほどローカルで作成した lamda.zip をアップロードします。

[コード] タブのアップロード元から [zipファイル] を選択。

enter image description here

[アップロード] をクリックし、ファイル選択からローカルで作成した lamda.zip 選択したら [保存] をクリック。

enter image description here

こんな感じでコードが表示されれば OK。

enter image description here

環境変数の設定

SendGridの APIキーを Lamdaの環境変数に設定する。
[設定] → [環境変数] → [編集] を選択。

enter image description here

「SENDGRID_API_KEY」という名前でキーを追加します。値には SendGrid側で発行した APIキーを設定します。
enter image description here

動作確認

[テスト] のタブに移動し、テンプレートの名前に適当な値を入力して [テスト] ボタンをクリックする。

enter image description here

正常に実行されれば、実行結果が次のように表示される。

enter image description here

ついでに、宛先に指定したアドレスにメールが届いていることも確認。
enter image description here

まとめ

AWSでありながら、SES (Amazon Simple Email Service) を使わない方法でメールを送信する手順を紹介した。SendGridは WEB APIでメールが送れるので、Lamdaなどからも容易にメール送信できる。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ