🤖
EventBridge+S3のsuffix(preffix)条件付きイベント検知をでCDKで構築する
目的
- S3に特定のsuffix(".txt"とか)のオブジェクト追加を検知してLambdaを起動させたい
- その仕組みをCDKで構築する
参考にした記事やブログ
※該当しているっぽいissueは直接的な実装参考とはなりませんでした。
内容、CDKでの実装方法
S3バケットを作成する際にeventBridgeEnabledをtrueに設定する
// Bucket の作成
const bucket = new s3.Bucket(this, `Sample-EventBridge-S3-Bucket`, {
eventBridgeEnabled: true,
bucketName: 'XXX'
});
v2.20.0以降のバージョンでは、class Bucket (construct)にあるように、この設定だけでEventBridgeに通知を送ることができるようになる。
とのことです。
EventBridgeルールを生成する
// EventBridge Rule作成
const rule = new events.Rule(this, `Sample-EventBridge-S3-Rule`, {
ruleName: `Sample-EventBridge-S3-Rule`,
eventPattern: {
source: [
"aws.s3"
],
detailType: ["Object Created"],
resources: [bucket.bucketArn],
detail: {
"object": {
"key": [{
"suffix": ".txt"
}]
}
}
},
targets: [new LambdaFunction(fn)],
});
ここで、detailの中に、object > key > suffix を設定することで実現したいFilteringを構築できました。この内容は参考にしたブログ内もある実際にsuffixを設定する場合に設定されるJSONと同じになります。targetsでLambdaを設定していますが、Lambdaの定義は省略しています。
※もっと良いやり方があれば教えてください。
ソースコード
こちらにコードを置いてあります。
まとめ
ほぼ自分の備忘録目的の記事になりますが、suffixの設定に少し手こずったので、同様のことをしたい人の参考になれば幸いです。
Discussion