Amazon SNS vs Amazon SQS

社内で通知機能を実装する際にAmazon SNSAmazon SQSどっちがいいかという議題が上がったんですがよくわかってなかったので調べました

tl;dr

名前は似てるがそもそもやってることが全然違う

Amazon SNS pub/sub メッセージングの機能を提供するサービス。複数のエンドポイントに同時にメッセージを送ることができ、エンドポイントもウェブサーバー、Lambdaなどに対応し、Amazon SQSにもメッセージを送ることができる

Amazon SQSは キューイングサービス。メッセージをSQSにenqueueし、単一のレシーバーがdequeueする。メッセージをpushすることはできないし、複数のレシーバーが同じメッセージを受け取ることもできない

Amazon SNS

aws.amazon.com

フルマネージドのpub/subメッセージングサービス

pub/subメッセージングについては以前書きました

zwzw.hatenablog.com

publisher (メッセージを送る側)はEC2だろうがRDSだろうがLamdbaだろうが何のサービスであってもAmazon SNSのトピックにメッセージをpublishします

Amazon SNSは、トピックをsubscribeしているsubscriber (メッセージを受け取る側)へメッセージを送信します

subscriberには個人のサーバーやLambda、Amazon SQSなどを使用することができます

Amazon SQS

フルマネージドのメッセージキューイングサービス

サービス間でのメッセージの送信、保存、受信ができます

一方のサービスでメッセージをAmazon SQSへ送信する

もう一方のサービスがAmazon SQSからメッセージを取り出す、と行った方法でメッセージを送信する

使い分けは?

pub/subメッセージングの良いところは、publisherとsubscriberが多対多でもメッセージの送信が簡単にできることだと思います

なので送りたいメッセージの受け手のサービスが複数なのか、それとも1つなのかである程度判断できるかなといった印象です (個人の意見です)