メール配信システムをAmazon SQS+lambda+SESで組んだ話

お疲れ様です、町田葵です。先日メール配信システムを作成する際に、AWSのサービスを組み合わせて使用しましたので、その話です。
今回使ったAWSのサービスは
- Amazon Simple Queue Service
- 完全マネージド型のメッセージキューイングサービスで、マイクロサービス、分散システム、およびサーバーレスアプリケーションの切り離しとスケーリングが可能です。
- 2018/6/28から通常のキューのトリガーにlambdaを利用できるようになりました。AWS Lambda supports Amazon SQS as an event sourceトリガーを利用するとポーリングの設定もいらなくなり、節約になります。
- Amazon Lambda
- AWS Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。AWS Lambda は必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングします。
- 関数の実行をクラウド上でサポートしてくれるサービスです、サーバーレスアーキテクチャなどで多用されます。
- Amazon Simple Email Service
- Amazon Simple Email Service (Amazon SES) は、デジタルマーケティング担当者やアプリケーション開発者がマーケティング、通知、トランザクションに関するEメールを送信できるように設計された、クラウドベースのEメール送信サービスです。Eメールを利用してお客様とのつながりを維持するあらゆる規模の企業を対象とした、コスト効率の高い信頼できるサービスです。
- メールの到達率を上げてくれたり、テンプレートの管理ができたりします。
の3つです。
最終的な流れは以下の図のようになりました。
このような構成にするとec2はメール送信に関する処理をAWSのサービスへ譲渡することができ、関心の分離が出来ました。
処理の流れは
- ec2でメール送信に必要なデータをQueueとしてSQSに送信する。
- Queueをトリガーとしてlambdaが発火、データの検証を行いSESにメール送信リクエストを送信。
- SESがlambdaから送られたデータをもとにテンプレートを作成しメール送信。
- 送信エラーがあれば2,3を繰り返し一定回数を超すとDeadQueueとして保存。
といった感じです。
作ってみた感想
AWSはすでに出来上がったシステムの手直し程度しか触ったことはありませんでしたが、割とサクサク出来上がったように感じます。以前はSQSに詰められたキューが複数実行されたり、トリガー設定がなかったりで使いにくそうでしたが、今年の3月にアップデートが入り、トリガー設定やFIFOキューなどが導入され使いやすくなっていたようで、その恩恵に乗っかって、かなり簡単にメール配信のシステムを組めたのかなと思います。
Posted by MachidaMamoru