AWS DMS to Snowflake: S3, Snowpipe & CDC Guide
AWS DMS does not list Snowflake as a direct target. Learn the DMS-to-S3-to-Snowflake pattern, CDC controls, validation evidence, and cutover gates.
AWS Database Migration Service does not list Snowflake as a direct data-migration target. An AWS DMS-to-Snowflake pipeline therefore needs an intermediate boundary. A common supported pattern is: source database to AWS DMS, AWS DMS to Amazon S3, then a Snowflake external stage loaded with COPY INTO or Snowpipe into landing tables and governed target models. That architecture can support an initial full load followed by change data capture, but only when each handoff has its own controls. A healthy DMS task proves extraction is running. It does not, by itself, prove every S3 object loaded into Snowflake, every change was applied once, or downstream reports match the source.
Why Amazon S3 sits between AWS DMS and Snowflake
AWS lists Amazon S3 as a DMS target and documents full-load and CDC output to S3. AWS states that DMS writes CSV by default and can write Parquet when configured. Snowflake can load files from an external stage that references S3 by using COPY INTO, or it can queue new files through Snowpipe auto-ingest.
The S3 boundary is useful because it separates extraction from ingestion and leaves durable transfer evidence. It also creates responsibilities that must be designed. Do not describe this as a direct connector: the architecture is reliable only when those states can be reconciled end to end.
| Layer | Responsibility | Evidence needed |
|---|---|---|
| Source database | Provide stable keys, transaction logs, and extraction access | Snapshot time, log position, schema version |
| AWS DMS | Execute full load and capture source changes | Task state, table statistics, latency, emitted-file counts |
| Amazon S3 | Retain transfer objects securely and predictably | Object keys, sizes, timestamps, encryption, lifecycle policy |
| Snowflake stage and loader | Queue and load each intended file | Pipe status, load history, rejected rows, error details |
| Landing and target models | Apply operations deterministically | Applied sequence, duplicate checks, delete behavior, reconciliation |
| Business consumers | Confirm the migrated outcome is usable and correct | Report or API parity and named approval |
Choose CSV or Parquet deliberately
AWS DMS writes CSV to S3 by default and also supports Parquet output for more compact columnar storage. The choice affects the file contract, validation options, data-type handling, and downstream loading design.
AWS S3 target validation has additional prerequisites and limitations. The current AWS documentation states that S3 validation uses Athena, requires Parquet, and validates CDC intervals daily. Treat it as one control in the chain, not as proof of end-to-end Snowflake parity.
- File format and compression.
- Schema and table folder convention.
- Historical-load and CDC prefixes.
- File-size and batch-interval settings.
- Operation indicator and timestamp settings.
- Encryption and KMS ownership.
- Date partitioning, retention, and the replay window.
Separate historical load from continuous CDC
Historical load prioritizes completeness, controlled waves, and repeatable reconciliation. CDC prioritizes ordering, replay safety, delete handling, latency, and continuous monitoring.
Keep their S3 paths and operational checkpoints distinct even when they share infrastructure. A clear layout such as source/schema/table/load-type/date makes it easier to prove which files belong to which phase and to apply lifecycle rules without removing evidence needed for reconciliation.
For the historical load, use explicit manifests or a deterministic inventory of expected objects. Load into raw tables, reconcile, and only then make the data available to downstream transformation models. For CDC, define an apply contract before the first file arrives.
Preserve the meaning of each change
CDC files are transport artifacts. The target needs enough information to decide what the change means and whether it has already been applied. At minimum, preserve a stable business or surrogate key, the source operation, source ordering information appropriate to the source engine, source transaction or commit context where the consistency model requires it, ingestion time and immutable source-file identity, and a record of the target apply outcome.
Land changes into an append-only raw table before merging them into curated targets, then test the failure cases explicitly.
File arrival time should not be the only ordering rule. If a business event spans multiple tables, define whether consumers can tolerate table-level eventual consistency or require a publish barrier after all expected changes are applied.
- The same file is submitted twice.
- A file arrives later than a newer file.
- An update arrives for a missing target key.
- A delete arrives after a replay.
- Several related tables arrive at different times.
- Processing stops midway and restarts.
Choose COPY or Snowpipe based on the operating requirement
Use bulk COPY INTO when the team wants to control load waves and validation explicitly. Snowflake's SQL reference supports loading from an external S3 stage and provides VALIDATION_MODE options for identifying file errors without performing the load.
Use Snowpipe auto-ingest when new S3 objects should be queued continuously. Snowflake documents an S3 event-notification flow through a Snowflake-managed SQS queue. Its current guidance also warns that overlapping stage paths can cause more than one pipe to load the same files.
If the required freshness is tighter than file-based micro-batches can reliably provide, assess a streaming architecture separately. Do not promise a latency target until it has been measured with representative change volume and file settings.
- Confirm whether the S3 prefix already has an event notification.
- Avoid overlapping stage and pipe paths.
- Use a storage integration with narrowly scoped locations.
- Record pipe ownership and alert routing.
- Monitor queue and load failures.
- Define how missed or delayed events are reconciled.
Validate at five layers
An end-to-end migration needs independent evidence from each boundary. Set tolerances before the cutover. If the target intentionally changes logic, document the expected difference and obtain approval rather than classifying it as an unexplained mismatch.
Snowflake also provides migration and validation capabilities that compare source and target structures, metrics, and optionally rows for supported sources. Whether you use Snowflake tooling, custom checks, or both, keep the evidence linked to the migration wave and acceptance decision.
| Validation layer | Questions | Example evidence |
|---|---|---|
| DMS extraction | Did the task read and emit the expected data? | Table statistics, latency metrics, task logs |
| S3 transfer | Did every expected object arrive once and remain readable? | Manifest and object reconciliation, size checks, encryption checks |
| Snowflake loading | Did each intended file load or fail visibly? | COPY_HISTORY, pipe status, load errors, rejected-row evidence |
| Target data | Do keys, counts, totals, dates, null rates, and deletes match? | Partition-level controls and selected row comparisons |
| Business outcomes | Do reports, APIs, extracts, and decisions match the approved baseline? | Business-owner parity sign-off |
Secure the transfer boundary
The S3 stage is part of the production data path and should be governed accordingly.
AWS's current S3-target guidance requires the target bucket to be in the same Region as the DMS replication instance and requires an IAM role with access to the target bucket. Confirm all current prerequisites against the implementation's DMS version and source engine.
- Grant DMS only the S3 actions and prefixes it needs.
- Use encryption that matches the organization's security requirements.
- Use Snowflake storage integrations instead of embedding long-lived cloud credentials.
- Restrict stage locations and Snowflake roles.
- Separate environments and source systems with explicit prefixes or buckets.
- Define retention long enough to support replay, validation, audit, and rollback.
- Monitor access and configuration changes.
Rehearse the cutover
Run cutover as an ordered decision process, not an improvised maintenance window. Before the window, freeze schema changes or route them through an exception process, confirm the historical load and reconciliation are complete, confirm CDC latency is inside the approved threshold, verify critical consumers and business approvers are available, and confirm rollback triggers and communications.
During the window, record the source checkpoint and exact start time, complete the final change capture and apply cycle, reconcile expected files against Snowflake load history, run technical control totals and selected row checks, run business-facing parity checks, and obtain named go/no-go approval before switching consumers.
After the switch, monitor freshness, load errors, duplicates, query behavior, downstream schedules, and business reconciliations. Keep the previous platform available for the defined fallback window, record every exception and its disposition, and end dual-running only when the acceptance criteria are satisfied. Rollback is more than changing a connection string: scheduled jobs, write paths, extracts, identities, caches, and downstream datasets need a documented return path. If the rollback cannot be rehearsed, record that limitation as a release risk.
Architecture acceptance checklist
Use this list as the architecture gate before build or cutover approval.
- AWS DMS source and S3 target combination is supported for the chosen version.
- Snowflake is not represented as a direct DMS target.
- Historical and CDC paths have explicit file contracts.
- Stable keys, ordering, replay, and delete behavior are defined.
- S3 notifications and Snowpipe paths do not overlap.
- Credentials and storage locations follow least privilege.
- DMS, S3, Snowflake load, target-data, and business validation are all defined.
- Cutover thresholds and business approvers are named.
- Rollback and post-cutover support are rehearsed.
- Decommissioning waits for retention, audit, recovery, and consumer sign-off.
Primary documentation
Confirm product behavior against current primary sources: AWS DMS supported targets (https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Introduction.Targets.html), using Amazon S3 as an AWS DMS target (https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Target.S3.html), AWS DMS S3 target validation (https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Validating_S3.html), Snowflake auto-ingest from Amazon S3 (https://docs.snowflake.com/en/user-guide/data-load-snowpipe-auto-s3), the Snowflake COPY INTO table reference (https://docs.snowflake.com/en/sql-reference/sql/copy-into-table), and Snowflake data migration and validation (https://docs.snowflake.com/en/migrations/aim-for-datawarehouses/data-migration-validation/overview).
Related from this cluster
Frequently Asked Questions
Can AWS DMS write directly to Snowflake?
Snowflake is not listed as a direct AWS Database Migration Service target in AWS's current target-endpoint documentation. A common supported design uses Amazon S3 as the DMS target, followed by Snowflake COPY INTO or Snowpipe to load the staged files.
Should historical data and CDC use the same Snowpipe?
They can share components, but they have different scheduling, validation, and replay needs. Separate Amazon S3 prefixes and explicit handoff checkpoints usually make reconciliation and recovery clearer.
How do you prevent duplicate rows?
Retain immutable file identity, land changes before applying them, and use stable keys plus source ordering information. Test duplicate-file replay, late arrival, delete behavior, and recovery before cutover.
What proves the migration is ready to cut over?
A green tool status is insufficient. Require reconciled Amazon S3 objects and Snowflake load history, approved technical controls, business-consumer parity, acceptable CDC latency, named go/no-go approval, and a documented rollback path.
What this means for you
If the current plan ends at “DMS is running,” the S3 transfer, Snowflake apply, reconciliation, and cutover controls are still unowned.