---
title: Glue Zero-ETL vs DMS vs Firehose vs AppFlow
description: A lab table landed twice: Zero-ETL and DMS on the same rows. Self-managed databases replicate only to Redshift. Firehose Direct PUT into Iceberg is capped at 5 MiB/s in three regions, and database CDC was removed on 24 September 2025.
url: https://www.factualminds.com/blog/glue-zero-etl-vs-dms-vs-firehose-vs-appflow/
datePublished: 2026-10-04T00:00:00.000Z
dateModified: 2026-10-04T00:00:00.000Z
author: palaniappan-p
category: Data & Analytics
tags: aws, aws-glue, aws-dms, amazon-data-firehose, amazon-appflow, amazon-s3
---

# Glue Zero-ETL vs DMS vs Firehose vs AppFlow

> A lab table landed twice: Zero-ETL and DMS on the same rows. Self-managed databases replicate only to Redshift. Firehose Direct PUT into Iceberg is capped at 5 MiB/s in three regions, and database CDC was removed on 24 September 2025.

A lab table named `lab-orders` landed twice. Glue Zero-ETL and a DMS task both wrote the same rows. The source was self-managed PostgreSQL, and the diagram pointed Zero-ETL at S3 Tables. A third arrow called Firehose the CDC path.

If the target is **Aurora**, stop and use the [DMS to Aurora playbook](/blog/aws-database-migration-dms-aurora-playbook-2026/). If the warehouse is **already Redshift**, stop and use the [Redshift modernization playbook](/blog/aws-redshift-data-warehouse-modernization-playbook-2026/). This article is the pair those two pages do not decide: which managed mover, for which source, into which target.

