Amazon Simple Storage Service (Amazon S3) バケットへのファイルの追加時に、AWS Step Function ステートマシンをアクティブにしたいです。
簡単な説明
Amazon EventBridge ルールを使用すると、オブジェクトが Amazon S3 バケットにアップロードされたときに Step Function のステートマシンをアクティブにすることができます。開始するには、次のリソースが必要です。
- オブジェクトのアップロード対象となる S3 バケット
- 実行するステートマシン
- オブジェクトが S3 バケットにアップロードされたときにステートマシンを呼び出す EventBridge ルール
- 必要なタスク用の Step Function
解決策
Amazon S3 にバケットを作成する
次の手順を実行します。
- Amazon S3 コンソールを開き、[バケットの作成] を選択します。
- [バケット名] に名前を入力します。
- [バケットを作成] を選択します。
EventBridge で Amazon S3 Event Notification を有効にする
次の手順を実行します。
- Amazon S3 コンソールを開き、[バケット] を選択します。。
- イベントをアクティブにするバケットを選択し、[プロパティ] を選択します。
- [Amazon EventBridge] セクションで [編集] を選択します。
- [このバケットのすべてのイベントに関する通知を Amazon EventBridge に送信する] セクションで [On] を選択します。
- [変更を保存] を選択します。
ステートマシンを設定する
Steps Function コンソールを開き、手順に従ってステートマシンを作成します。
EventBridge ルールを作成する
次の手順を実行します。
- EventBridge コンソールを開き、[ルールを作成] を選択します。
- [名前] に、ルールの名前を入力します。
- [ルールタイプ] で [イベントパターンを含むルール] を選択し、[次へ] を選択します。
- [イベントパターンの作成] ページの [イベントパターン] セクションで、次のように選択します。
[イベントソース]で [AWS サービス] を選択します。
[AWS サービス] で [Simple Storage Service (S3)] を選択します。
[イベントタイプ] で [Amazon S3 Event Notification] を選択します。
[イベントタイプ仕様 1] で [特定のイベント] を選択します。
[特定のイベント] ドロップダウンリストを選択し、[オブジェクトの作成時] を選択します。
[イベントタイプ仕様 2] で [名前別の特定のバケット] を選択します。
[名前別の特定のバケット] に以前に作成したバケットの名前を入力し、[次へ] を選択します。
- [ターゲットの選択] ** ページで、次の用に選択します。
[ターゲット 1] で [AWS サービス] を選択します。
[ターゲットを選択] ドロップダウンリストを選択し、[Step Functions ステートマシン]** を選択します。
[ステートマシン] ドロップダウンリストを選択し、以前に作成したステートマシンを選択します。
[次へ] を選択します。
- [タグの設定 (オプション)]ページで、[次へ] を選択します。
- [確認と作成] ページで、[ルールを作成] を選択します。
(オプション) S3 バケットのサブフォルダのイベントを監視する
プレフィックスマッチングを使用するようにイベントパターンを変更し、特定の S3 バケットのサブフォルダでイベント通知が発生したときに EventBridge ルールをトリガーします。
次のイベントパターンの例では、example-folder という名前のサブフォルダに S3 オブジェクトが作成されたときに、EventBridge ルールがトリガーされます。
{
"source": [
"aws.s3"
],
"detail-type": [
"Object Created"
],
"detail": {
"bucket": {
"name": [
"bucket-name"
]
},
"object": {
"key": [
{
"prefix": "example-folder"
}
]
}
}
}
注:
- EventBridge で S3 Event Notifications を有効にするために行った変更は、完了に約 5 分かかります。したがって、ルールを有効化した後すぐには、S3 イベントの発生時にトリガーされません。
- ルールがトリガーされない場合は、S3 バケットとイベントルールが同じ AWS リージョンにあることを確認してください。