S3にファイルをアップロードし、AWS Lambdaを使用してサイズを変更するシステムで、resize Lambda関数を複数回トリガーすることなく、可能な設計の1つを紹介します：

ユーザーはファイルをS3バケットにアップロードする。
S3は "Put Object "イベントを生成し、Lambda関数をトリガーする。
Lambda関数は、アップロードされたファイルが既にリサイズされているかどうかを、リサイズされたファイルが同じS3バケットに同じキーで異なる拡張子（例えば".resized"）で存在するかどうかでチェックする。
リサイズされたファイルが存在する場合、Lambda関数はそれ以上何もせずにリターンします。
リサイズされたファイルが存在しない場合、Lambda関数はS3から元のファイルを読み込み、リサイズ操作を実行し、リサイズされたファイルを同じキーで異なる拡張子を持つS3に書き戻します。
Lambda関数は、ファイルがリサイズされたことを示すフラグでS3のオリジナルファイルのメタデータを更新します。
この設計により、Lambda関数はアップロードされたファイルごとに1回だけトリガーされ、リサイズされたファイルは元のファイルと同じキーで同じS3バケットに保存されるため、リサイズされたファイルの追跡が容易になります。
Here's one possible design for a system that uploads a file to S3 and resizes it using AWS Lambda, without triggering the resize Lambda function multiple times:

The user uploads a file to an S3 bucket.
S3 generates a "Put Object" event and triggers a Lambda function.
The Lambda function checks if the uploaded file has already been resized by checking if the resized file exists in the same S3 bucket with the same key but a different file extension (e.g. ".resized").
If the resized file exists, the Lambda function returns without doing anything further.
If the resized file does not exist, the Lambda function reads the original file from S3, performs the resize operation, and writes the resized file back to S3 with the same key but with a different file extension.
The Lambda function updates the metadata of the original file in S3 with a flag indicating that the file has been resized.
This design ensures that the Lambda function is only triggered once for each uploaded file, and that the resized file is stored in the same S3 bucket with the same key as the original file, making it easier to keep track of the resized files.