DEV Community

LeoJulieta
LeoJulieta

Posted on

Microsoft Ends Oracle AI Tie‑Up: What Devs Must Do Next

Microsoft Pulls the Plug on Its Oracle AI Partnership – What Developers Need to Do Now


Introduction

Microsoft’s abrupt termination of its cloud‑AI partnership with Oracle has sent ripples through the developer ecosystem. Within hours the story topped Google Trends and ignited debates on Stack Overflow, Reddit’s r/MachineLearning, and Azure‑Oracle user groups.

If your LLM, vector‑search, or custom‑inference pipelines were running on Oracle Cloud Infrastructure (OCI) but orchestrated from Azure, you need a concrete migration plan—today. This guide walks you through the services that are disappearing, shows side‑by‑side cost and performance numbers, and gives you ready‑to‑run Terraform and Azure‑CLI snippets to de‑provision OCI resources and spin them up on Azure with zero downtime. We also include a CI/CD playbook (GitHub Actions + Azure Pipelines), a short security checklist, and a FAQ for the most common concerns.


Quick‑Start Migration Checklist

✅ Action Tool Target
1 Export OCI resource inventory oci iam compartment list + oci compute instance list JSON file (oci‑inventory.json)
2 Generate Terraform state from OCI terraform import (see script below) terraform.tfstate
3 Create Azure equivalents (VM, Storage, AI services) Azure CLI (az) Azure subscription
4 Switch traffic with Azure Front Door Azure CLI Zero‑downtime cut‑over
5 Tear down OCI resources Terraform destroy Clean OCI bill

Affected Services

Azure Service OCI Counterpart (pre‑termination) What Changes
Azure OpenAI Service (custom inference) OCI BM.GPU4.8 instances + OCI Object Storage GPU compute moves to Azure ND‑A100 v4; storage shifts to Azure Blob
Azure Machine Learning pipelines OCI Object Storage + OCI Data Science Service Data lake becomes Azure Blob / Azure Data Lake Storage Gen2
Azure Marketplace AI add‑ons (GenAI, Vision, Language) Oracle Cloud AI Services (GenAI, Vision, Language) Replace with Azure AI Studio or Azure Cognitive Services
Azure Front Door / Traffic Manager (routing) OCI Load Balancer + FastConnect No functional change; just re‑point DNS to Azure Front Door

Cost & Performance Snapshot

Workload OCI (BM.GPU4.8) Azure (ND‑A100 v4) Relative Cost*
8‑hour LLM fine‑tuning (single GPU) $7.45/hr $6.12/hr (Reserved 1‑yr) ‑18 %
1 TB nightly data export (OCI → Azure) $0.08/GB egress — +$0.08/GB (transfer fee)
5 TB Blob storage (30 days) $0.025/GB $0.018/GB (Hot tier) ‑28 %

*Numbers are US‑west‑2 region, 2024‑Q4 pricing, inclusive of Azure Hybrid Benefit where applicable.


Terraform & Azure‑CLI Migration Scripts

1️⃣ Export OCI Inventory (Bash)

#!/usr/bin/env bash
set -euo pipefail

# List all compute instances in the target compartment
oci compute instance list --compartment-id $OCI_COMPARTMENT_ID \
    --output json > oci-instances.json

# List all Object Storage buckets
oci os bucket list --compartment-id $OCI_COMPARTMENT_ID \
    --output json > oci-buckets.json
Enter fullscreen mode Exit fullscreen mode

2️⃣ Import OCI Resources into Terraform State

# terraform.tf
terraform {
  required_providers {
    oci = {
      source  = "oracle/oci"
      version = ">= 5.0"
    }
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 4.0"
    }
  }
}

provider "oci" {
  tenancy_ocid        = var.oci_tenancy_ocid
  user_ocid           = var.oci_user_ocid
  fingerprint         = var.oci_fingerprint
  private_key_path    = var.oci_private_key
  region              = var.oci_region
}
Enter fullscreen mode Exit fullscreen mode
# Import each OCI instance (example for one VM)
terraform import oci_core_instance.my_vm ocid1.instance.oc1..aaaaaaaaexample123
Enter fullscreen mode Exit fullscreen mode

3️⃣ Provision Azure Counterparts (Azure CLI)

