はじめに
今回は2023/10/3アップデートの【Amazon EventBridgeがルールでのワイルドカードフィルターのサポートを開始した件】についての検証結果をご紹介いたします。
目次
・検証するアップデート内容について
・prefix・suffixとの違い
・簡単な図解
・利用サービスと準備するもの
・検証方法
・環境構築
・検証結果
・注意
・おわりに
・参考
検証するアップデート内容について
Amazon EventBridgeのルールにおいて、 アップデート前まではワイルドカードが使用できなかったが、今回のリリースによりワイルドカードフィルターがサポートされるようになったというのがアップデートの内容です。
prefix・suffixとの違い
今回のアップデートの以前から、EventBridgeのルールでは、「prefix」「suffix」を使用してフィルタリングすることが可能でした。
そもそも、prefix・suffixって?
prefix(接頭辞)
・値の頭の文字列と一致させる機能
例)「test_○○○」と一致するオブジェクトが格納されたらlambdaを実行
suffix(接尾辞)
・値の末尾の文字列と一致させる機能
例)「○○○.csv」と一致するオブジェクトが格納されたらlambdaを実行
prefix・suffixとワイルドカードの違い
prefix・suffixは、「値の頭」「値の末尾」のように片方しか指定することが出来ません。
それに対してワイルドカードは、「値の頭と末尾」どちらも指定することが出来ます。
prefix・suffixをワイルドカードのように使えないのか?
例えば 【「値の頭が"test_"かつ、末尾が".csv"」のオブジェクトが格納されたらlambdaを実行】 というルールにしたい場合、【prefix"test_" AND suffix".csv"】 と設定すればワイルドカードのように使えそうです。
しかし、prefixとsuffixをANDで繋げることは出来ません。
prefixとsuffixを同時に設定した場合、それらは 「OR条件」 として扱われます。
こちらは後程ワイルドカードの検証と併せて確認を行います。
簡単な図解
アップデート前後でどのような変化があったのかを、
【S3バケットに「値の頭が"test_"かつ、末尾が".csv"のオブジェクト」が配置されたら、lambda関数を実行する】というルールをEventBridgeで設定したい場合を例に、ご説明します。
アップデート前
アップデート前はワイルドカードが使用できなかったため、フォルダを分けるなどして対応する必要がありました。
アップデート後
アップデート後はワイルドカードが使用できるようになったため、希望の挙動をそのまま実行することが可能になりました。
利用サービスと準備するもの
・Lambda
Lambda関数×1
・S3
バケット×1
・EventBridge
ルール×4
①ワイルドカード:"test_*.csv"
②prefix:"test_"
③surfix:".csv"
④prefix:"test_"、surfix:".csv"
・IAM
IAMロール×1
<ポリシー>
AWSLambda_FullAccess
AmazonS3FullAccess
AmazonEventBridgeFullAccess
・アップロードするファイル×4
①test_0001.csv
②test_0001.pdf
③temp_0001.csv
④temp_0001.pdf
検証方法
今回は、先ほどアップデート後の図解として載せた内容で検証を行います。
検証の流れは下記ステップです。
【環境構築】
① IAM にてS3・lambda・eventbridgeのフルアクセス権限を付与
② 検証用のS3バケット作成
Amazon EventBridgeへの通知の送信を有効化
③ lambda関数を作成
④ eventbridgeでイベントバスを設定
⑤ eventbridgeでルールを作成
【検証】
① イベントバスで「イベントの検出を開始」
② S3バケットにファイルを配置
③ lambda関数が実行されたかを確認
※eventbridgeで対象のルールを選択し、モニタリング「MatchedEvents」で結果を確認
環境構築
先程記載した環境構築①~⑤のうち、ポイントとなる②・⑤のみ詳細を記載します。
Amazon EventBridgeへの通知の送信を有効化
環境構築手順②で検証用のS3バケットを作成した際、バケットのプロパティでEventBridgeへの通知の送信を有効化します。
こちらを有効化していないと、バケットにオブジェクトを配置しても、eventbridgeに通知されないため、注意が必要です。
eventbridgeでルールを作成
ルールタイプ
「イベントパターンを持つルール」に設定
イベントパターン
ルール①(ワイルドカード "test_*.csv")
:②で作成したS3の「eventbridge-wildcard-test」バケットに「値の頭が"test_"かつ、末尾が".csv"のファイルが「アップロード」
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["eventbridge-wildcard-test"]
},
"object": {
"key": [{
"wildcard": "test_*.csv"
}]
}
}
}
prefix・surfixのルールも同様に作成します。
ルール②(prefix "test_")
:②で作成したS3の「eventbridge-wildcard-test」バケットに「値の頭が"test_"のファイルが「アップロード」
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["eventbridge-wildcard-test"]
},
"object": {
"key": [{
"prefix": "test_"
}]
}
}
}
ルール③(surfix ".csv")
:②で作成したS3の「eventbridge-wildcard-test」バケットに「末尾が".csv"のファイルが「アップロード」
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["eventbridge-wildcard-test"]
},
"object": {
"key": [{
"suffix": ".csv"
}]
}
}
}
ルール④(prefix "test_"、surfix ".csv")
:②で作成したS3の「eventbridge-wildcard-test」バケットに「値の頭が"test_"、または末尾が".csv"」のファイルが「アップロード」
※Event Bridgeは括弧で囲まれた複数の値をOR条件として扱う(AND条件を適用することは出来ない)
{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["eventbridge-wildcard-test"]
},
"object": {
"key": [{
"prefix": "test_"
}, {
"suffix": ".csv"
}]
}
}
}
ターゲット
ターゲットタイプを「AWSのサービス」にし、③で作成したlambda関数をターゲットに設定
検証結果
結果の概要
想定通り、設定した通りのルールでlambda関数が実行されました。
詳細な結果は下記で記載いたします。
パターン①:「test_0001.csv」をアップロードした場合
ルール①(ワイルドカード:"test_*.csv")
⇒ eventが検出される(値の頭が"test_"かつ、末尾が".csv"のため)
ルール②(prefix:"test_")
⇒ eventが検出される(値の頭が"test_"のため)
ルール③(surfix:".csv")
⇒ eventが検出される(値の末尾が".csv"のため)
ルール④(prefix:"test_"、surfix:".csv")
⇒ eventが検出される(値の頭が"test_"、末尾が".csv"のため)
パターン②:「test_0001.pdf」をアップロードした場合
ルール①(ワイルドカード:"test_*.csv")
⇒ eventが検出されない(値の頭は"test_"だが、値の末尾が".csv"ではないため)
ルール②(prefix:"test_")
⇒ eventが検出される(値の頭が"test_"のため)
ルール③(surfix:".csv")
⇒ eventが検出されない(値の末尾が".csv"ではないため)
ルール④(prefix:"test_"、surfix:".csv")
⇒ eventが検出される(値の頭が"test_"のため)
※prefix・surfixがOR条件になっているため、値の末尾が".csv"でなくてもeventが検出されてしまう
パターン③:「temp_0001.csv」をアップロードした場合
ルール①(ワイルドカード:"test_*.csv")
⇒ eventが検出されない(値の末尾は".csv"だが、値の頭が"test_"ではないため)
ルール②(prefix:"test_")
⇒ eventが検出されない(値の頭が"test_"ではないため)
ルール③(surfix:".csv")
⇒ eventが検出される(値の末尾が".csv"のため)
ルール④(prefix:"test_"、surfix:".csv")
⇒ eventが検出される(値の末尾が".csv"のため)
※prefix・surfixがOR条件になっているため、値の頭が"test_"でなくてもeventが検出されてしまう
パターン④:「temp_0001.pdf」をアップロードした場合
ルール①(ワイルドカード:"test_*.csv")
⇒ eventが検出されない(値の頭が"test_"ではない、値の末尾が".csv"ではないため)
ルール②(prefix:"test_")
⇒ eventが検出されない(値の頭が"test_"ではないため)
ルール③(surfix:".csv")
⇒ eventが検出されない(値の末尾が".csv"ではないため)
ルール④(prefix:"test_"、surfix:".csv")
⇒ eventが検出されない(値の頭が"test_"ではない、値の末尾が".csv"ではないため)
・prefix・surfixはOR条件になるため、ワイルドカードの代わりにはならない
・文頭・末尾どちらも条件を入れたい場合は、ワイルドカードを使用
片方でいい場合はワイルドカード・またはprefix・surfixを使用する
注意
ワイルドカードを使用して作成するルールについて、複雑すぎるものはエラーとなり正しく実行されません。
具体的な例を下記に記載します。
①ワイルドカード文字を連続して使用する
ワイルドカードが連続している場合、エラーが表示されることがあります。
ワイルドカード文字は、本当に複数の文字と照合する必要がある場合にのみ使用する必要があります。
{
"EventBusArn": [ { "wildcard": "*:*:*:*:*:event-bus/*" } ]
}
※AWS公式サイトから引用
②ワイルドカード使用後に同じ文字列を多用する
ワイルドカード使用後に同じ文字列を複数回使用するとイベントパターンの処理が複雑になり、エラーが表示されることがあります。
{
"FileName": [ { "wildcard": "/Users/*/dir/dir/dir/dir/dir/doc.txt" } ]
}
※AWS公式サイトから引用
現在、ワイルドカード文字はイベントバスルールでのみサポートされています
おわりに
今回はAmazon EventBridgeのワイルドカードフィルターについての検証を実施しました。
一部制限はありますが、ワイルドカード使用で集約可能なルールもあるかと思いますので、既存のルールの見直しをしてみるのも良いかもしれません。
参考
株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area