Skip to main content
GenioCT

Azure APIM v2 vs Classic: What Changed and What Breaks

By GenioCT | | 7 min read
Azure APIM DevOps Terraform

In this article

Azure APIM v2 introduces a new platform architecture with different networking and deployment characteristics compared to the classic tiers.

If you manage APIs on Azure, you have probably seen the writing on the wall. Microsoft is moving API Management to a new platform - and the classic Developer, Basic, Standard, and Premium tiers are on the way out. The new StandardV2 and BasicV2 tiers promise faster provisioning, better scaling, and a simplified networking model.

That all sounds great on paper. In practice, the migration from classic to v2 isn’t a simple SKU swap. There are meaningful differences in networking, feature availability, and Terraform resource behaviour that can break your infrastructure if you aren’t prepared.

We have migrated several enterprise APIM instances to v2 over the past year. Here is what we learned.

What Actually Changed

The v2 tiers aren’t just a pricing refresh. Microsoft rebuilt the underlying compute platform. A StandardV2 instance deploys in minutes instead of the 30-45 minutes you are used to with classic Premium. Scale units are gone, replaced by a more granular capacity model. VNet integration replaces the old VNet injection approach. And availability zone support comes built into StandardV2 without requiring Premium pricing.

Genuine improvements across the board. But the details matter.

Azure docs: APIM v2 tier overview · Compare APIM tiers

The Networking Model Changed Completely

Most teams get tripped up here. Classic Premium APIM supported VNet injection: the APIM instance got a NIC in your VNet subnet, with a private IP, and you could control traffic with NSGs and route tables just like any other Azure resource.

StandardV2 drops VNet injection entirely. Instead, it uses VNet integration, conceptually closer to how App Service VNet integration works. In practice, that means your APIM gets a path into your private network for backend calls, but the gateway itself remains publicly accessible unless you put it behind a Private Endpoint.

With classic VNet injection in internal mode, your APIM got a private IP on your VNet for free. With v2, you need to configure a Private Endpoint separately to achieve the same result. Subnet requirements changed too: v2 requires a dedicated subnet delegated to Microsoft.ApiManagement/service, with different sizing requirements than classic. And the required NSG rules for v2 subnets differ from classic, so copying your existing NSG rules will break things.

If you run APIM in internal mode behind an Application Gateway (a very common pattern), expect to redesign the network path entirely.

Azure docs: VNet integration for APIM v2 · Private Endpoints for APIM · VNet reference (NSG rules)

Features That Are Missing or Different

Not everything from classic APIM has made it to v2 yet. Some notable gaps as of late 2025:

FeatureClassic PremiumStandardV2
VNet injection (internal mode)YesNo - use Private Endpoint
Multi-region deploymentYesNot yet
Self-hosted gatewayYesYes
Developer portal (managed)YesYes
Built-in cacheYesYes (Redis-based)
Client certificates (mTLS)YesYes
Capacity modelScale unitsCapacity units (more granular)
Deployment time30-45 min5-10 min

Check the official feature comparison before planning your migration. Microsoft is closing gaps regularly, but your timeline might not align with theirs.

Azure docs: Feature comparison across tiers · APIM migration guide

What Breaks in Terraform

If you manage APIM with Terraform - and you should - the v2 migration introduces several changes to the azurerm_api_management resource:

# Classic Premium with VNet injection
resource "azurerm_api_management" "classic" {
  name                = "apim-contoso-prd"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  publisher_name      = "Contoso"
  publisher_email     = "api@contoso.com"
  sku_name            = "Premium_1"

  virtual_network_type = "Internal"

  virtual_network_configuration {
    subnet_id = azurerm_subnet.apim.id
  }
}

# StandardV2 with VNet integration + Private Endpoint
resource "azurerm_api_management" "v2" {
  name                = "apim-contoso-prd"
  location            = azurerm_resource_group.rg.location
  resource_group_name = azurerm_resource_group.rg.name
  publisher_name      = "Contoso"
  publisher_email     = "api@contoso.com"
  sku_name            = "StandardV2_1"

  virtual_network_type = "None"  # VNet integration is separate

  # VNet integration handled via subnet delegation
  # Private Endpoint handled via azurerm_private_endpoint
}

Watch for several Terraform gotchas here.

