こちらの投稿は2025 Japan AWS Jr.Championsの有志メンバーで作成した『30日間で主要AWSサービスを構築できるようになる』をテーマにした初学者向けのハンズオン問題集のDAY21になります!
問題集の趣旨や作成に至るまでの経緯は以下の記事をご覧いただければと思います。
https://qiita.com/satosato_kozakana/items/446971c2deca7e27d0aa
概要
| 項目 | 内容 |
|---|---|
| 所要時間 | 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はリソースを残したままにすると課金が発生する可能性があります
問題
アーキテクチャ図
実装機能
S3バケット内にファイルを置いた時や削除したとき、メールで通知しよう!
-
メール通知の内容を「S3バケット名」 「オブジェクト(ファイル)名」 「イベント種類」に絞る
(ある設定をしないとリージョン名などの細かい情報がすべてメール本文に載ってしまう) -
<応用> Amazon SNSのサブスクリプションフィルターポリシーを使って、"S3にファイルを置いた時のみメールで通知"する(ファイル削除時などは通知しない)設定を入れる
実装までのヒント
ヒントを見る
- SNSをEventBridgeと紐づけるためには…
- EventBridge側でS3イベント通知を受け取るためには…
- S3側でEventBridgeへのイベント通知送信を許可できている?
- 通知メールの中身はEventBridgeの「入力トランスフォーマー」(3.ターゲット選択 "追加設定")でできる。設定が難しい…という方は ↓ の記載例を使ってください
入力トランスフォーマー記載例
# メール通知時に機密情報を送らないよう以下を設定する。
ターゲット入力を設定:入力トランスフォーマー
# 入力パス ※コメントアウトは削除する
{
"bucketName": "$.detail.bucket.name", #S3バケット名
"objectKey": "$.detail.object.key" #イベントが発生したオブジェクト(ファイル)
"eventType": "$.detail-type", #イベントの種類
}
# テンプレート
{
"bucket": "<bucketName>",
"object": "<objectKey>",
"event": "<eventType>"
}
- <応用> サブスクリプションフィルターポリシーを使うと、特定のエンドポイント(今回はEメール)宛に送信するメッセージを制限することができる!
完成後のチェック方法
- S3バケット内にファイルを置いたとき、Eメール通知が届くこと
リファレンスURL
解答
解答と構築手順を見る
AWSマネジメントコンソールを使って、以下のサービスを構築します!
記載する設定以外は、デフォルトのままでOKです。
Amazon SNS設定
- トピックの作成
マネジメントコンソールより「Amazon SNS」→「トピック」→「トピックの作成」を開く- 詳細
タイプ:スタンダード
名前 :[任意]
- 詳細
- サブスクリプションの作成
マネジメントコンソールより「Amazon SNS」→「トピック」の作成したトピック →「サブスクリプションの作成」を開く- 詳細
トピックARN:[さっき作成したSNSトピックのARN](自動で入る)
プロトコル:Eメール
エンドポイント:[通知先にしたいEメールアドレス]
- 詳細
サブスクリプション作成後Eメールアドレス宛に届くメール内の「Confirm subscription」をクリックする。
|
|
|---|
|
|
|
|
![]() |
Amazon EventBridgeのルールを作成
マネジメントコンソールより「Amazon EventBridge」→「ルール」→「ルールを作成」を開く
- ルールの詳細を定義
名前:[任意]
イベントバス:default
「選択したイベントバスでルールを有効にする」ON
ルールタイプ:イベントパターンを持つルール
- イベントパターンを構築
- イベント
イベントソース:AWSイベントまたはEventBridgeパートナーイベント - イベントパターン
作成のメソッド:パターンフォームを使用する
AWSのサービス:S3
イベントタイプ:Amazon S3 イベント通知
- イベント
- ターゲットを選択
- ターゲット1
ターゲットタイプ:AWSのサービス
ターゲットを選択:SNSトピック
ターゲットの場所:このアカウントのターゲット
トピック:[作成したSNSトピック] - 追加設定
ターゲット入力を設定:入力トランスフォーマー
- ターゲット1
{
"bucketName": "$.detail.bucket.name",
"eventType": "$.detail-type",
"objectKey": "$.detail.object.key"
}
{
"bucket": "<bucketName>",
"object": "<objectKey>",
"event": "<eventType>"
}
|
|
|---|
|
|
|
|
|
|
![]() |
Amazon S3設定
マネジメントコンソールより「Amazon S3」→「汎用バケット」→「バケットを作成」を開く
- バケットの作成
- 一般的な設定
バケットタイプ:汎用
バケット名:[任意]
- 一般的な設定
- バケットのプロパティを設定
- イベント通知
Amazon EventBridge
「このバケット内のすべてのイベントについて Amazon EventBridge に通知を送信する」:ON
- イベント通知
|
|
|---|
|
|
![]() |
これにて構築完了!
用意したS3バケット内に適当なファイルを置いてみましょう。
S3バケットにファイルを置いたり削除したりすると、メール通知されます!
<応用>解答を見る
マネジメントコンソールより「Amazon SNS」→「サブスクリプション」→「IDのリンク」→「サブスクリプションフィルターポリシー」を開く
- フィルターポリシーのスコープ:メッセージ本文
# オブジェクト作成イベント時のみEメール通知する
{
"event": [
"Object Created"
]
}
S3イベント通知を「Object Created」に絞ることで、ファイルを置いた(新しくオブジェクトが作成された)ときのみメールで通知されるようになります!
片付け(リソース削除)
- S3バケットを削除
- EventBridgeのルールを削除
- SNSトピックを削除
- SNSサブスクリプションを削除
- IAMロールを削除
これにてお片付け完了です!
おつかれさまでした!
この課題ではS3のイベント処理をトリガーにAmazon SNSを使ってメール通知を飛ばす仕組みを構築しました。
次は他のAWSサービスをトリガーに通知を飛ばしたり、Amazon SNSからLambdaへ受け渡すような構築にも挑戦してみましょう!