Checked against the AWS docs on **4 October 2026**. The [Glue Zero-ETL page](https://docs.aws.amazon.com/glue/latest/dg/zero-etl-using.html) says self-managed Oracle, SQL Server, MySQL, and PostgreSQL replicate **only to an Amazon Redshift data warehouse**. Other targets are not supported. [Firehose's document history](https://docs.aws.amazon.com/firehose/latest/dev/history.html) records that database-as-a-source, a public preview, was **removed on 24 September 2025**. [Direct PUT into Apache Iceberg](https://docs.aws.amazon.com/firehose/latest/dev/apache-iceberg-considerations.html) is limited to **5 MiB/s** in US East (N. Virginia), US West (Oregon), and Europe (Ireland), and **1 MiB/s** in other regions. Those three facts are the decision. A pipeline team is what you build after you ignore them.

![Lab figure of three pairs: DynamoDB into S3 Tables, self-managed PostgreSQL restricted to Redshift, and Firehose marked as not database CDC. Not a customer account.](../../assets/images/blog/glue-zero-etl-vs-dms-vs-firehose-vs-appflow-01.webp)

*Lab figure, 4 October 2026. Not a customer account. One source, one target, one mover. A self-managed database does not take the S3 Tables Zero-ETL path.*

> **Reproduce this** — Copy the [source-target matrix](/examples/architecture-blog-2026/data-movers/source-target-matrix.md). One row per table or stream. Two movers on one row is a defect, not a design.

## The source list you are allowed to use

Glue Zero-ETL sources, as that page lists them:

- **AWS services:** Amazon DynamoDB, and Oracle at AWS (Oracle Database@AWS).
- **SaaS:** Facebook Ads, Instagram Ads, Salesforce, Salesforce Marketing Cloud Account Engagement, SAP OData, ServiceNow, Zendesk, Zoho CRM.
- **Self-managed databases:** Oracle, SQL Server, MySQL, PostgreSQL. **Redshift only.**

Targets on the same page: a general-purpose S3 bucket through the SageMaker lakehouse, **S3 Tables** through that lakehouse, Redshift Managed Storage through that lakehouse, and an Amazon Redshift data warehouse. S3 Tables as a Zero-ETL target is not a raw `PutObject` you schedule yourself. It is the integration.

Re-read that page in the week you build. The list moves. Do not freeze a pair this article named if the docs have dropped it.

[AppFlow](https://docs.aws.amazon.com/appflow/latest/userguide/app-specific.html) is a current service. It is not deprecated. Its catalog is wider than Glue's SaaS list (Slack, Marketo, Google Analytics, and others) and its destinations include Snowflake, which the Glue Zero-ETL target list above does not. Where the same SaaS source appears on both lists and your target is S3 Tables or Redshift, prefer Glue Zero-ETL. Use AppFlow when Glue has no source, or when the destination is one AppFlow has and Zero-ETL does not.

Firehose sources are streams and delivery APIs: Direct PUT, Kinesis, and the log subscriptions it documents. Iceberg, including S3 Tables, can be a **destination** for those records. After 24 September 2025 it is not how you read PostgreSQL or MySQL. The 5 MiB/s Direct PUT cap is why a database dump disguised as a stream will throttle. Ask for a limit increase, or do not use Direct PUT for that volume. That cap is not a reason to call Firehose CDC.

DMS is the general change-data-capture tool, including an S3 target. Use it when the source is a database and the target is not a Zero-ETL pair you are allowed to use. The [CDC into S3 Tables](/blog/cdc-into-s3-tables-lakehouse/) article is the lake shape. This article only chooses the mover.

## Pick one

| Source | Target | Mover | Who operates it | Do not also run |
| --- | --- | --- | --- | --- |
| DynamoDB, Oracle at AWS, or a Glue-listed SaaS app | S3 Tables, general-purpose S3 via the SageMaker lakehouse, or Redshift | Glue Zero-ETL | Glue integration. You do not run a pipeline cluster for the copy. | DMS or AppFlow on the same objects |
| Self-managed Oracle, SQL Server, MySQL, or PostgreSQL | Redshift | Glue Zero-ETL | Same, and the target restriction is the point | A second copy into S3 "just in case" |
| Self-managed or RDS database that must land in S3 or S3 Tables | S3, then the lake | DMS CDC | A replication instance and a task. The playbook if the *target* is Aurora | Zero-ETL, which will not take that target |
| Kinesis, logs, or Direct PUT records | S3, Redshift, Iceberg, or S3 Tables | Firehose | Buffer and destination settings. Not a database log | DMS, unless the stream was produced by DMS on purpose |
| SaaS app Glue Zero-ETL does not list | S3, Redshift, Snowflake, or another AppFlow destination | AppFlow | A flow and the SaaS authorization | A custom connector you will own |

Latency follows the mover. Zero-ETL and DMS CDC are replication, not a nightly file. Firehose delivers on the buffer you configure, and the Iceberg throughput cap above is a hard planning number for Direct PUT. AppFlow runs on the schedule or event you set for that flow. If someone promises "real time" for all four, they have not picked a row.

We recommend Zero-ETL over a new Glue job when the source-target pair is on the list. We recommend DMS over Zero-ETL when the lake is the target and the source is a self-managed database. We recommend Firehose over DMS when there is no database. The trade-off of Zero-ETL is a fixed pair: you do not get an arbitrary transform in the mover. Put the transform after the land, or pick a different tool. Do not hide a pipeline inside the integration and call it zero.

## Where this fails

![Lab figure showing two writers on one table, then one writer with the lake count matching the source. Not a customer account.](../../assets/images/blog/glue-zero-etl-vs-dms-vs-firehose-vs-appflow-02.webp)

*Lab figure, 4 October 2026. Not a customer account. The check is one writer per table. The lake row count should match the source.*

Two movers, one table. Zero-ETL into S3 Tables and a DMS task into the same Iceberg table both apply inserts. The lake's row count climbs past the source. Detection is that count, or a duplicate key, not a task status that still says "running." The fix is to stop one mover. Adding a dedupe job is a third pipeline.

The other failure is a self-managed PostgreSQL database pointed at S3 Tables because the console showed Zero-ETL. The note on the Glue page is the spec: that source class replicates only to Redshift. If the integration cannot be created, that is the product working. The lake path is DMS, documented in the CDC article. The warehouse path is the Redshift playbook.

A third, quieter failure: Firehose "CDC" designed from the 2024 preview. The preview ended. Document history says the source was removed on 24 September 2025. A design that still names it will not be created. Use DMS for the database.

## What to Do This Week

1. List the tables or streams, not the platform. One row each in the matrix.
2. If any row's target is Aurora, move that row to the DMS playbook and out of this design.
3. If any row's target is Redshift and the warehouse is already chosen, move that row to the Redshift playbook.
4. For what remains, mark the Glue pair legal or illegal using the source list above, then re-check the live page.
5. Delete the second mover. Then take the estate, if it is more than a pilot, to [data analytics](/services/aws-data-analytics/).

## What This Post Doesn't Cover

Compaction, small files, MERGE volume, and Glue job bookmarks are other articles. Aurora cutover checklists and LOB lag stay on the DMS playbook. This page does not list every AppFlow connector. It does not quote a region matrix beyond the Firehose Iceberg caps cited above. Confirm the Glue source list again before you build. A pair that was legal in October 2026 may not be the pair in the console you open next month.

## FAQ

### Which service should land this data?
Match the source and the target, then pick one mover. Glue Zero-ETL when the pair is on the Glue source list and the target is allowed for that source. DMS when the source is a database Zero-ETL will not land where you need it. Firehose when the input is already a stream, a log, or a Direct PUT, not a database log. AppFlow when the SaaS connector is not a Glue Zero-ETL source.

### When should we not use Glue Zero-ETL into S3 Tables?
When the source is a self-managed Oracle, SQL Server, MySQL, or PostgreSQL database. The Glue Zero-ETL page says those sources replicate only to an Amazon Redshift data warehouse. Other targets are not supported. Use DMS into S3, then a MERGE, or use Zero-ETL into Redshift and stop calling it a lake ingest.

### Is Amazon Data Firehose database CDC?
Not as a current feature. Database as a source was a public preview and the Firehose document history records its removal on 24 September 2025. Firehose can still deliver streaming records to Apache Iceberg tables, including S3 Tables. That is a stream destination. It is not a reader of a database transaction log.

### Is Amazon AppFlow deprecated?
No. The AppFlow user guide still lists a long set of SaaS sources and destinations, including several that Glue Zero-ETL also lists. Prefer Zero-ETL when both the source and your target are on the Glue list. Use AppFlow for a connector Glue does not list, or for a destination Glue Zero-ETL does not offer.

### What breaks if two movers write the same table?
You get two change streams and one table. Duplicate rows, or a commit conflict, show up as a row count that no longer matches the source. Pick one mover per source table. Do not run Zero-ETL and DMS against the same table into the same sink.

### Where do Aurora cutover and an existing Redshift warehouse go?
If the target is Aurora, use the DMS to Aurora playbook. If you have already chosen Redshift, use the Redshift modernization playbook for warehouse Zero-ETL. This article is the source-and-target pair when that choice is not already made.

---

*Source: https://www.factualminds.com/blog/glue-zero-etl-vs-dms-vs-firehose-vs-appflow/*
