Amazon Web Services ブログ

新機能 – Amazon EventBridge で Amazon S3 イベント通知を使用する

Amazon EventBridge は 2019 年半ばにリリースされ、あらゆる規模のパワフルなイベント駆動型アプリケーションを簡単に構築できるようにしました。その発売以来、Schema RegistryArchive and Replay EventsCross-Region Event Bus Targets のサポート、API Destinations など、いくつかの重要な機能が追加され、任意の HTTP API にイベントを送信できるようになりました。EventBridge は、非常に長い送信先リストをサポートし、イベントのパターンマッチング、フィルタリング、ルーティングを行う機能を備えた EventBridge は、非常に強力で柔軟なアーキテクチャコンポーネントです。

S3 イベント通知
2021 年 11 月 29 日(米国時間)より、EventBridge を使用して、S3 オブジェクトの変更に迅速かつ効率的に反応するアプリケーションを構築しやすくなります。これは、これまでになく高速で信頼性が高く、デベロッパーに優しい新しい「直接配線」モデルです。イベントを処理するために、オブジェクトのコピーを追加したり、専用のコードを記述したりする必要がなくなりました。

この時点で、S3 オブジェクトの変更に反応できる能力を既に持っており、ここで何が起こっているのかと疑問に思うこともあるかもしれません。2014 年には、SNS トピック、SQS キュー、および Lambda 関数に対する S3 イベント通知をローンチしました。これは非常に強力な機能でしたが (そして今でもそうですが)、エンタープライズ規模で使用するには、同じオブジェクトやイベントに関心を共有する他の独立したチームとアプリケーションとの連携が必要になる場合があります。また、EventBridge は既に CloudTrail ログから S3 API コールを抽出し、それを使用してパターンマッチングとフィルタリングを行うことができます。繰り返しになりますが、(監査とログ記録に重点を置いた) 非常にパワフルでさまざまな種類のアプリには最適ですが、私たちは常により良いことをしたいと考えています。

Net-net では、S3 イベント通知を EventBridge に直接配信するように設定できるようになりました! この新しいモデルには、次のようないくつかの利点があります。

高度なフィルタリング – オブジェクトサイズ、キー名、時間範囲など、その他の多くのメタデータフィールドでフィルタリングできます。これは、適切なアクション方針を決定するために、S3 にコールバックして追加のメタデータを取得する必要がある Lambda 関数を使用するよりも効率的です。S3 はルールに一致するイベントのみを発行するため、関心のあるイベントに対してのみ料金を支払うことでコストを節約できます。

複数の送信先 – 同じイベント通知を、Step Functions、Kinesis Firehose、Kinesis Data Streams、HTTP ターゲットを含む 18 個の AWS のサービスから API Destinations 経由でルーティングできます。これは、独自のファンアウトメカニズムを作成するよりもはるかに簡単で、独立したチームが独自のイベント処理を実行したいエンタープライズ規模の状況に対処するのにも役立ちます。

高速で信頼性の高い呼び出し – パターンが迅速かつ直接的に一致し、ターゲットが呼び出されます。S3 では EventBridge にイベントを少なくとも 1 回配信できるため、アプリケーションの信頼性が高くなります。

また、イベントをアーカイブしてリプレイする機能など、EventBridge の他の機能も利用できます。これにより、エラーが発生した場合や、イベントバスに新しいターゲットを追加した場合に、イベントを再処理できます。

開始方法
開始するのにかかる時間は、わずか数分です。まず、自分の S3 バケット (この場合は jbarr-public) の 1 つで EventBridge 通知を有効にします。S3 コンソールを開き、自分のバケットを探し、[プロパティ] タブを開き、[イベント通知] までスクロールダウンして [編集] をクリックします。

[オン] を選択し、[変更を保存] をクリックすると、次のようにロールする準備が整います。

次に、EventBridge コンソールを使用してルールを作成します。いつものように、名前と説明を入力することから始めます。

次に、バケットと関心のあるイベントに一致するパターンを定義します。

1 つのパターンが 1 つ以上のバケットと 1 つ以上のイベントに一致します。次のイベントがサポートされています。

  • オブジェクトが作成されました
  • オブジェクトが削除されました
  • オブジェクトの復元が開始されました
  • オブジェクトの復元が完了しました
  • オブジェクトの復元の期限が切れました
  • オブジェクトタグが追加されました
  • オブジェクトタグが削除されました
  • オブジェクト ACL が更新されました
  • オブジェクトストレージクラスが変更されました
  • オブジェクトアクセス階層が変更されました

次に、デフォルトのイベントバスを選択し、ターゲットを自分の Amazon E メールアドレスにメッセージを発行する SNS トピック (BucketAction) に設定します。

[作成] をクリックすると、準備が完了します。テストするには、いくつかのファイルを自分のバケットにアップロードし、次のメッセージを待ちます。

メッセージには、イベントに関する興味深い関連情報がすべて含まれており、(引用符を外してフォーマットすると) 次のようになります。

{
    "version": "0",
    "id": "2d4eba74-fd51-3966-4bfa-b013c9da8ff1",
    "detail-type": "Object Created",
    "source": "aws.s3",
    "account": "348414629041",
    "time": "2021-11-13T00:00:59Z",
    "region": "us-east-1",
    "resources": [
        "arn:aws:s3:::jbarr-public"
    ],
    "detail": {
        "version": "0",
        "bucket": {
            "name": "jbarr-public"
        },
        "object": {
            "key": "eb_create_rule_mid_1.png",
            "size": 99797,
            "etag": "7a72374e1238761aca7778318b363232",
            "version-id": "a7diKodKIlW3mHIvhGvVphz5N_ZcL3RG",
            "sequencer": "00618F003B7286F496"
        },
        "request-id": "4Z2S00BKW2P1AQK8",
        "requester": "348414629041",
        "source-ip-address": "72.21.198.68",
        "reason": "PutObject"
    }

最初のイベントパターンは非常に単純で、バケット名だけにマッチしていました。コンテンツベースのフィルタリングを使用して、より複雑で興味深いパターンを記述できます。例えば、数値マッチングを使用して、1 メガバイト未満のオブジェクトのイベントを照合するパターンを設定できます。

{
    "source": [
        "aws.s3"
    ],
    "detail-type": [
        "Object Created",
        "Object Deleted",
        "Object Tags Added",
        "Object Tags Deleted"
    ],

    "detail": {
        "bucket": {
            "name": [
                "jbarr-public"
            ]
        },
        "object" : {
            "size": [{"numeric" :["<=", 1048576 ] }]
        }
    }
}

または、プレフィックスマッチングを使用して、バケットの「サブフォルダー」(実際には存在しない) にアップロードされたオブジェクトを探すパターンを設定できます。

"object": {
  "key" : [{"prefix" : "uploads/"}]
  }]
}

これらすべてを、アーカイブ/リプレイを含む既存の EventBridge 機能のすべてと組み合わせて使用できます。また、次のように、各ルールの CloudWatch メトリクスにアクセスすることもできます。

今すぐ利用可能
この機能は今すぐ利用可能で、今日からすべての商用 AWS リージョンで使用を開始していただけます。ルールに一致する 100 万件のイベントごとに 1 USD を支払います。詳細については、EventBridge の料金ページをご覧ください。

Jeff;

原文はこちらです。