概要
Amazon Simple Notification Service(Amazon SNS)は、メッセージの配信を管理するフルマネージドのパブリッシュ/サブスクライブ(Pub/Sub)メッセージングサービスです。アプリケーション間の通知や、エンドユーザーへのメール・SMS 通知など、さまざまなメッセージ配信に活用されています。
例えば、CloudWatch アラームの通知先として SNS トピックを指定し、運用担当者にメールで異常を通知するといった構成は、AWS 環境で広く利用されるパターンです。
本記事では、SNS トピックを作成し、メールアドレスをサブスクライバーとして登録して、実際にメッセージを配信する一連の流れを体験します。

この記事のメリット
- Amazon SNS の Pub/Sub メッセージングモデルを理解できる
- トピックの作成、サブスクリプションの設定、メッセージのパブリッシュの手順を習得できる
- スタンダードトピックと FIFO トピックの違いを把握できる
- メッセージフィルタリングの基本的な仕組みを理解できる
キャラクター紹介
クラウド資格実践ラボの基礎学習記事では、ルクシーちゃんと代表の土肥が対話形式で AWS 認定試験で必要な知識をハンズオンとともに解説していくブログです。これからこのブログを案内する2人を紹介します。

ルクシーちゃん
クラウド資格に挑戦中の好奇心旺盛なナビゲーター。初学者目線で「これってなんだろう?」と素朴な疑問を投げかけ、知識を引き出していく役どころ。難しい内容も、ルクシーちゃんと一緒なら一歩ずつ理解できると思います!
土肥(とひ)
株式会社Luxyの代表であり同社の元エンジニア。これまでオンプレとAWS環境のインフラを担当。AWS認定資格の学習で得た知識をハンズオンとともに解説するのが得意。直近では新人の教育なども行っており、これから技術を学ぼうという方が納得できるように解説できることに喜びを感じているとのこと。

技術解説
Amazon SNS とは
Luxyちゃんとひさん、Amazon SNS ってどんなサービスですか?名前に「Notification」って入ってるから通知に関係ありそうですけど…
いいところに気づいたね!SNS は「Simple Notification Service」の略で、メッセージを配信するためのサービスなんだ。パブリッシャー(送信者)がトピックにメッセージを送ると、そのトピックにサブスクライブしている全員にメッセージが届く仕組みだよ。



トピックにサブスクライブ…?なんだかYouTubeのチャンネル登録みたいですね。
まさにそのイメージ!YouTubeでチャンネル登録すると新しい動画の通知が届くよね。SNS も同じで、トピックに登録(サブスクライブ)しておくと、そこにメッセージが投稿されたときに自動的に届くんだ。この仕組みを「Pub/Sub(パブ/サブ)メッセージングモデル」って呼ぶよ。



なるほど、Pub がパブリッシュ(発行)で、Sub がサブスクライブ(購読)ですね!
主な特徴



SNS の特徴って何がありますか?
大きなポイントは5つあるよ。まず「フルマネージド」で、インフラの管理が不要なこと。そして「多様な配信先」に対応していて、メール、SMS、HTTP/HTTPS エンドポイント、SQS キュー、Lambda 関数なんかに配信できるんだ。



配信先がたくさんあるんですね!
そうなんだ。さらに「ファンアウト」といって、1つのメッセージを複数のサブスクライバーに同時配信できるのも強みだよ。あと「メッセージフィルタリング」で、サブスクライバーごとにフィルタポリシーを設定して必要なメッセージだけ受け取ることもできる。



フィルタリングできるんですか!全部受け取らなくていいのは便利ですね。
そうだね。そして最後に「高い可用性」。複数のアベイラビリティゾーンにまたがって冗長化されているから、安心して使えるよ。まとめるとこんな感じだね。
- フルマネージド: インフラストラクチャの管理が不要
- 多様な配信先: メール、SMS、HTTP/HTTPS エンドポイント、SQS キュー、Lambda 関数などに配信可能
- ファンアウト: 1 つのメッセージを複数のサブスクライバーに同時配信
- メッセージフィルタリング: サブスクライバーごとにフィルタポリシーを設定し、必要なメッセージのみを受信可能
- 高い可用性: 複数のアベイラビリティゾーンにまたがって冗長化
基本的な構成要素



SNS を使うときに覚えておくべき用語ってありますか?
4つの構成要素を押さえておけば大丈夫だよ。「トピック」「パブリッシャー」「サブスクリプション」「サブスクライバー」だね。さっきの YouTube の例えで言うと、トピックがチャンネル、パブリッシャーが動画投稿者、サブスクライバーが視聴者、サブスクリプションがチャンネル登録そのもの、って感じかな。



わかりやすい!表にするとどうなりますか?
こんな感じだよ。
| 要素 | 説明 |
|---|---|
| トピック | メッセージの配信先となる論理的なアクセスポイント |
| パブリッシャー | トピックにメッセージを送信する送信元 |
| サブスクリプション | トピックと配信先エンドポイントの紐付け |
| サブスクライバー | メッセージを受信するエンドポイント(メール、SQS、Lambda など) |



トピックが真ん中にいて、パブリッシャーから受け取ったメッセージをサブスクライバーに届けてくれるんですね。
その通り!トピックが仲介役になっているから、パブリッシャーはサブスクライバーのことを知らなくても大丈夫なんだ。これが Pub/Sub モデルの良いところだよ。


トピックの種類



トピックって種類があるんですか?
うん、「スタンダード」と「FIFO」の2種類があるよ。スタンダードはスループットが高くて、ベストエフォートの順序で配信されるんだ。「少なくとも1回の配信」が保証されているよ。



