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

Amazon SNS でトピックを作成しメッセージを配信する
目次

概要

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

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

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

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

この記事のメリット

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

執筆者とキャラクター紹介

執筆者:土肥(とひ)

株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

土肥

クラウドおさる

クラウドおさる

はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。

クラウドおさる

基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。

クラウドおさる

猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。

技術解説

Amazon SNS とは

クラウドおさる

とひさん、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メールアドレス
Email-JSONメールアドレス(JSON 形式)
SMS電話番号
HTTP/HTTPSWeb エンドポイント
Amazon SQSSQS キュー
AWS LambdaLambda 関数
Amazon Kinesis Data FirehoseFirehose 配信ストリーム
クラウドおさる

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

土肥

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

クラウドおさる

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

新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます

実践

前提条件

  • リージョン: 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 サービスからの通知先として広く活用されています

参照先

キャリア相談
クラウドおさる

独学の先に、AWS の仕事がある ── ジュニアおさるのキャリア相談

CLF には受かったけれど、次に何をすればいいのか分からない。独学で AWS を学ぶジュニアおさるの相談に、株式会社ジェニュイン代表の土肥が答えています。

  • ✓資格はゴールか、CLF の次に何から手を付けるか
  • ✓EC2 の次に作ってみる構成と、IaC・コスト管理
  • ✓実務経験ゼロでも、面接で話せる「これまで」の作り方
新卒・未経験の方へ
クラウドおさる

AWS を仕事にしたい方へ ── 新卒・未経験から

この記事を書いているのは、AWS の設計・構築を仕事にしている現役エンジニアです。運営元の株式会社ジェニュインでは、新卒・未経験の方を募集しています。プログラミング未経験から入社して活躍しているメンバーもいます。

  • ✓システム開発・WEB エンジニア / インフラ構築などの職種で、未経験から応募できます
  • ✓未経験から入社した社員の声を含む社員アンケートを掲載
  • ✓応募フォームから 1 分で応募できます
Amazon SNS でトピックを作成しメッセージを配信する

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

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

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

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

目次