Amazon SQSの色々な使われ方を見る会

こんにちは、技術部のKです。あけましておめでとうございます。新年一発目のブログ、気合い入れて書いていきます。

今回は私含め、Amazon SQS の活用方法に関してイメージがついていない方向けに何点か活用方法を紹介します。是非これを機に SQS に詳しくなっていきましょう!

1.SQS の概要

SQS(simple queue service)は完全マネージド型のメッセージキューサービスです。

マイクロサービスの疎結合や、重い処理の後回し処理、並列できる処理の分散などに利用されたりします。
SQS の説明に関しては、以下の記事がわかりやすいです。

https://business.ntt-east.co.jp/content/cloudsolution/column-135.html

2.いろいろな構成紹介

SQS がどのように活用されているのか 4 パターン紹介します。どれも実用的なので是非読みながら他の使えそうな状況などをイメージしてみてください。

【パターン 1: SQS × 複数 EC2 】

blank

あるアプリケーションなどが SQS にメッセージを送信し、ec2 から aws sdk 等を用いて SQS をポーリングすることでメッセージを受信するという構成です。
例えば S3 への動画 upload 処理で重い動画を upload するのに時間がかかってしまうという場合などに利用できます。この構成にすることで処理が分散されるため、手が空いている EC2 が次々と upload 処理を行うようになります。逆に単一の EC2 の場合であると、重い処理を一度行ってしまうと、他の軽い処理を待たせてしまうのでサービスの速度に影響がでてしまうという問題があります。SQS を通して並列処理を活用していきましょう。

【パターン 2: S3 × Lambda × SQS 】

blank

こちらの構成は s3 と SQS、ラムダを用いた構成になります。
s3 には通知イベントという機能が備わっており、s3 のオブジェクトを保存、更新、削除などをしたときに SQS にメッセージを送る連携機能があります。
そして、SQS にはたまっているメッセージをラムダにポーリングさせる機能があるので、
この構成が成り立ちます。
この構成の 1 例として、画像の拡張子を png から全て jpeg にするといった活用例が考えられます。例えば、

「upload 用の s3 に upload された画像を jpeg に変換し、保存用の s3 に格納したい」といった要望があった際にこれは以下のステップで実現できます。

1. アプリケーションから s3 に upload 用の画像を保存する
2. s3 保存時の通知イベントより SQS にメッセージを送る
3. SQS をポーリングしている lambda がメッセージを受け取り、jpeg 変換処理を行った後保存用の s3 に upload する。

s3 の通知イベントと SQS、ラムダの連携は割と使える状況が多いので是非一度ハンズオンで練習してみてください。

【パターン 3: DynamoDB × Lambda × SQS × SNS】

blank

DynamoDB に保存された顧客データに対して、メールを一斉送信したい場合などにこの構成が活用できます。
メールを一斉送信するステップは以下の通りです。

1. S3 にメール本文が記載されているファイルを upload する
2. S3 の通知イベントにより Lambda が発火し、DynamoDB より顧客データを取得する(Lambda 内処理)
3. 顧客のデータ分のメッセージを SQS に発行する(Lambda 処理内)
4. SQS をポーリングしている Lambda が発火し、SES を用いて顧客にメールを送信する

この構成は、メールの送信処理を aws 内で完結させているのが面白いと思います。
また、SQS から直接 SES にいかずラムダを経由させているのもポイントです。
SQS はキューに届いたメッセージの分だけ同時に Lambda を起動させることができます。
そのため、このような構成にすることで並列処理としてメールを送信することができるようになるのです。
この構成に加え、SES にてバウンスしたメールをもつ顧客データを処理する Lambda も追加できるとより良い構成となるので、是非実装してみたい方は以下の書籍でトライしてみてください。

参考書籍:https://www.amazon.co.jp/dp/B09TVG5H17

【パターン 4: SNS × 複数 SQS × 複数 Lambda】

blank

この構成は SNS を挟むことで複数の SQS にメッセージを配信するファンアウトという構成です。
一連の処理を並列化できる時に威力を発揮します。
具体例として、ec サイトの商品注文完了時に以下の 4 つの処理を行いたいとします。

1. ラムダ 1 で、ユーザに確認メールを送信する。
2. ラムダ 2 で、ユーザの注文履歴の更新をする。
3. ラムダ 3 で、倉庫システムに商品の発送依頼を送信する。
4. ラムダ 4 で、決済システムにクレジットカードの支払情報を送信する

この処理を上記のような構成でそれぞれのラムダに処理を記述することで並列して処理することが可能になります。

また、この構成では、処理に依存関係が出てきた際にも柔軟に対応できるのがメリットです。
例えば、ラムダ 3 の処理は、ラムダ 4 の後にしたいという依存関係が出てきた際に以下のように対応することができます。

blank

このように SNS を用いたファンアウト構成は活躍できる場面が多いと思うので頭のかたすみにおいておきましょう!

参考サイト:
https://www.slideshare.net/rs_wisteria/amazon-snsSQS-fanout

3.最後に

SQS の構成を 4 つほど紹介させて頂きましたが、SQS に対して幅広い可能性を感じて頂けたのではないでしょうか。是非これをきっかけに aws における疎結合を実現する他のサービスにも手をだしてみてはいかがでしょうか。ここまで、ご視聴頂きありがとうございました。

【絶対に読むべき SQS の black belt の url も載せておきます。】↓↓
https://d1.awsstatic.com/webinars/jp/pdf/services/20190717_AWS-BlackBelt_AmazonSQS.pdf

スーパーソフトウエアの採用情報

あなたが活躍できるフィールドと充実した育成環境があります

blank
blank