AWSのSNS(Amazon Simple Notification Service)についてまとめています。
AWSのSNSは、多対多対応のフルマネージド型メッセージングサービス
Amazon Simple Notification Service (Amazon SNS) は、アプリケーションとアプリケーション(A2A)、アプリケーションと個人(A2P)間の通信に使える、フルマネージド型メッセージングサービスです。
A2A での pub/sub 機能で、分散型システムやマイクロサービス、イベント駆動型のサーバーレスアプリケーションでプッシュベースの、多対多メッセージングを利用できます。Amazon SNS トピックを使用すると、メッセージ発信側のシステム(パブリッシャー)は、多数のメッセージ受信側システム(サブスクライバーシステム)に対しメッセージを発信し、並列処理を行えます。対象システムは、Amazon SQS キュー、AWS Lambda 関数、HTTPS エンドポイント、 Amazon Kinesis Data Firehose など。A2P 機能を使用すると、SMS、モバイルプッシュ、E メールを介して、大量ユーザーに対しメッセージ送信できます。
関連)Amazon SNS(サーバーレスアプリのための pub/sub メッセージングサービス)| AWS
Amazon SNSの利点
アプリケーションの最新化と疎結合化が可能。
Amazon SNS を使用して、アプリケーションを機能ごとに小さな単体コンポーネントに分離できます。コンポーネント間をメッセージでつないで連携させるんですね。そうすると、開発、デプロイ、メンテナンスが容易になります。アプリケーションの pub/sub イベント駆動型アーキテクチャを活用して、パフォーマンスや信頼性の向上、各コンポーネントの個別スケーリングが可能になります。
Amazon SNS で、数百万のユーザーにメッセージをプッシュ送信できます。
Amazon SNS を使用して、200 か国以上への SMS テキストメッセージや、Apple や Android その他のプラットフォームでのモバイルプッシュ、電子メール(SMTP)でのメッセージをユーザーに直接送信できます。具体的には、ネットショッピングで購入した商品を「ただいま発送しました」という通知、フリマアプリに出品したアイテムが「購入されました」という通知などに活用されています。
電子メールとは違って、リアルタイムに通知されるため、高い確率で反応があるんですね。
Amazon SNS は、確実にメッセージを配信できます。
Amazon SNS でパブリッシュされたメッセージは、地理的に分離された複数のサーバーとデータセンターで保存されます。受信側のエンドポイントが利用できない場合は配信再試行を実行します。これにより、メッセージが途中でロストすることがないんですね。
Amazon SNSのNASAでの導入事例
NASA Image and Video Libraryには、NASA の半世紀以上に及ぶ実績を記録した 140,000 を超える静止画像、音声記録、および動画が保管されています。
アーキテクチャに、新しいコンテンツの処理パイプラインをトリガーするのにAmazon SNSが使用されています。また、受信されたジョブをパイプラインプロセッサから分離するのにAmazon SQS が使用されています。
【関連記事】
▶AWS SQSを使ってお手軽にメッセージキューイング(MQ)をしよう!
AWS SNSの料金
Amazon SNSの料金はメッセージ送信とAPIリクエストに対して従量課金されます。毎月100万メッセージまでは無料。
以下は、米国西部(カリフォルニア)リージョンでの料金です。
- APIリクエストの毎月最初の 100 万 Amazon SNS リクエストは無料。以降の料金は 100 万 リクエストごとに 0.50USD 。
- モバイルプッシュ通知 100 万件の通知まで無料 / 0.50USD/100 万通知
- Email/Email-JSON 1,000 件の通知まで無料 / 2.00USD/10 万通知
- HTTP/S 10 万件の通知まで無料 / 0.60USD/100 万通知
データ転送に対しては、受信はすべて無料、月に1GBまでの送信は無料で以降は0.09ドル/GBがかかります。(ボリュームディスカウントあり)
システムの規模によっては、Amazon SNSの機能は無料で使えそうですね。
AWS CLIでAmazon SNSを実行
Amazon SNSを使用する方法を具体的に見てみましょう。以下は、AWS CLIでAmazon SNSを使ってトピックを作成し、サブスクライブ(購読)するサンプルです。
【関連記事】
▶AWS CLIのインストール方法 AWSアクセスキーの登録と疎通確認
awsコマンドから、トピックの作成とトピックのサブスクライブを行います。
$ aws sns create-topic --name my-topic { "TopicArn": "arn:aws:sns:us-west-2:123456789012:my-topic" } $ aws sns subscribe --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic --protocol email --notification-endpoint saanvi@example.com { "SubscriptionArn": "pending confirmation" } You have chosen to subscribe to the topic: arn:aws:sns:us-west-2:123456789012:my-topic To confirm this subscription, click or visit the following link (If this was in error no action is necessary):
(サブスクライブ適用にはクリックまたはリンクを訪問します)
Confirm subscription Subscription confirmed! You have subscribed saanvi@example.com to the topic:my-topic. Your subscription's id is: arn:aws:sns:us-west-2:123456789012:my-topic:1328f057-de93-4c15-512e-8bb22EXAMPLE If it was not your intention to subscribe, click here to unsubscribe.
関連)AWS CLI での Amazon SNS の使用 – AWS Command Line Interface
以下は、トピックに対して「Hello world!」というメッセージをパブリッシュする例です。トピックのサブスクライバーにメッセージが送信されます。
$ aws sns publish --topic-arn arn:aws:sns:us-west-2:123456789012:my-topic --message "Hello World!" { "MessageId": "4e41661d-5eec-5ddf-8dab-2c867EXAMPLE" }
AWS SNSのまとめ
- AWSのSNSは、多対多対応のフルマネージド型メッセージングサービス
- アプリケーションと個人あてのメッセージ両方に使える
- Amazon SNSには毎月の無料枠あり