First, the sku_name format changed: Premium_1 becomes StandardV2_1, and the capacity number works differently. Second, the virtual_network_type and virtual_network_configuration blocks no longer apply for v2 networking. VNet integration is configured differently, and inbound private access requires a separate azurerm_private_endpoint resource. Third, you cannot change sku_name from Premium_1 to StandardV2_1 on an existing resource. Terraform treats it as a destroy-and-recreate, so you need a migration strategy with parallel deployment. Finally, the v2 subnet needs Microsoft.ApiManagement/service delegation added to your azurerm_subnet resource.

If you use Terraform modules for APIM, expect to refactor them significantly. The resource inputs look similar enough to seem compatible but differ enough to fail in surprising ways.

Azure docs: Migrate to APIM v2 platform · Terraform azurerm_api_management

A Practical Migration Approach

Based on our experience migrating enterprise APIM instances, here is what works:

1. Inventory and Impact Assessment

Before touching infrastructure, document all your APIs and their backends, paying special attention to which backends live in private VNets (those are the ones affected by the networking change). Map out your current networking topology: VNet injection mode (internal/external), Application Gateway frontends, DNS configuration. Identify all APIM-related resources in your Terraform state and their dependencies. And figure out who calls your APIs and what changes they will see during migration.

2. Parallel Deployment

Don’t attempt an in-place migration. Deploy a new v2 instance alongside the classic one:

  • Deploy StandardV2 with VNet integration and Private Endpoint
  • Configure the same APIs, policies, and backends on the v2 instance
  • Use APIM’s built-in export/import or Terraform to replicate configuration
  • Test thoroughly with private backend connectivity

3. Traffic Cutover

Once the v2 instance is validated:

  • Update DNS records or Application Gateway backend pools to point to the v2 instance
  • Keep the classic instance running in parallel for rollback
  • Monitor error rates and latency for 48-72 hours
  • Decommission the classic instance only after validation

4. Update Your IaC

After cutover, update your Terraform to reflect the new resource structure. Remove the classic resource definition, add Private Endpoint resources, update subnet configurations.

The migration follows a phased approach: inventory, parallel deployment, traffic cutover, and IaC cleanup.

Common Pitfalls We See

DNS resolution inside the VNet catches people first. With classic internal mode, APIM’s private IP was in your VNet and DNS just worked. With v2 and Private Endpoint, you need Private DNS zones configured correctly for azure-api.net resolution. Miss this and your backends can’t reach the APIM gateway.

Application Gateway integration is another one. If you front APIM with App Gateway (common for WAF and certificate management), the backend pool configuration changes. Classic used the VNet-injected private IP. V2 with Private Endpoint uses a different IP that resolves through Private DNS.

Managed identity permissions trip up teams that forget the new v2 instance gets a new identity. If your classic APIM uses managed identity to access Key Vault, storage, or other resources, update your RBAC assignments before cutover.

Finally, test your custom policy expressions even though most policies work identically. We have seen edge cases with context.Deployment properties returning different values on v2.

Azure docs: Private DNS zones · APIM with Application Gateway

Should You Migrate Now?

It depends on your constraints. If you need multi-region, wait: StandardV2 doesn’t support it yet. If you are on classic Standard or Basic, migrate soon because these tiers are already deprecated and Microsoft is pushing hard. Premium with VNet injection requires the most careful planning since the networking redesign is the biggest effort; start with a proof of concept in a non-production environment. And if you are provisioning new APIM instances, go straight to v2. No reason to start new deployments on the classic platform.

Microsoft has published migration timelines, and the stv1 platform retirement is already in progress. Not optional, just a question of when.

Azure docs: stv1 platform retirement · Migration guide

The Bottom Line

The move to APIM v2 is the right direction. Faster deployments, better scaling, and a cleaner networking model are all wins. But it isn’t a drop-in replacement - especially for enterprises running APIM in internal mode with VNet injection.

Plan the migration as an infrastructure project, not a SKU change. Inventory your current setup, deploy in parallel, validate thoroughly, and update your IaC after cutover. Teams that treat this as a weekend task end up with broken API traffic on Monday morning. Block out two to three weeks for the full cycle: inventory, parallel deploy, validation, and cutover. Start with your lowest-risk environment, prove out the networking path, and work up from there.

Looking for Azure architecture guidance?

We design and build Azure foundations that scale - landing zones, networking, identity, and governance tailored to your organisation.

Start with a Platform Health Check - results within 1 week.
Talk to an Azure architect
Share this article

Start with a Platform Health Check

Not sure where to begin? A quick architecture review gives you a clear picture. No obligation.