$ curl -X POST /uploads
Filedrop
A serverless file-delivery pipeline on AWS. One upload request rides through API Gateway → Lambda → S3 → EventBridge → SNS → SQS → Lambda → SES, ending with a signed download link emailed to the sender. It's the whole event-driven pattern in one form submission.
25 MB max file size
15 min upload URL lifetime
24 h download URL lifetime
~2 s upload → link ready (p50)
// how a request flows through it
-
The browser hits
POST /uploadswith a filename + email. A Lambda validates the input, writes anAWAITING_UPLOADrow to DynamoDB with a 48h TTL, and returns a 15-minute presigned S3 PUT URL. - The browser PUTs the file bytes directly to S3 using that URL. No server in the middle, no bytes touched by Lambda.
-
S3 fires an
Object Createdevent to EventBridge. A rule matches theuploads/prefix and invokes theprocessLambda. -
processHEADs the object, re-checks size + extension, and does a conditional DynamoDB update —SET status = UPLOADED IF status = AWAITING_UPLOAD. That condition is the idempotency gate: duplicate S3 deliveries fail it and are dropped silently. -
processpublishes to SNSfiledrop-events. Two SQS queues fan out:notify-queue(filter:event_type = file_uploaded) drives the notify Lambda;audit-queuecatches everything and appends to a separate audit table. - The notify Lambda signs a fresh 24-hour GET URL and hands it to SES, which emails the download link to the address on the upload.
Read the full architecture — with diagrams, IAM breakdown, and failure modes →
$ git clone
Deploy your own copy
The whole stack is Python + AWS CDK — one cdk deploy and
you have your own Filedrop. Source is MIT.