S3 イベント通知が特定のフォルダだけ動かないときの確認ポイント ── プレフィックスとサフィックスのフィルターを見直す
記事の「実践」を 1 項目ずつ進めるためのページです。AWS マネジメントコンソールで操作したら、右の一覧にチェックを入れてください。チェックはこのブラウザに保存されます。
前提条件
- リージョン:
ap-northeast-1(東京) - 以下のリソースが作成済みであること
まだ用意していない場合は、「作り方の参考」の記事の手順で作れます。リソース名は、この記事の名前に読み替えてください。
| リソース種別 | リソース名 | 内容 | 作り方の参考 |
|---|---|---|---|
| S3 バケット | soa-event-lab-<アカウントID> | ファイルを置くバケット。パブリックアクセスはすべてブロック | Amazon S3 でバケットを作成しオブジェクトを管理する |
| Lambda 関数 | soa-event-lab-fn | Python。受け取ったイベントのバケット名・キー・イベント名(configurationId)をログに出すだけ。S3 からの呼び出しを許可するリソースベースポリシー付き | AWS Lambda で関数を作成しイベント駆動で実行する ※S3 からの呼び出しの許可は、S3 トリガーの追加で付く |
| イベント通知 | soa-invoices-csv | プレフィックス invoices/・サフィックス .csv・すべてのオブジェクト作成イベント → soa-event-lab-fn | ― |
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| イベント通知 | soa-reports-csv | reports/ の CSV で soa-event-lab-fn を呼ぶ(最初はわざと誤ったサフィックスで作る) |
| S3 オブジェクト | invoices/2026-10.csv / reports/2026-10.csv | 通知の動作確認用 |
手順 1: 設定済みのイベント通知を確認する
AWS マネジメントコンソールにログインし、リージョンが ap-northeast-1(東京)であることを確認します。上部の検索バーに S3 と入力し、「S3」を選択します。
バケットの一覧から soa-event-lab-<アカウントID> を開き、「プロパティ」タブを選択します。下にスクロールし、「イベント通知」のセクションに soa-invoices-csv があることを確認します。プレフィックスが invoices/、サフィックスが .csv、送信先が soa-event-lab-fn になっています。
手順 2: 誤ったサフィックスで通知を作る
「イベント通知」のセクションで「イベント通知を作成」をクリックし、以下を設定します。
- イベント名:
soa-reports-csv - プレフィックス:
reports/ - サフィックス:
*.csv(わざとワイルドカードを入れる) - イベントタイプ: 「すべてのオブジェクト作成イベント」にチェック
- 送信先: 「Lambda 関数」を選択し、「Lambda 関数から選択する」で
soa-event-lab-fnを選択
その他の項目はデフォルトのままにして、「変更の保存」をクリックします。「イベント通知」のセクションに soa-reports-csv が追加されます。サフィックスの * はワイルドカードではなく、ただの文字として保存されています。
手順 3: 2 つのフォルダにファイルを置く
上部のツールバーの CloudShell アイコンをクリックして AWS CloudShell を開き、次のコマンドで invoices/ と reports/ に CSV を 1 つずつアップロードします。
BUCKET=soa-event-lab-$(aws sts get-caller-identity --query Account --output text)
echo "id,amount" > 2026-10.csv
aws s3 cp 2026-10.csv s3://$BUCKET/invoices/2026-10.csv
aws s3 cp 2026-10.csv s3://$BUCKET/reports/2026-10.csv
上部の検索バーに CloudWatch と入力し、「CloudWatch」を選択します。左側ナビゲーションの「ログ」→「ロググループ」を選択し、/aws/lambda/soa-event-lab-fn を開きます。最新のログストリームを開くと、received s3://.../invoices/2026-10.csv (notification: soa-invoices-csv) のログだけがあり、reports/2026-10.csv のログはどこにもありません。エラーのログも出ていません。
関数の権限やコードに問題があれば、invoices/ のファイルでも失敗するはずです。invoices/ は動いていて、reports/ だけは関数が呼ばれた形跡すら無いので、soa-reports-csv のフィルターを疑います。
手順 4: サフィックスを直す
S3 のコンソールに戻り、soa-event-lab-<アカウントID> の「プロパティ」タブの「イベント通知」で soa-reports-csv のチェックボックスを選択し、同じセクションの「編集」をクリックします(画面にはほかにも「編集」ボタンがあるので、イベント通知のセクションのものを押します)。
- サフィックス:
.csv(*を削除する)
「変更の保存」をクリックします。「イベント通知」の一覧の「フィルター」列で、soa-reports-csv が reports/, .csv になったことを確認します。
手順 5: もう一度ファイルを置く
設定の変更が反映されるまで、2〜3 分待ちます。保存した直後にアップロードすると、まだ古いフィルターで評価されて関数が呼ばれないことがあります。
CloudShell で、reports/ にもう一度アップロードします(同じキーで上書きしても、新しい作成イベントとして通知されます)。
aws s3 cp 2026-10.csv s3://$BUCKET/reports/2026-10.csv
CloudWatch Logs の /aws/lambda/soa-event-lab-fn に戻って最新のログストリームを開くと、received s3://.../reports/2026-10.csv (notification: soa-reports-csv) のログが記録されていることを確認できます。
手順 6: 重なるフィルターの通知を作ってみる
最後に、reports/ の中の 2026/ だけを別の通知にしようとするとどうなるかを確かめます。S3 のコンソールで「イベント通知を作成」をクリックし、以下を設定します。
- イベント名:
soa-reports-2026-csv - プレフィックス:
reports/2026/ - サフィックス:
.csv - イベントタイプ: 「すべてのオブジェクト作成イベント」にチェック
- 送信先: 「Lambda 関数」で
soa-event-lab-fnを選択
「変更の保存」をクリックすると、「不明なエラー」と表示され、保存できません。エラーの「API レスポンス」を展開すると、Configuration is ambiguously defined. Cannot have overlapping suffixes in two rules if the prefixes are overlapping for the same event type. と原因が書かれています。同じイベントタイプで、プレフィックス reports/2026/ が reports/ と重なり、サフィックスも同じだからです。
確認できたら「キャンセル」をクリックします。