Skip to content

S3バケットのオブジェクトについて、オブジェクト作成イベントとしてLambda関数を実行するツール

License

Notifications You must be signed in to change notification settings

ideamans/s3-reinvoke-lambda

Repository files navigation

s3-reinvoke-lambda

S3オブジェクト作成イベントによるLambda関数の再実行

S3バケットでオブジェクトが作成(または更新)されたときに、Lambda関数を起動して何らかの処理を行うユースケースがあります。

Lambda関数を設定した後のオブジェクトについては、イベント発生に基づきLambda関数が実行されますが、それ以前に作成されたオブジェクトについては当然ながらLambda関数は実行されません。

その用途のため、Amazon S3 バッチオペレーションがありますが、利用には少々手間がかかります。

そこで既存のS3オブジェクトに対し、オブジェクト作成イベントに基づくLambda関数を簡単に実行するために開発したのがs3-reinvoke-lambdaコマンドです。

クロスプラットフォーム

s3-reinvoke-lambdaコマンドはGo言語による複数のプラットフォームに対応したCLIコマンドです。

次のOS向けのビルド済みファイルを提供していますが、必要に応じてコンパイルして利用ください。

  • Linux
  • Windows
  • MacOS
  • FreeBSD

使い方

Linuxを例に解説します。ご利用のプラットフォームに合わせて読み替えてください。

AWSの設定

AWS CLIと認証を設定済みの場合は次のステップに進んでください。

aws configure

該当S3バケットに対するs3:ListObjectV2、Lambda関数に対するInvokeFunctionが許可されたユーザーを利用ください。

s3-reinvoke-lambdaコマンドのインストール

次のリリースページから最新のプログラムをダウンロードし、実行可能な状態にしてください。

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

s3-reinvoke-lambdaコマンドの実行

ここでは対象のバケットを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における配置の順序とは異なります。

ログの最終行のキー名を指定するのではなく、キー名を昇順ソートした最後のキー名を指定してください。

About

S3バケットのオブジェクトについて、オブジェクト作成イベントとしてLambda関数を実行するツール

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages