5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【30日でAWSをマスターするハンズオン問題集】Day21:Amazon SNSとAmazon EventBridgeで、S3にファイルが置かれたことを通知しよう

Last updated at Posted at 2025-12-15

こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY21になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
https://qiita.com/satosato_kozakana/items/446971c2deca7e27d0aa

:pencil: 概要

項目 内容
所要時間 15~30分 (無料枠内で完結可能)
利用サービス Amazon SNS + Amazon EventBridge + Amazon S3
学べること Amazon SNSの基礎知識
Amazon EventBridge「ルール」の基礎知識
必要な前提知識 JSON :データ形式。ポリシー設定などで使用。
Amazon S3 :ファイルの保存などができるAWSサービス。今回はファイルのアップロード、削除などで使用。
利用料 計 0~3.7円
Amazon SNS:1000件まで無料
https://aws.amazon.com/jp/sns/faqs/#Billing
Amazon EventBridge:ペイロード64GBまで無料
https://aws.amazon.com/jp/eventbridge/pricing/
Amazon S3:3.7円/1GB
https://aws.amazon.com/jp/s3/pricing/?nc=sn&loc=4

Amazon S3はリソースを残したままにすると課金が発生する可能性があります

:dart: 問題

:bar_chart: アーキテクチャ図

architecture

:wrench: 実装機能

S3バケット内にファイルを置いた時や削除したとき、メールで通知しよう!

  • メール通知の内容を「S3バケット名」 「オブジェクト(ファイル)名」 「イベント種類」に絞る
    (ある設定をしないとリージョン名などの細かい情報がすべてメール本文に載ってしまう)

  • <応用> Amazon SNSのサブスクリプションフィルターポリシーを使って、"S3にファイルを置いた時のみメールで通知"する(ファイル削除時などは通知しない)設定を入れる

:bulb: 実装までのヒント

ヒントを見る :mag_right:
  • SNSをEventBridgeと紐づけるためには…
  • EventBridge側でS3イベント通知を受け取るためには…
  • S3側でEventBridgeへのイベント通知送信を許可できている?
  • 通知メールの中身はEventBridgeの「入力トランスフォーマー」(3.ターゲット選択 "追加設定")でできる。設定が難しい…という方は ↓ の記載例を使ってください
入力トランスフォーマー記載例 :mag_right:
追加設定
# メール通知時に機密情報を送らないよう以下を設定する。
 ターゲット入力を設定:入力トランスフォーマー

 # 入力パス ※コメントアウトは削除する
{
  "bucketName": "$.detail.bucket.name", #S3バケット名
  "objectKey": "$.detail.object.key" #イベントが発生したオブジェクト(ファイル)
  "eventType": "$.detail-type", #イベントの種類
}

 # テンプレート
{
  "bucket": "<bucketName>",
  "object": "<objectKey>",
  "event": "<eventType>"
}

inputTransformer

  • <応用> サブスクリプションフィルターポリシーを使うと、特定のエンドポイント(今回はEメール)宛に送信するメッセージを制限することができる!

:white_check_mark: 完成後のチェック方法

  • S3バケット内にファイルを置いたとき、Eメール通知が届くこと

:link: リファレンスURL

:crayon: 解答

解答と構築手順を見る :mag_right:

AWSマネジメントコンソールを使って、以下のサービスを構築します!
記載する設定以外は、デフォルトのままでOKです。

:arrow_down_small: Amazon SNS設定

  1. トピックの作成
    マネジメントコンソールより「Amazon SNS」→「トピック」→「トピックの作成」を開く
    • 詳細
      タイプ:スタンダード
      名前 :[任意]

  2. サブスクリプションの作成
    マネジメントコンソールより「Amazon SNS」→「トピック」の作成したトピック →「サブスクリプションの作成」を開く
    • 詳細
      トピックARN:[さっき作成したSNSトピックのARN](自動で入る)
      プロトコル:Eメール
      エンドポイント:[通知先にしたいEメールアドレス]

サブスクリプション作成後Eメールアドレス宛に届くメール内の「Confirm subscription」をクリックする。

:heavy_check_mark: 構築チェック
:black_small_square:作成したトピックとサブスクリプションが紐づいていればOK!
:black_small_square:サブスクリプションのステータスが「保留中の確認」→「確認済み」になればOK!
SNS

:arrow_down_small: Amazon EventBridgeのルールを作成

マネジメントコンソールより「Amazon EventBridge」→「ルール」→「ルールを作成」を開く

  1. ルールの詳細を定義
    名前:[任意]
    イベントバス:default
     「選択したイベントバスでルールを有効にする」ON
    ルールタイプ:イベントパターンを持つルール

  2. イベントパターンを構築
    • イベント
      イベントソース:AWSイベントまたはEventBridgeパートナーイベント
    • イベントパターン
      作成のメソッド:パターンフォームを使用する
      AWSのサービス:S3
      イベントタイプ:Amazon S3 イベント通知

  3. ターゲットを選択
    • ターゲット1
      ターゲットタイプ:AWSのサービス
      ターゲットを選択:SNSトピック
      ターゲットの場所:このアカウントのターゲット
      トピック:[作成したSNSトピック]
    • 追加設定
      ターゲット入力を設定:入力トランスフォーマー
入力パス
{
  "bucketName": "$.detail.bucket.name",
  "eventType": "$.detail-type",
  "objectKey": "$.detail.object.key"
}
テンプレート
{
  "bucket": "<bucketName>",
  "object": "<objectKey>",
  "event": "<eventType>"
}
:heavy_check_mark: 構築チェック
:black_small_square:イベントパターンにS3を指定していればOK!
:black_small_square:ターゲットタイプに作成したSNSトピックを指定していればOK!
:black_small_square:入力トランスフォーマーが設定できていればOK!
EventBridge

:arrow_down_small: Amazon S3設定

マネジメントコンソールより「Amazon S3」→「汎用バケット」→「バケットを作成」を開く

  1. バケットの作成
    • 一般的な設定
      バケットタイプ:汎用
      バケット名:[任意]

  2. バケットのプロパティを設定
    • イベント通知
      Amazon EventBridge
      「このバケット内のすべてのイベントについて Amazon EventBridge に通知を送信する」:ON
:heavy_check_mark: 構築チェック
:black_small_square:作成したS3バケットのプロパティ設定ができていればOK!
S3

これにて構築完了!
用意したS3バケット内に適当なファイルを置いてみましょう。
S3バケットにファイルを置いたり削除したりすると、メール通知されます!

<応用>解答を見る :mag_right:

マネジメントコンソールより「Amazon SNS」→「サブスクリプション」→「IDのリンク」→「サブスクリプションフィルターポリシー」を開く

  • フィルターポリシーのスコープ:メッセージ本文
JSONエディタ
# オブジェクト作成イベント時のみEメール通知する
{
  "event": [
    "Object Created"
  ]
}

SNS-subscriptionFilter

S3イベント通知を「Object Created」に絞ることで、ファイルを置いた(新しくオブジェクトが作成された)ときのみメールで通知されるようになります!

:wastebasket: 片付け(リソース削除)

  • S3バケットを削除
  • EventBridgeのルールを削除
  • SNSトピックを削除
  • SNSサブスクリプションを削除
  • IAMロールを削除

これにてお片付け完了です!

:checkered_flag: おつかれさまでした!

この課題ではS3のイベント処理をトリガーにAmazon SNSを使ってメール通知を飛ばす仕組みを構築しました。
次は他のAWSサービスをトリガーに通知を飛ばしたり、Amazon SNSからLambdaへ受け渡すような構築にも挑戦してみましょう!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?