Cipherbeats – Enterprise Data & IT Consulting
    Skip to content
    Back to all guides
    Data Engineering•12 min read•September 2026

    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 DMSSnowflakeAmazon S3Change Data CaptureSnowpipeData Migration

    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.

    LayerResponsibilityEvidence needed
    Source databaseProvide stable keys, transaction logs, and extraction accessSnapshot time, log position, schema version
    AWS DMSExecute full load and capture source changesTask state, table statistics, latency, emitted-file counts
    Amazon S3Retain transfer objects securely and predictablyObject keys, sizes, timestamps, encryption, lifecycle policy
    Snowflake stage and loaderQueue and load each intended filePipe status, load history, rejected rows, error details
    Landing and target modelsApply operations deterministicallyApplied sequence, duplicate checks, delete behavior, reconciliation
    Business consumersConfirm the migrated outcome is usable and correctReport 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 layerQuestionsExample evidence
    DMS extractionDid the task read and emit the expected data?Table statistics, latency metrics, task logs
    S3 transferDid every expected object arrive once and remain readable?Manifest and object reconciliation, size checks, encryption checks
    Snowflake loadingDid each intended file load or fail visibly?COPY_HISTORY, pipe status, load errors, rejected-row evidence
    Target dataDo keys, counts, totals, dates, null rates, and deletes match?Partition-level controls and selected row comparisons
    Business outcomesDo 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).

    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.

    Ready to fix the delivery gap?

    If the current plan ends at “DMS is running,” the S3 transfer, Snowflake apply, reconciliation, and cutover controls are still unowned.