まず 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の関数を新しく作成する。
名前は適当でOK、ランタイムは Python 3.9を選びます。
関数のデプロイ
先ほどローカルで作成した lamda.zip
をアップロードします。
[コード] タブのアップロード元から [zipファイル] を選択。
[アップロード] をクリックし、ファイル選択からローカルで作成した lamda.zip
選択したら [保存] をクリック。
こんな感じでコードが表示されれば OK。
環境変数の設定
SendGridの APIキーを Lamdaの環境変数に設定する。
[設定] → [環境変数] → [編集] を選択。
「SENDGRID_API_KEY」という名前でキーを追加します。値には SendGrid側で発行した APIキーを設定します。
動作確認
[テスト] のタブに移動し、テンプレートの名前に適当な値を入力して [テスト] ボタンをクリックする。
正常に実行されれば、実行結果が次のように表示される。
ついでに、宛先に指定したアドレスにメールが届いていることも確認。
まとめ
AWSでありながら、SES (Amazon Simple Email Service) を使わない方法でメールを送信する手順を紹介した。SendGridは WEB APIでメールが送れるので、Lamdaなどからも容易にメール送信できる。
0 件のコメント:
コメントを投稿