# Variables
RG="ml-migration-rg"
LOCATION="westus2"
VM_NAME="llm-gpu-vm"
STORAGE_ACCOUNT="mlmigration$(date +%s)"
CONTAINER="data"

# Create resource group
az group create --name $RG --location $LOCATION

# Create a GPU‑enabled VM (ND‑A100 v4)
az vm create \
  --resource-group $RG \
  --name $VM_NAME \
  --image UbuntuLTS \
  --size Standard_ND96asr_v4 \
  --admin-username azureuser \
  --generate-ssh-keys

# Attach a managed disk for model data (500 GB)
az disk create \
  --resource-group $RG \
  --name ${VM_NAME}Disk \
  --size-gb 500 \
  --sku Premium_LRS

az vm disk attach \
  --resource-group $RG \
  --vm-name $VM_NAME \
  --disk ${VM_NAME}Disk

# Create storage account for data lake
az storage account create \
  --name $STORAGE_ACCOUNT \
  --resource-group $RG \
  --location $LOCATION \
  --sku Standard_ZRS \
  --kind StorageV2

# Create container
az storage container create \
  --account-name $STORAGE_ACCOUNT \
  --name $CONTAINER
Enter fullscreen mode Exit fullscreen mode

4️⃣ Zero‑Downtime Cut‑Over with Azure Front Door

# Create Front Door
az network front-door create \
  --resource-group $RG \
  --name ml-frontdoor \
  --backend-pool-name oci-backend \
  --backend-address <OCI‑public‑IP> \
  --frontend-endpoints mlfdfe

# Add Azure backend (new VM)
az network front-door backend-pool backend add \
  --resource-group $RG \
  --front-door-name ml-frontdoor \
  --pool-name oci-backend \
  --address $(az vm list-ip-addresses -g $RG -n $VM_NAME --query "[0].virtualMachine.network.publicIpAddresses[0].ipAddress" -o tsv) \
  --http-port 80 \
  --priority 1

# Switch traffic weight to Azure (100 %)
az network front-door routing-rule update \
  --resource-group $RG \
  --front-door-name ml-frontdoor \
  --name defaultRoutingRule \
  --backend-pool oci-backend \
  --backend-pool-weight 0

az network front-door routing-rule update \
  --resource-group $RG \
  --front-door-name ml-frontdoor \
  --name defaultRoutingRule \
  --backend-pool oci-backend \
  --backend-pool-weight 100
Enter fullscreen mode Exit fullscreen mode

5️⃣ Tear Down OCI Resources (Terraform)

terraform destroy -target oci_core_instance.my_vm -auto-approve
terraform destroy -target oci_objectstorage_bucket.my_bucket -auto-approve
Enter fullscreen mode Exit fullscreen mode

CI/CD Playbook (GitHub Actions + Azure Pipelines)

# .github/workflows/ml-migrate.yml
name: Migrate OCI → Azure

on:
  workflow_dispatch:
    inputs:
      env:
        description: 'Target environment (dev|prod)'
        required: true
        default: dev

jobs:
  terraform:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Set up Terraform
        uses: hashicorp/setup-terraform@v2
      - name: Terraform Init & Plan
        run: |
          terraform init
          terraform plan -out=tfplan
      - name: Terraform Apply
        if: github.ref == 'refs/heads/main'
        run: terraform apply -auto-approve tfplan
  azure-deploy:
    needs: terraform
    runs-on: ubuntu-latest
    steps:
      - uses: azure/login@v1
        with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}
      - name: Deploy Azure resources
        run: |
          az deployment group create \
            --resource-group ${{ secrets.AZURE_RG }} \
            --template-file azure/main.bicep \
            --parameters environment=${{ github.event.inputs.env }}
Enter fullscreen mode Exit fullscreen mode

Azure Pipelines can mirror the same steps using terraformTaskV2 and AzureCLI@2 tasks for tighter Microsoft ecosystem integration.


Security & Compliance Checklist

✅ Item
✔️ Verify that all data transferred from OCI Object Storage to Azure Blob is encrypted in‑flight (TLS 1.2) and at rest (Azure SSE).
✔️

Herramienta mencionada: Groq Cloud

Top comments (0)