ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

S3 イベント通知にバケットのシステム生成タグが含まれるようになりました

この記事を共有する

目次

はじめに

先日、Amazon S3(以下、S3)のイベント通知に AWS が付与したタグが含まれるようになったというアップデートがありました。
これまで複数バケットのイベントを拾うには、Amazon EventBridge(以下、EventBridge)のルールにバケット名を全部並べる必要がありました。
バケットが増えるたびにルールを直す作業が地味に面倒だったので、試してみました。

アップデートの内容

2026 年 7 月 16 日のアップデートで、S3 のイベント通知にシステム生成タグが含まれるようになりました。
システム生成タグとは、AWS のサービスがバケットに自動で付けるタグのことです。

対象は汎用バケットで、全リージョンで利用できます。
追加費用はかからず、既存のイベント通知設定を変更する必要もありません。
詳細は What's New の告知 にまとまっています。

AWS CloudFormation で作ったバケットには最初から付いている

ここが今回いちばん嬉しかった点です。
AWS CloudFormation(以下、CloudFormation)でバケットを作ると、スタック名などのタグが自動で付きます。
つまり IaC で作ったバケットなら、何もしなくてもイベント側でスタック単位の絞り込みができるようになりました。

EventBridge に届くイベントは以下のような形になります。

{
  "detail-type": "Object Created",
  "source": "aws.s3",
  "detail": {
    "bucket": {
      "name": "amzn-s3-demo-bucket",
      "aws-generated-tags": {
        "aws:cloudformation:stack-name": "amzn-s3-demo-stack",
        "aws:cloudformation:stack-id": "arn:aws:cloudformation:ap-northeast-1:111122223333:stack/amzn-s3-demo-stack/51af3dc0",
        "aws:cloudformation:logical-id": "S3DemoBucket"
      }
    },
    "object": {
      "key": "example-key",
      "size": 5
    }
  }
}

detail.bucket.aws-generated-tags が今回追加されたフィールドです。
イベント構造の全体は EventBridge に送られる S3 イベントのドキュメント にあります。

ルールの書き方が変わる

これまではバケット名を列挙していました。
バケットを 1 つ追加するたびにテンプレートを直す必要があり、直し忘れるとイベントが拾われません。

EventPattern:
  source:
    - aws.s3
  detail-type:
    - Object Created
  detail:
    bucket:
      name:
        - amzn-s3-demo-bucket-1
        - amzn-s3-demo-bucket-2
        - amzn-s3-demo-bucket-3

タグで絞り込むと、同じスタックで作られたバケットをまとめて拾えます。
バケットが増えてもルールは変わりません。

EventPattern:
  source:
    - aws.s3
  detail-type:
    - Object Created
  detail:
    bucket:
      aws-generated-tags:
        aws:cloudformation:stack-name:
          - amzn-s3-demo-stack

CloudFormation で書くと以下のようになります。
バケット側は EventBridgeConfiguration を有効にしておく必要があります。

Resources:
  ExampleBucket:
    Type: AWS::S3::Bucket
    Properties:
      NotificationConfiguration:
        EventBridgeConfiguration:
          EventBridgeEnabled: true
  ExampleRule:
    Type: AWS::Events::Rule
    Properties:
      EventPattern:
        source:
          - aws.s3
        detail-type:
          - Object Created
        detail:
          bucket:
            aws-generated-tags:
              aws:cloudformation:stack-name:
                - !Ref AWS::StackName
      Targets:
        - Arn: !GetAtt ExampleFunction.Arn
          Id: ExampleTarget

!Ref AWS::StackName を使えば、自分のスタックが作ったバケットだけを拾うルールになります。

s3-event-tags.png

使う前に知っておきたいこと

実際に使ってみて、注意が必要だと感じた点が 2 つあります。

タグが無いバケットではフィールドごと存在しません。
値が空になるのではなく、aws-generated-tags というフィールド自体が出てきません。
手作業で作ったバケットには AWS 生成のタグが付いていないので、このルールでは拾われないことになります。
IaC 管理から漏れているバケットを見つける手がかりとしても使えそうです。

まとめ

今回は S3 のイベント通知に追加されたシステム生成タグを使って、EventBridge のルールをバケット名の列挙から解放しました。

一番よかったのは、CloudFormation でバケットを作っていたおかげで設定を何も足さずに恩恵を受けられたことです。
IaC で作っておくと後から出た機能がそのまま乗ってくる、という体験は久しぶりでした。

バケットが増えるたびに EventBridge のルールを直している方の参考になれば幸いです。

この記事は私が書きました

野間 太一

記事一覧

猫とCloudFormationが好きです。

野間 太一

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。