← Cloudflare R2 / r2 / tutorials
Регистрируйте и сохраняйте события загрузки в R2 с помощью уведомлений о событиях
В этом примере пошагово показано, как использовать уведомления о событиях чтобы фиксировать и сохранять журналы загрузок R2 в отдельном бакете.
1. Установить Wrangler
Для начала обратитесь к Установка/Обновление Wrangler чтобы установить Wrangler, CLI платформы Cloudflare Developer Platform.
2. Создать бакеты R2
Вам нужно будет создать два бакета R2:
example-upload-bucket: при загрузке новых объектов в этот бакет ваш Worker-получатель будет записывать логи.example-log-sink-bucket: загрузка журналов изexample-upload-bucketбудут записаны в этот бакет.
Чтобы создать бакеты, выполните следующие команды Wrangler:
npx wrangler r2 bucket create example-upload-bucket
npx wrangler r2 bucket create example-log-sink-bucket3. Создать очередь
Уведомления о событиях фиксируют изменения данных в example-upload-bucket. Вам потребуется создать новую очередь для получения уведомлений:
npx wrangler queues create example-event-notification-queue4. Создать Worker
Прежде чем включить уведомления о событиях для example-upload-bucket, вам нужно создать Worker-получатель чтобы получать уведомления.
Создайте новый Worker с помощью C3 (create-cloudflare CLI). C3 это инструмент командной строки, который помогает настраивать и развёртывать новые приложения, включая Workers, в Cloudflare.
npm create cloudflare@latest -- consumer-workerДля настройки выберите следующие параметры:
- Для С чего вы хотите начать?, выберите
Hello World example. - Для Какой шаблон вы хотите использовать?, выберите
Worker only. - Для Какой язык вы хотите использовать?, выберите
TypeScript. - Для Хотите использовать git для контроля версий?, выберите
Yes. - Для Хотите развернуть приложение?, выберите
No(мы внесём некоторые изменения перед развёртыванием).
Затем перейдите в только что созданный каталог:
cd consumer-worker5. Настроить Worker
В проекте вашего Worker [конфигурационный файл Wrangler](/workers/wrangler/configuration/), добавьте потребитель очереди и Привязка бакета R2. Привязки consumer очередей зарегистрируют ваш Worker в качестве получателя будущих уведомлений о событиях, а привязки бакета R2 предоставят Worker доступ к вашему бакету R2.
{
"$schema": "./node_modules/wrangler/config-schema.json",
"name": "event-notification-writer",
"main": "src/index.ts",
// Set this to today's date
"compatibility_date": "2026-08-28",
"compatibility_flags": [
"nodejs_compat"
],
"queues": {
"consumers": [
{
"queue": "example-event-notification-queue",
"max_batch_size": 100,
"max_batch_timeout": 5
}
]
},
"r2_buckets": [
{
"binding": "LOG_SINK",
"bucket_name": "example-log-sink-bucket"
}
]
}"$schema" = "./node_modules/wrangler/config-schema.json"
name = "event-notification-writer"
main = "src/index.ts"
# Set this to today's date
compatibility_date = "2026-08-28"
compatibility_flags = [ "nodejs_compat" ]
[[queues.consumers]]
queue = "example-event-notification-queue"
max_batch_size = 100
max_batch_timeout = 5
[[r2_buckets]]
binding = "LOG_SINK"
bucket_name = "example-log-sink-bucket"6. Запись сообщений уведомлений о событиях в R2
Добавьте queue обработчик к src/index.ts чтобы обрабатывать запись пакетов уведомлений в наш бакет для сбора журналов (вам не нужен обработчик fetch):
export interface Env {
LOG_SINK: R2Bucket;
}
export default {
async queue(batch, env): Promise<void> {
const batchId = new Date().toISOString().replace(/[:.]/g, "-");
const fileName = `upload-logs-${batchId}.json`;
// Serialize the entire batch of messages to JSON
const fileContent = new TextEncoder().encode(
JSON.stringify(batch.messages),
);
// Write the batch of messages to R2
await env.LOG_SINK.put(fileName, fileContent, {
httpMetadata: {
contentType: "application/json",
},
});
},
} satisfies ExportedHandler<Env>;7. Развернуть Worker
Чтобы развернуть Worker-получатель, выполните wrangler deploy команда:
npx wrangler deploy8. Включить уведомления о событиях
Теперь, когда Worker-получатель готов обрабатывать входящие сообщения с уведомлениями о событиях, включите уведомления о событиях с помощью wrangler r2 bucket notification create команда для example-upload-bucket:
npx wrangler r2 bucket notification create example-upload-bucket --event-type object-create --queue example-event-notification-queue9. Тестирование
Теперь можно протестировать полный сквозной процесс, загрузив объект в example-upload-bucket в панели управления Cloudflare. После загрузки объекта логи появятся в example-log-sink-bucket через несколько секунд.