リサイズLambda関数を何度もトリガーしないようにするには、オブジェクト・キーに一意な識別子を使用し、リサイズ関数をトリガーする前にその識別子が存在するかどうかをチェックします。

S3にファイルをアップロードし、Lambda関数でリサイズするシステムの可能な設計の1つを以下に示す：

ユーザーがS3にファイルをアップロードすると、S3の "Put "イベントがトリガーされる。
S3イベントは、アップロードされたファイルの処理を担当するLambda関数（ここでは "コントローラ "関数と呼ぶ）を呼び出す。
コントローラ関数は、一意の識別子（例えばタイムスタンプ）を生成し、元のファイルキーに追加する。
コントローラ関数は、新しいキーを持つオブジェクトがS3に存在するかどうかをチェックする。
オブジェクトが存在しない場合、コントローラ関数は、新しいキーを入力としてリサイズLambda関数（"リサイザ "関数と呼ぶ）をトリガする。
リサイザー関数はファイルのサイズを変更し、新しいキーの下にS3に保存する。
オブジェクトが既に存在する場合、コントローラ関数は終了し、リサイザ関数はトリガされない。
この設計により、リサイザ関数は一意のファイルにつき一度だけトリガーされ、リサイズされたファイルは一意のキーの下に保存される。
To prevent triggering the resize Lambda function multiple times, you can use a unique identifier in the object key and check if it exists before triggering the resize function.

Here's one possible design of a system that uploads a file to S3 and resizes it with a Lambda function:

The user uploads a file to S3, which triggers a S3 "Put" event.
The S3 event invokes a Lambda function (let's call it the "controller" function) that is responsible for processing the uploaded file.
The controller function generates a unique identifier (e.g., a timestamp) and appends it to the original file key.
The controller function checks if an object with the new key exists in S3.
If the object does not exist, the controller function triggers the resize Lambda function (let's call it the "resizer" function) with the new key as input.
The resizer function resizes the file and stores it in S3 under the new key.
If the object already exists, the controller function terminates and does not trigger the resizer function.
This design ensures that the resizer function is triggered only once per unique file, and that the resized file is stored under a unique key.