ADF vs SSIS: Migrating Legacy ETL to the Cloud
Moving SQL Server to Azure leaves a question behind: what happens to the SSIS packages? This guide compares SSIS with Azure Data Factory, explains the two migration routes, running packages unchanged on the Azure-SSIS integration runtime or rebuilding them as pipelines, and gives a way to decide package by package.
GloryTecks Team
Training & Placement Faculty
Last updated: 2 October 2026
For twenty years, SQL Server Integration Services has been the tool that loads the warehouse overnight in organisations that run on SQL Server. When the databases move to Azure, the packages do not come along by themselves, and "rewrite a thousand packages" is not a plan anyone will fund. ADF vs SSIS is therefore rarely a product comparison. It is a migration question: which packages move as they are, which get rebuilt, and in what order.
What each one is
SQL Server Integration Services is a platform for building data integration and transformation solutions, installed as part of SQL Server. Packages are designed graphically, and deployed to an SSIS Catalog database that stores, runs and manages them (Microsoft Learn: SQL Server Integration Services).
Azure Data Factory is a cloud service for the same broad purpose, moving and transforming data on a schedule, built in a different era and on different assumptions.
| SSIS | Azure Data Factory | |
|---|---|---|
| Runs on | A server you install and maintain | Compute the service provides for each run |
| Designed in | SQL Server Data Tools, in Visual Studio | A browser-based studio |
| Unit of work | Package: control flow and data flow tasks | Pipeline: activities and data flows |
| Connections | Connection managers | Linked services |
| Scheduling | SQL Server Agent jobs | Triggers |
| Transformation engine | In memory, on the SSIS server | The destination, or Spark for data flows |
| Custom logic | Script tasks and components in .NET | Functions, notebooks, custom activities |
| Cost | SQL Server licence and the server | Consumption per run |
| Natural home | On-premises, SQL Server centred | Cloud, many kinds of store |
The row that matters most is the transformation engine. SSIS pulls rows into its own memory, transforms them, and writes them out: classic ETL. Data Factory's natural pattern is to copy data to the destination and transform it there, or on a Spark cluster. That is ELT, and it is why a faithful one-to-one translation of a package is often the wrong goal. ETL vs ELT explains the difference.
Route one: lift and shift
Data Factory can run SSIS packages unchanged. It has a third kind of integration runtime for exactly this, the Azure-SSIS integration runtime: a managed cluster of machines whose job is to execute packages (Microsoft Learn: lift and shift SSIS workloads).
How it fits together:
- The runtime is provisioned in a data factory. You choose the node size and the number of nodes.
- The catalog, SSISDB, lives in Azure SQL Database or SQL Managed Instance. Microsoft describes this separation of storage from runtime as the most significant difference from SSIS on premises.
- Packages are still designed in SQL Server Data Tools and deployed with the familiar tools.
- Execution can be started from those tools, or from a pipeline with the Execute SSIS Package activity, which lets Data Factory triggers and monitoring take over scheduling (Microsoft Learn: Execute SSIS Package activity).
Details that matter in planning:
- Deployment model. Deploying to SSISDB in Azure requires the project deployment model. Packages on the older package deployment model can run from the file system, Azure Files or MSDB in a managed instance (Microsoft Learn: create an Azure-SSIS integration runtime).
- Versions. A package from any SSIS version can be deployed, and is upgraded automatically to the latest package format if validation passes.
- Reaching on-premises data. The runtime can join a virtual network, or use a self-hosted integration runtime as a proxy.
- Third-party components and drivers have to be installed on the runtime through its custom setup. A package that depends on a component with no cloud installation is a blocker.
- Cost behaves like a server, not like a pipeline. The runtime is a cluster that bills while it runs. Microsoft's advice is to run it only when needed, starting and stopping it on a schedule.
Lift and shift is a migration of where packages run, not of what they are. The team keeps its skills and its tested logic. It also keeps a server-shaped cost and a tool whose design centre is the past.
Route two: rebuild in Data Factory
Rebuilding means expressing the same outcome with pipelines. The concepts map across, loosely:
| In the package | In Data Factory |
|---|---|
| Control flow, precedence constraints | Pipeline activities and dependency conditions |
| Data flow task that only moves data | Copy activity |
| Data flow task with lookups, derived columns, splits | Mapping data flow, or SQL in the destination |
| Execute SQL task | Stored procedure or Script activity |
| ForEach loop container | ForEach activity |
| Script task | Azure Function, notebook or custom activity |
| Package parameters and variables | Pipeline parameters and variables |
| SQL Server Agent job | Trigger |
Two warnings about this table.
Do not translate; redesign. Many packages contain long chains of row-by-row transformation that exist because the SSIS engine was the only place to do the work. In the cloud, load the raw data and express the logic as one SQL statement in the warehouse. It is usually shorter, faster and easier to read.
Script tasks are the hard part. Anything written in .NET inside a package has no automatic equivalent. Inventory these first; they decide the effort.
Mapping data flows in ADF covers the visual transformations that most resemble an SSIS data flow.
The migration process
Microsoft describes two phases, assessment and migration (Microsoft Learn: migrate on-premises SSIS workloads).
Assessment. Find what would stop a package running on the Azure-SSIS runtime. The documentation separates migration blockers from informative issues, such as partly supported or deprecated features. One caution: the page describes the Data Migration Assistant for this step and also notes that the tool is deprecated, so check which assessment tool Microsoft currently recommends.
Where the packages are stored decides the route. The same page lists four storage types and the path for each:
| Stored in | Move the packages by | Move the schedules by |
|---|---|---|
| SSISDB | Redeploying to SSISDB in Azure SQL Database or Managed Instance | Moving agent jobs to Managed Instance, or converting to pipelines and triggers |
| File system | Redeploying to file shares or Azure Files | The same, or the job migration wizard |
| MSDB | Exporting to file system, file shares or Azure Files | Converting to pipelines and triggers |
| Package store | Exporting or redeploying to the Azure package store | Moving agent jobs, or converting |
Schedules are a second migration. SQL Server Agent jobs do not exist in Azure SQL Database. They either move to the agent in SQL Managed Instance or become Data Factory pipelines with triggers. The second is the better end state, because it puts SSIS runs and native pipelines under one scheduler and one monitoring view.
Deciding, package by package
Few organisations should pick one route for everything. Sort the packages.
| Package | Route |
|---|---|
| Works, rarely changes, no one wants to touch it | Lift and shift |
| Simple copy from source to staging | Rebuild; it is a Copy activity |
| Complex data flow, well understood, still changing | Rebuild as ELT |
| Depends on a third-party component | Check for an Azure installation; otherwise rebuild |
| Heavy .NET script logic | Lift and shift first; rebuild deliberately later |
| Due to be retired with its source system | Lift and shift, or leave |
A workable sequence:
- Inventory: every package, what it reads and writes, how often it runs, when it last changed.
- Assess for blockers.
- Lift and shift the bulk, to meet the date for moving off the servers.
- Move scheduling into Data Factory, with the Execute SSIS Package activity.
- Rebuild in priority order: the simplest and the most frequently changed first.
- Shrink the SSIS runtime as packages are retired, and stop it when the last one goes.
The point of step 3 is to separate two risks. Moving infrastructure and rewriting logic at the same time means that when a number is wrong, nobody knows which change caused it.
Where Fabric leaves SSIS
Microsoft now describes Data Factory in Fabric as the next generation of Azure Data Factory, so it is fair to ask what that means for SSIS. The Fabric upgrade guidance, for workloads that include SSIS, is to execute the packages with Azure Data Factory pipelines and call those from Fabric (Microsoft Learn: upgrade planning for Fabric). In other words, Azure Data Factory remains the home for SSIS in the cloud for now. Microsoft Fabric vs Azure Data Factory covers the wider picture.
That is one more argument for treating lift and shift as a stage, not a destination. Each package rebuilt as a native pipeline is one fewer tied to a runtime with an uncertain long-term path.
Mistakes to avoid
- Rewriting everything before moving anything. The server lease expires first.
- Lifting everything and stopping. The runtime's cost continues, and nothing has been modernised.
- Leaving the SSIS runtime on around the clock for packages that run for an hour a night.
- Translating packages task by task. Redesign for ELT.
- Forgetting the schedules, the agent jobs, their dependencies and their alerts.
- Skipping reconciliation. Run old and new side by side and compare outputs before switching off the old.
For the runtime types, see integration runtimes in ADF; for reaching SQL Server from the cloud without SSIS, copying data from on-prem SQL.
Can Azure Data Factory run SSIS packages?
Do I have to rewrite my SSIS packages to move to Azure?
Is Azure Data Factory a replacement for SSIS?
What happens to SQL Server Agent jobs that run packages?
Azure Data Factory, SQL and ETL pipeline design are covered in the Data Engineering course.
Sources
- SQL Server Integration Services (Microsoft Learn) — Microsoft Learn
- Lift and shift SQL Server Integration Services workloads to the cloud (Microsoft Learn) — Microsoft Learn
- Migrate on-premises SSIS workloads to SSIS in ADF or Synapse Pipelines (Microsoft Learn) — Microsoft Learn
- Create an Azure-SSIS integration runtime in Azure Data Factory (Microsoft Learn) — Microsoft Learn
- Run an SSIS package with the Execute SSIS Package activity (Microsoft Learn) — Microsoft Learn
- Upgrade planning for Azure Data Factory to Fabric Data Factory (Microsoft Learn) — Microsoft Learn
GloryTecks Team
Training & Placement Faculty
The GloryTecks faculty team mentors learners across Data Science, AI and Data Engineering, with a focus on real-time projects and placement readiness in Hyderabad.
Want to master Azure Data Factory?
Join GloryTecks’ expert-led SQL Server training in Hyderabad with real-time projects and 100% placement support.
Related articles
ADF Pipelines Explained: Building Your First Pipeline
A beginner's guide to pipelines in Azure Data Factory: what a pipeline and an activity are, the three kinds of activity, the objects you create for a first copy from blob storage to a SQL table, the JSON behind the canvas, why Debug moves real data, what Publish does, and how to read a run's output.
Triggers in ADF: Schedule, Tumbling Window and Event
The four Azure Data Factory trigger types — schedule, tumbling window, storage event and custom event — compared on what they guarantee, with a decision table, trigger JSON you can adapt, and the settings that cause missed or duplicate runs.
Mapping Data Flows in ADF: Transformations Without Code
Mapping data flows let you design transformations on a canvas in Azure Data Factory and run them on Spark clusters the service manages. This guide explains how they work, walks through one flow stage by stage with real row counts, and sets out when a data flow is the right tool.