EventBridge を使用して、S3 イベント発生時にStep Functionsを実行してみた。

2021.12.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon EventBridge とは?

EventBridge はサーバーレスのイベントバスサービスです。EventBridgeを使用して、アプリケーションをさまざまなソースからのデータに接続できます。EventBridge は、以前は Amazon CloudWatch Events と呼ばれていました。CloudWatch Events で作成したデフォルトのイベントバスとルールも EventBridge コンソールで見ることができます。

EventBridge ルール :  ルールは、受信したイベントを処理のターゲットに送信します。イベントは複数のターゲットに送信できます。

この記事では、EventBridge を使用して、S3 イベント発生時にStep Functionsを実行してみました。ファイルがS3バケットに追加されると、EventBridgeルールがStep Functionsの実行を開始します。

 

 

やってみた

Step Functionsの作成

  • Step Functions コンソールで、Create state machineをクリックしておきます。
  • Write your workflow in codeを選択して、TypeでStandardを選択しておきます。

 

 

  • 必要に応じてコードを変更して、ステートマシン名を入力して、[Create new role]を選択して、State Machineを作成しておきます。

 

S3バケットの作成

  • S3コンソールで、Create bucketをクリックします。
  • バケット名を入力して、バケットを作成しておきます。

 

 

AWS CloudTrailの作成

S3 の API イベントが Amazon EventBridge ルールを満たすために、CloudTrail でTrailを設定する必要があります。

  • CloudTrailコンソールで、Create trailを選択しておきます。
  • トレイル名を入力して、Storage locationでCreate new S3 bucketを選択しておきます。
  • 暗号化を無効にした、Trailを作成しておきます。

 

 

EventBridgeルールの作成

  • EventBridgeコンソールで、Create Ruleを選択しておきます。
  • 次の設定でDefine patternを構成しておきます。
    • Event patternを選択しておきます。
    • Event matching pattern : Pre-defined pattern by service
    • Service provider : AWS
    • サービス名 : S3
    • タイプ : Object-Level API Call via CloudTrail
    • Operation : Specific - PutObject
    • Bucket : 前の手順で作成したバケットの名前を入力します。

 

 

  • ターゲットでStep Functions state machineを選択して、以前に作成したState Machineの名前を選択して、Create a new roleを選択しておきます。

 

  • Choose log eventsでData eventsを選択しておきます。

 

  • データイベントタイプでS3を選択して、[Log all events]を選択して、EventBridge Ruleを作成しておきます。

 

S3バケットにファイルを追加する

  • 作成したS3バケットにファイルを追加しておきます。
  • ファイルがS3バケットに追加されると、ルールがStep Functions の実行を呼び出します。Step FunctionsコンソールでState Machineの実行をみることができます。

 

 

まとめ

EventBridge Ruleを使用して、S3 イベント発生時にStep Functionsを実行してみました。この記事では、ファイルのアップロードイベント(PutObject)をしてみました。他のS3イベントでEventBridgeルールを作成することもできます。

 

CloudTrailを使わない方法もあります : CloudTrailを使わないで、S3イベント通知をEventBridgeと統合することもできます。