S3バケットでオブジェクトが作成(または更新)されたときに、Lambda関数を起動して何らかの処理を行うユースケースがあります。
Lambda関数を設定した後のオブジェクトについては、イベント発生に基づきLambda関数が実行されますが、それ以前に作成されたオブジェクトについては当然ながらLambda関数は実行されません。
その用途のため、Amazon S3 バッチオペレーションがありますが、利用には少々手間がかかります。
そこで既存のS3オブジェクトに対し、オブジェクト作成イベントに基づくLambda関数を簡単に実行するために開発したのがs3-reinvoke-lambda
コマンドです。
s3-reinvoke-lambda
コマンドはGo言語による複数のプラットフォームに対応したCLIコマンドです。
次のOS向けのビルド済みファイルを提供していますが、必要に応じてコンパイルして利用ください。
- Linux
- Windows
- MacOS
- FreeBSD
Linuxを例に解説します。ご利用のプラットフォームに合わせて読み替えてください。
AWS CLIと認証を設定済みの場合は次のステップに進んでください。
aws configure
該当S3バケットに対するs3:ListObjectV2
、Lambda関数に対するInvokeFunction
が許可されたユーザーを利用ください。
次のリリースページから最新のプログラムをダウンロードし、実行可能な状態にしてください。
wget [ダウンロードURL]
# 例 wget https://github.com/ideamans/s3-reinvoke-lambda/releases/download/v1.0.0/s3-reinvoke-lambda_Linux_x86_64.tar.gz
tar s3-reinvoke-lambda_Linux_x86_64.tar.gz
sudo mv s3-reinvoke-lambda /usr/local/bin
ここでは対象のバケットをthe-bucket
、Lambda関数名をthe-function
とします。
次のコマンドを実行すると、the-bucket
に対する全オブジェクトについて、オブジェクト作成イベントをパラメータとしてthe-function
を起動します。
s3-reinvoke-lambda the-bucket the-function
プロファイルの選択やリージョンの指定はAWS CLIコマンドと同様に可能です。
AWS_PROFILE=my-profile AWS_REGION=ap-northeast-1 s3-reinvoke-lambda the-bucket the-function
次のようにオプションを指定できます。
s3-reinvoke-lambda -P 50 the-bucket the-function
-P N
--parallel N
Lambda関数を起動する並列数です。デフォルトは100です。
-p プレフィックス
--prefix
指定のプレフィックスを持つキー名を処理の対象とします(例images/
)-b 時刻
--mod-before
指定の時刻(RFC3339で指定)より前のオブジェクトのみ対象とします(例2024-06-21T19:49:00+09:00
)。-x 拡張子リスト
--extensions 拡張子リスト
カンマ区切りの小文字による拡張子リスト(例 .jpg,.jpeg,.png)を対象とします。キー名の拡張子は大文字小文字を区別しません。
実際の状況として、Lambda関数を設定した以後は自動的に実行されます。-b
オプションにその時刻を指定して、対象をそれ以前のオブジェクトに絞るのは有効な方法です。
-a キー名
--start-after
指定のキー名より後のオブジェクトから開始します。
なお、ログに表示されるオブジェクトのキー名は、あくまでLambda関数の実行完了順であり、S3における配置の順序とは異なります。
ログの最終行のキー名を指定するのではなく、キー名を昇順ソートした最後のキー名を指定してください。