Log and store upload events in R2 with event notifications
This example provides a step-by-step guide on using event notifications to capture and store R2 upload logs in a separate bucket.
To continue, you will need:
- A subscription to Workers Paid, required for using queues.
To begin, refer to Install/Update Wrangler to install Wrangler, the Cloudflare Developer Platform CLI.
You will need to create two R2 buckets:
example-upload-bucket
: When new objects are uploaded to this bucket, your consumer Worker will write logs.example-log-sink-bucket
: Upload logs fromexample-upload-bucket
will be written to this bucket.
To create the buckets, run the following Wrangler commands:
Event notifications capture changes to data in example-upload-bucket
. You will need to create a new queue to receive notifications:
Before you enable event notifications for example-upload-bucket
, you need to create a consumer Worker to receive the notifications.
Create a new Worker with C3 (create-cloudflare
CLI). C3 is a command-line tool designed to help you set up and deploy new applications, including Workers, to Cloudflare.
For setup, select the following options:
- For What would you like to start with?, choose
Hello World example
. - For Which template would you like to use?, choose
Hello World Worker
. - For Which language do you want to use?, choose
TypeScript
. - For Do you want to use git for version control?, choose
Yes
. - For Do you want to deploy your application?, choose
No
(we will be making some changes before deploying).
Then, move into your newly created directory:
In your Worker project's wrangler.toml
file, add a queue consumer and R2 bucket binding. The queues consumer bindings will register your Worker as a consumer of your future event notifications and the R2 bucket bindings will allow your Worker to access your R2 bucket.
Add a queue
handler to src/index.ts
to handle writing batches of notifications to our log sink bucket (you do not need a fetch handler):
To deploy your consumer Worker, run the wrangler deploy
command:
Now that you have your consumer Worker ready to handle incoming event notification messages, you need to enable event notifications with the wrangler r2 bucket notification create
command for example-upload-bucket
:
Now you can test the full end-to-end flow by uploading an object to example-upload-bucket
in the Cloudflare dashboard. After you have uploaded an object, logs will appear in example-log-sink-bucket
in a few seconds.