FIFO のほうはどう違うんですか?
FIFO は「First In, First Out」の略で、メッセージの順序が保証されるのと、「正確に1回の配信」が保証されるんだ。ただし最大 300 メッセージ/秒というスループットの制限があるよ。まとめるとこうだね。
| 種類 | 特徴 | ユースケース |
|---|---|---|
| スタンダード | 最大スループット、ベストエフォートの順序、少なくとも 1 回の配信 | アラート通知、ファンアウト |
| FIFO | メッセージの順序保証、正確に 1 回の配信、最大 300 メッセージ/秒 | 順序が重要なイベント処理 |



アラート通知みたいな用途ならスタンダードで十分そうですね。
そうだね!本記事ではスタンダードトピックを使って進めるよ。
対応するサブスクリプションプロトコル



さっき配信先がたくさんあるって言ってましたけど、具体的にどんなプロトコルに対応してるんですか?
まとめるとこんな感じだよ。メールや SMS みたいなエンドユーザー向けの通知から、SQS や Lambda みたいなシステム連携まで幅広く対応しているんだ。
| プロトコル | 配信先 |
|---|---|
| メールアドレス | |
| Email-JSON | メールアドレス(JSON 形式) |
| SMS | 電話番号 |
| HTTP/HTTPS | Web エンドポイント |
| Amazon SQS | SQS キュー |
| AWS Lambda | Lambda 関数 |
| Amazon Kinesis Data Firehose | Firehose 配信ストリーム |



Email-JSON っていうのは普通の Email と何が違うんですか?
通常の Email はメッセージ本文がそのままテキストで届くんだけど、Email-JSON だとメッセージの全情報が JSON 形式で届くんだ。プログラムで処理したい場合に便利だよ。



なるほど、用途に合わせて選べるんですね!実際に触ってみたくなりました。
実践
前提条件
- リージョン:
ap-northeast-1(東京) - Amazon SNS を操作できる IAM 権限があること
- 確認用のメールアドレスを用意していること
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| SNS トピック | handson-notification | メッセージ配信用のスタンダードトピック |
| SNS サブスクリプション | (メールアドレス) | トピックからのメッセージ受信用 |
ステップ1: SNS トピックの作成
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
SNSと入力し、表示された「Simple Notification Service」を選択します - 左側ナビゲーションの「トピック」を選択します
- 「トピックの作成」をクリックします
- 以下の設定を入力します
- タイプ: 「スタンダード」を選択
- 名前:
handson-notification - 表示名:
ハンズオン通知 - その他の項目はデフォルトのままにします
- 「トピックの作成」をクリックします


- トピックの詳細画面が表示され、ARN が確認できます


ステップ2: メールサブスクリプションの作成
- トピックの詳細画面で「サブスクリプションの作成」をクリックします
- 以下の設定を入力します
- トピック ARN: 自動的に入力されています
- プロトコル: 「Eメール」を選択
- エンドポイント: 確認用のメールアドレスを入力
- 「サブスクリプションの作成」をクリックします
- サブスクリプションが作成されますが、ステータスは「保留中の確認」となります


ステップ3: サブスクリプションの確認(メール認証)
- 登録したメールアドレスに「AWS Notification – Subscription Confirmation」という件名のメールが届きます
- メール本文の「Confirm subscription」リンクをクリックします
- 「Subscription confirmed!」と表示されたページが開きます


- SNS コンソールに戻り、左側ナビゲーションの「サブスクリプション」を選択すると、ステータスが「確認済み」になっていることを確認できます
ステップ4: メッセージをパブリッシュする
- 左側ナビゲーションの「トピック」を選択し、
handson-notificationをクリックします - 「メッセージの発行」をクリックします
- 以下の設定を入力します
- 件名:
test message - メッセージ本文: 以下のテキストを入力
これは Amazon SNS のハンズオンテストメッセージです。
トピック: handson-notification
送信日時: 手動パブリッシュ
このメッセージが届いていれば、SNS の設定は正常に動作しています。
- 「メッセージの発行」をクリックします


- 「メッセージが正常に発行されました」と表示されます
- 登録したメールアドレスに通知メールが届いていることを確認します




ステップ5: 2つ目のサブスクリプションを追加する(ファンアウトの確認)
同じトピックに別のメールアドレスを追加し、ファンアウト配信を確認します。
handson-notificationトピックの詳細画面で「サブスクリプションの作成」をクリックします- プロトコル: 「Eメール」を選択
- エンドポイント: 別のメールアドレス(または同じメールアドレスの別名)を入力
- 「サブスクリプションの作成」をクリックします
- 届いた確認メールの「Confirm subscription」リンクをクリックします
- 再度メッセージを発行すると、両方のメールアドレスにメッセージが届くことを確認できます
同じトピックに対して複数のサブスクライバーを登録すると、1 回のパブリッシュですべてのサブスクライバーにメッセージが配信されます。これがファンアウトパターンです。
まとめ
- Amazon SNS はパブリッシュ/サブスクライブモデルのメッセージングサービスです
- トピックを作成し、サブスクリプションで配信先(メール、SQS、Lambda など)を登録します
- メールサブスクリプションは、登録後にメールで確認(Confirm)する必要があります
- メッセージをパブリッシュすると、トピックにサブスクライブしているすべてのエンドポイントに配信されます(ファンアウト)
- メッセージ属性を付与することで、サブスクライバー側でのフィルタリングが可能になります
- CloudWatch アラームや EventBridge ルールなど、他の AWS サービスからの通知先として広く活用されています










