LambdaとSESを使ってサーバレスでEメール送信してみた
はじめに
前回はLightsailを使ってメールを送信するシステムを構築しましたが、今回はAWS Lambdaを使ってサーバレスでメールを送信するシステムを構築しました。
構築環境
サーバレスコンピューティングサービス:AWS Lambda
メールシステム:Amazon SES
言語:python
前提条件
下記で「1.SESの作成」と「2.Amazon SESにSMTP認証情報を作成する」を行う
構築手順
1.LambdaがAPIコールを実行するためのIAMポリシーとロールを作成
①検索バーより「IAM」を検索
②左メニューよりアクセス管理 > ポリシーを選択し、「ポリシーを作成」をクリック
③JSONタブを選択し、エディタに下記を貼り付け、「次のステップ」をクリック
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource": "*"
}
]
}
④ポリシーの確認
名前:ポリシー名(自由)
説明:任意
概要:任意
タグ:任意
「ポリシーを作成」をクリック
⑤左メニューよりアクセス管理 > ロールを選択し、「ロールを作成」をクリック
⑥信頼されたエンティティを選択
信頼されたエンティティタイプ:AWSのサービス
ユースケース:Lambda
⑦ロールの詳細
ロール名:ロール名を記載(自由)
説明:任意
ステップ1 信頼されたエンティティを選択する:そのまま
ステップ2 許可を追加する:①~④で作成したポリシーを選択
タグ:任意
ロールを作成をクリック
これでIAMポリシーとロールを作成及びアタッチが完了
⑧左メニューのポリシーから作成したポリシーをクリックし、ポリシーの使用状況より確認
2.Eメールを送信するLambda関数を作成
①検索バーより「Lambda」を検索
②左メニューより関数を選択し、「関数の作成」をクリック
③関数の作成
1から作成を選択
・基本情報
関数名:関数名を記載(自由)
ランタイム:Python3.9
アーキテクチャ:x86_64
・デフォルトの実行ロールを変更
実行ロール:既存のロールを使用する
既存のロール:⑦で作成したロールを選択
「関数の作成」をクリック
④コードを選択し、下記コードを貼り付ける
import boto3
import json
SENDER_MAIL = "send-test@example.com"
RECIPIENT_MAIL = "recipient-test@gmail.com"
REGION = "ap-northeast-1"
SUBJECT = "Lambda×SESメール配信テスト"
BODY = "テスト本文"
def send_email(source, to, subject, body):
client = boto3.client('ses', region_name=REGION)
response = client.send_email(
Source=source,
Destination={
'ToAddresses': [
to,
]
},
Message={
'Subject': {
'Data': subject,
},
'Body': {
'Text': {
'Data': body,
},
}
}
)
return response
def lambda_handler(event, context):
send_email_to = send_email(SENDER_MAIL, RECIPIENT_MAIL, SUBJECT, BODY)
print("Send ResponseMetadata:" + json.dumps(send_email_to, ensure_ascii=False))
return {'send_email': 'success'}
<説明>
SENDER_MAIL:送信元メールアドレス(検証したドメインを使用したメールアドレス)
例)
ドメイン「example.com」で検証した場合、test@example.com
RECIPIENT_MAIL:受信元メールアドレス(検証したメールアドレス)
SUBJECT:件名
BODY:本文
send_email:boto3(AWS SDK for Python)ライブラリをインポートすることで使用できるメール送信するための関数
Source:送信元を指定するパラメータ
Destination:送信先を指定するパラメータ
Message:本文を指定するパラメータ
※詳しくは下記参照
⑤コードを記載したら、「Deploy」をクリック
2.Eメールを送信する
①「test」をクリックし、テストイベントを設定
イベントアクションをテスト:新しいイベントを作成
イベント名:イベント名を記載(自由)
イベント共有の設定:プライベート
テンプレート - オプション:hello-world
で「保存」をクリック
※Lambdaの関数の作成からイベントの設定、テストの仕組みを理解したい方はこちら
②testの横の「▼」をクリックし、作成したイベントが選択されていたら、「test」をクリック
③送信が成功したかどうかをExecution resultで確認
Test Event Name:①で作成したイベント名
Response:
"send_email": "success"
と表示される
メールボックスからもメール送信されたのが確認できる
~終了~
参考にした記事
Discussion