メインコンテンツまでスキップ

Amazon SNS とは?基本的な使い方やトピックへのメッセージ発行を学ぼう

タグ:

アプリケーション間でイベントや通知をリアルタイムに届けたい場面は多くあります。Amazon SNS はそのためのフルマネージドな通知サービスで、1 つのメッセージを複数の宛先に同時配信するファンアウトパターンを簡単に実現できます。本記事では SNS の基本概念から AWS CLI を使ったトピックの作成・メッセージ発行までの手順を説明します。

Amazon SNS とは

Amazon SNS(Simple Notification Service)は AWS が提供するフルマネージドの pub/sub メッセージングサービスです。メッセージを送る側(パブリッシャー)がトピックにメッセージを発行すると、そのトピックを購読しているすべての宛先(サブスクライバー)にメッセージが届けられます。サーバーの管理やメッセージキューのポーリングが不要で、イベント駆動アーキテクチャを低コストで構築できます。

主なユースケースとして、アプリケーションからのアラート通知、マイクロサービス間のイベント配信、Lambda や SQS との連携によるサーバーレスワークフローなどがあります。

トピックの種類

SNS のトピックには Standard と FIFO の 2 種類があります。用途に応じて使い分けましょう。

種類順序保証重複排除スループット
Standardなし(ベストエフォート)なし(重複配信の可能性あり)ほぼ無制限
FIFOあり(送信順に配信)あり(重複排除 ID で制御)最大 300 件/秒(バッチ時 3,000 件/秒)

順序や重複が問題になるユースケースでは FIFO トピックを選びましょう。一方、ログ収集やアラート通知のように高スループットが求められる場合は Standard トピックが向いています。

サポートするサブスクリプションプロトコル

SNS はさまざまな宛先へのメッセージ配信をサポートしています。1 つのトピックに複数のプロトコルのサブスクリプションを登録でき、メッセージ発行時にすべての宛先へ同時配信されます。

プロトコル配信先主なユースケース
Email / Email-JSONメールアドレス人への通知・アラート
HTTP / HTTPSWeb エンドポイント外部サービスへの Webhook
SQSSQS キュー非同期処理・メッセージバッファリング
LambdaLambda 関数サーバーレスなイベント処理
SMS携帯電話番号SMS 通知
Applicationモバイルプッシュ通知エンドポイントiOS / Android へのプッシュ通知
FirehoseAmazon Data Firehoseログ・データのストリーミング

AWS CLI で SNS を使ってみる

AWS CLI を使ってトピックを作成し、メールアドレスをサブスクリプションとして登録してメッセージを発行するまでの流れを確認します。

トピックの作成

まずメッセージの配信先となるトピックを作成します。--name に指定した名前がトピック名になります。

❯ aws sns create-topic --name exrecord-topic
{
"TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic"
}

作成されたトピックの ARN はサブスクリプション登録やメッセージ発行時に使用するため、控えておきましょう。

サブスクリプションの登録

次に、作成したトピックにメールアドレスを購読者として登録します。--protocolemail--notification-endpoint に受信するメールアドレスを指定します。

❯ aws sns subscribe \
--topic-arn arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic \
--protocol email \
--notification-endpoint you@example.com
{
"SubscriptionArn": "pending confirmation"
}

登録直後は pending confirmation 状態です。指定したメールアドレスに確認メールが届くので、メール内の「Confirm subscription」リンクをクリックして購読を確定させましょう。

確認が完了したら、以下のコマンドでサブスクリプションの状態を確認できます。

❯ aws sns list-subscriptions-by-topic \
--topic-arn arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic
{
"Subscriptions": [
{
"SubscriptionArn": "arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic:0a1b2c3d-4e5f-6789-abcd-0a1b2c3d4e5f",
"Owner": "123456789012",
"Protocol": "email",
"Endpoint": "you@example.com",
"TopicArn": "arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic"
}
]
}

SubscriptionArn が ARN 形式になっていれば、購読が確定されています。

メッセージの発行

トピックにメッセージを発行すると、登録済みのすべてのサブスクライバーにメッセージが配信されます。--message にメッセージ本文を指定します。

❯ aws sns publish \
--topic-arn arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic \
--subject "テスト通知" \
--message "SNS からのテストメッセージです。"
{
"MessageId": "0a1b2c3d-4e5f-6789-abcd-0a1b2c3d4e5f"
}

発行が成功すると MessageId が返されます。しばらく待つと登録したメールアドレスに通知が届くはずです。

サブスクリプションの削除

不要になったサブスクリプションは削除できます。--subscription-arn に削除対象のサブスクリプション ARN を指定します。

❯ aws sns unsubscribe \
--subscription-arn arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic:0a1b2c3d-4e5f-6789-abcd-0a1b2c3d4e5f

トピックの削除

不要になったトピックは削除しましょう。トピックを削除すると、紐づくサブスクリプションもすべて削除されます。

❯ aws sns delete-topic \
--topic-arn arn:aws:sns:ap-northeast-1:123456789012:exrecord-topic

まとめ

Amazon SNS の基本概念と AWS CLI を使ったトピックの作成・サブスクリプション登録・メッセージ発行の手順について説明しました。

  • SNS はフルマネージドな pub/sub メッセージングサービスで、1 つのメッセージを複数の宛先へ同時配信するファンアウトパターンを簡単に実現できる
  • トピックには Standard(高スループット)と FIFO(順序保証・重複排除)の 2 種類があり、ユースケースに合わせて選ぶとよい
  • Email・SQS・Lambda・SMS など多様なプロトコルをサブスクリプションとして登録でき、同一トピックに複数のプロトコルを組み合わせられる
  • メッセージの発行は sns publish コマンド 1 つで完了し、登録済みのすべてのサブスクライバーへリアルタイムに配信される
  • SQS と組み合わせることでメッセージのバッファリングや再処理が可能になり、より堅牢なアーキテクチャを構築できる