【AWSサービス 基礎編】 Amazon SNS でトピックを作成しメッセージを配信する

目次

概要

Amazon Simple Notification Service(Amazon SNS)は、メッセージの配信を管理するフルマネージドのパブリッシュ/サブスクライブ(Pub/Sub)メッセージングサービスです。アプリケーション間の通知や、エンドユーザーへのメール・SMS 通知など、さまざまなメッセージ配信に活用されています。

例えば、CloudWatch アラームの通知先として SNS トピックを指定し、運用担当者にメールで異常を通知するといった構成は、AWS 環境で広く利用されるパターンです。

本記事では、SNS トピックを作成し、メールアドレスをサブスクライバーとして登録して、実際にメッセージを配信する一連の流れを体験します。

SNS トピックにメッセージをパブリッシュし、複数のサブスクライバーに配信される構成図

この記事のメリット

  • Amazon SNS の Pub/Sub メッセージングモデルを理解できる
  • トピックの作成、サブスクリプションの設定、メッセージのパブリッシュの手順を習得できる
  • スタンダードトピックと FIFO トピックの違いを把握できる
  • メッセージフィルタリングの基本的な仕組みを理解できる

キャラクター紹介

クラウド資格実践ラボの基礎学習記事では、ルクシーちゃんと代表の土肥が対話形式で AWS 認定試験で必要な知識をハンズオンとともに解説していくブログです。これからこのブログを案内する2人を紹介します。

ルクシーちゃん

クラウド資格に挑戦中の好奇心旺盛なナビゲーター。初学者目線で「これってなんだろう?」と素朴な疑問を投げかけ、知識を引き出していく役どころ。難しい内容も、ルクシーちゃんと一緒なら一歩ずつ理解できると思います!

土肥(とひ)

株式会社Luxyの代表であり同社の元エンジニア。これまでオンプレとAWS環境のインフラを担当。AWS認定資格の学習で得た知識をハンズオンとともに解説するのが得意。直近では新人の教育なども行っており、これから技術を学ぼうという方が納得できるように解説できることに喜びを感じているとのこと。

技術解説

Amazon SNS とは

Luxyちゃん

とひさん、Amazon SNS ってどんなサービスですか?名前に「Notification」って入ってるから通知に関係ありそうですけど…

土肥

いいところに気づいたね!SNS は「Simple Notification Service」の略で、メッセージを配信するためのサービスなんだ。パブリッシャー(送信者)がトピックにメッセージを送ると、そのトピックにサブスクライブしている全員にメッセージが届く仕組みだよ。

Luxyちゃん

トピックにサブスクライブ…?なんだかYouTubeのチャンネル登録みたいですね。

土肥

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

Luxyちゃん

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

主な特徴

Luxyちゃん

SNS の特徴って何がありますか?

土肥

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

Luxyちゃん

配信先がたくさんあるんですね!

土肥

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

Luxyちゃん

フィルタリングできるんですか!全部受け取らなくていいのは便利ですね。

土肥

そうだね。そして最後に「高い可用性」。複数のアベイラビリティゾーンにまたがって冗長化されているから、安心して使えるよ。まとめるとこんな感じだね。

  • フルマネージド: インフラストラクチャの管理が不要
  • 多様な配信先: メール、SMS、HTTP/HTTPS エンドポイント、SQS キュー、Lambda 関数などに配信可能
  • ファンアウト: 1 つのメッセージを複数のサブスクライバーに同時配信
  • メッセージフィルタリング: サブスクライバーごとにフィルタポリシーを設定し、必要なメッセージのみを受信可能
  • 高い可用性: 複数のアベイラビリティゾーンにまたがって冗長化

基本的な構成要素

Luxyちゃん

SNS を使うときに覚えておくべき用語ってありますか?

土肥

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

Luxyちゃん

わかりやすい!表にするとどうなりますか?

土肥

こんな感じだよ。

要素説明
トピックメッセージの配信先となる論理的なアクセスポイント
パブリッシャートピックにメッセージを送信する送信元
サブスクリプショントピックと配信先エンドポイントの紐付け
サブスクライバーメッセージを受信するエンドポイント(メール、SQS、Lambda など)
Luxyちゃん

トピックが真ん中にいて、パブリッシャーから受け取ったメッセージをサブスクライバーに届けてくれるんですね。

土肥

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

トピック・パブリッシャー・サブスクライバーの関係図(ファンアウト配信の流れ)

トピックの種類

Luxyちゃん

トピックって種類があるんですか?

土肥

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

Luxyちゃん

FIFO のほうはどう違うんですか?

土肥

FIFO は「First In, First Out」の略で、メッセージの順序が保証されるのと、「正確に1回の配信」が保証されるんだ。ただし最大 300 メッセージ/秒というスループットの制限があるよ。まとめるとこうだね。

種類特徴ユースケース
スタンダード最大スループット、ベストエフォートの順序、少なくとも 1 回の配信アラート通知、ファンアウト
FIFOメッセージの順序保証、正確に 1 回の配信、最大 300 メッセージ/秒順序が重要なイベント処理
Luxyちゃん

アラート通知みたいな用途ならスタンダードで十分そうですね。

土肥

そうだね!本記事ではスタンダードトピックを使って進めるよ。

対応するサブスクリプションプロトコル

Luxyちゃん

さっき配信先がたくさんあるって言ってましたけど、具体的にどんなプロトコルに対応してるんですか?

土肥

まとめるとこんな感じだよ。メールや SMS みたいなエンドユーザー向けの通知から、SQS や Lambda みたいなシステム連携まで幅広く対応しているんだ。

プロトコル配信先
Emailメールアドレス
Email-JSONメールアドレス(JSON 形式)
SMS電話番号
HTTP/HTTPSWeb エンドポイント
Amazon SQSSQS キュー
AWS LambdaLambda 関数
Amazon Kinesis Data FirehoseFirehose 配信ストリーム
Luxyちゃん

Email-JSON っていうのは普通の Email と何が違うんですか?

土肥

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

Luxyちゃん

なるほど、用途に合わせて選べるんですね!実際に触ってみたくなりました。

実践

前提条件

  • リージョン: ap-northeast-1(東京)
  • Amazon SNS を操作できる IAM 権限があること
  • 確認用のメールアドレスを用意していること

作成するリソース一覧

リソース種別リソース名用途
SNS トピックhandson-notificationメッセージ配信用のスタンダードトピック
SNS サブスクリプション(メールアドレス)トピックからのメッセージ受信用

ステップ1: SNS トピックの作成

  • AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します
  • 上部の検索バーに SNS と入力し、表示された「Simple Notification Service」を選択します
  • 左側ナビゲーションの「トピック」を選択します
  • 「トピックの作成」をクリックします
  • 以下の設定を入力します
  • タイプ: 「スタンダード」を選択
  • 名前: handson-notification
  • 表示名: ハンズオン通知
  • その他の項目はデフォルトのままにします
  • 「トピックの作成」をクリックします
SNS トピックの作成画面(タイプ、名前、表示名が入力された状態)
  • トピックの詳細画面が表示され、ARN が確認できます
トピック作成完了画面(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 サービスからの通知先として広く活用されています

参照先

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社Luxy(https://luxy-inc.com)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した会社を引き継ぎ、代表に就任。

目次