このシステムで可能な設計は、Amazon S3とAWS Lambdaの組み合わせと、メタデータを保存し重複を防ぐためのDynamoDBテーブルを使用することだろう。以下は、このプロセスのハイレベルな概要だ：

1.ユーザーがファイルを指定のS3バケットにアップロードし、元のファイル名をキーとして保存する。
2.S3バケットは、新しいファイルを受け取るとLambda関数をトリガーする。Lambda関数は、DynamoDBのテーブルでファイル名を検索することで、ファイルが既に処理されているかどうかをチェックする。
3.DynamoDBのテーブルにファイルが見つからない場合、Lambda関数はS3からファイルを読み込み、サイズを変更し、元のファイルと同じキー（ファイル名）でリサイズしたファイルをS3に書き戻す。その後、Lambda関数はDynamoDBテーブルにファイルのエントリを追加します。
4.DynamoDBテーブルにファイルが見つかった場合、Lambda関数はリサイズを行わず終了します。

このアプローチでは、元のファイルとS3内のリサイズされたファイルの両方のキーとしてファイル名を使用するため、元のファイル名が保持されます。DynamoDBのテーブルは、同じファイルが何度もリサイズされるのを防ぐ重複排除メカニズムとして機能する。Lambda関数は、ファイルごとに1回だけトリガーされ、以前に処理されたことがない場合にのみファイルのサイズを変更します。
A possible design for this system would be to use a combination of Amazon S3 and AWS Lambda with a DynamoDB table to store metadata and prevent duplicates. Here's a high-level overview of the process:

1. User uploads a file to a designated S3 bucket, where it is stored with its original filename as the key.
2. S3 bucket triggers a Lambda function upon receiving a new file. The Lambda function checks if the file has already been processed by looking up its filename in a DynamoDB table.
3. If the file is not found in the DynamoDB table, the Lambda function reads the file from S3, resizes it, and writes the resized file back to S3 with the same key (filename) as the original file. The Lambda function then adds an entry for the file in the DynamoDB table.
4. If the file is found in the DynamoDB table, the Lambda function does not perform any resizing and exits.

This approach uses the filename as the key for both the original file and the resized file in S3, ensuring that the original filenames are preserved. The DynamoDB table serves as a deduplication mechanism to prevent the same file from being resized multiple times. The Lambda function is triggered only once per file and will only resize a file if it has not been processed before.