# Event-driven plumbing

> Moving events between services, buffering work, fanning out and streaming records into the lake. Nicolas Dao's picks for this job (Cloudless Labs, Sydney), in order of preference, what he would avoid, and what to use instead.

- Use case 7 of 21 in The Stack, last reviewed 21 October 2026
- Web page: https://cloudlesslabs.com/stack/use-cases/events/

Picks, in order of preference:

1. **[Amazon EventBridge](https://cloudlesslabs.com/stack/aws-eventbridge/index.md)** (My default): Routing: send each event to whoever cares, by its content. Schedules too.
2. **[Amazon SQS](https://cloudlesslabs.com/stack/aws-sqs/index.md)** (My default): Work: buffer, retry, dead-letter, and let Lambda take messages in batches.
3. **[Amazon SNS](https://cloudlesslabs.com/stack/aws-sns/index.md)** (Use when it fits): Fan-out: one event to several queues or functions.
4. **[Amazon Data Firehose](https://cloudlesslabs.com/stack/aws-firehose/index.md)** (My default): Streams into S3: records batched, compressed and written as files for the data lake, with no consumer to write.
5. **[Amazon Kinesis](https://cloudlesslabs.com/stack/aws-kinesis/index.md)** (Use when it fits): Only when several consumers must replay the same ordered stream at high volume.

Don't:

- ~~AWS Step Functions~~: A JSON state machine where a queue and a few lines of JavaScript do the job. Instead: [Amazon SQS](https://cloudlesslabs.com/stack/aws-sqs/index.md) or [Lambda durable functions](https://cloudlesslabs.com/stack/aws-lambda-durable-functions/index.md).

## The picks in brief

- [Amazon EventBridge](https://cloudlesslabs.com/stack/aws-eventbridge/index.md): My default. The event bus and scheduler I use all the time. Pricing: Classic bus: AWS management events are ingested free; custom events $1 per million (billed in 64 KB chunks). Scheduler: 14 million invocations a month free, then $1.20 per million in Sydney. Pipes: $0.40 per million requests. The new Custom Event Bus (September 2026) bills by data instead: in Sydney $0.19 per GB ingested (first 5 TB) and $0.058 per GB delivered to each subscriber.
- [Amazon SQS](https://cloudlesslabs.com/stack/aws-sqs/index.md): My default. The queue in front of Lambda. Natural back-pressure, nearly free when batched. Pricing: Sydney: $0.40 per million requests (Standard), $0.50 (FIFO). A request carries up to 10 messages, so batching cuts the bill tenfold: 50M messages ≈ $6 batched, $60 unbatched.
- [Amazon SNS](https://cloudlesslabs.com/stack/aws-sns/index.md): Use when it fits. Fan-out from one publisher to many subscribers. Not my ingestion path at high volume. Pricing: Sydney: first 1M publishes a month free, then $0.50 per million (each 64 KB of payload counts as one). Deliveries to SQS and Lambda cost nothing; HTTPS deliveries $0.60 per million, email $2 per 100,000. Payload-based filtering $0.11/GB scanned; attribute-based filtering is free.
- [Amazon Data Firehose](https://cloudlesslabs.com/stack/aws-firehose/index.md): My default. The cheapest way to land a stream of records in S3. No servers, no consumers to write, and about $0.04/GB in Sydney. Pricing: Sydney, Direct PUT: $0.037/GB ingested (first 500 TB), billed per record in 5 KB steps. JSON to Parquet conversion $0.023/GB. Dynamic partitioning $0.025/GB plus per-object fees (avoidable). Then normal S3 storage.
- [Amazon Kinesis](https://cloudlesslabs.com/stack/aws-kinesis/index.md): Use when it fits. For genuinely huge streams. It gets expensive fast. Pricing: Sydney, on-demand: $0.049 per stream-hour (about $36 a month per stream, even idle), $0.098 per GB written, $0.049 per GB read. Provisioned: $0.0184 per shard-hour plus $0.0195 per million 25 KB put units. Extended retention and enhanced fan-out cost extra.

## Related

- [APIs, queues and events](https://cloudlesslabs.com/stack/layers/api-events/index.md): every tool in this layer
- [Every use case and tool in one file](https://cloudlesslabs.com/stack/brief.md)
- [Map of every Markdown file on cloudlesslabs.com, with what each one answers](https://ask.cloudlesslabs.com)
