# AI Foundry Disaster Recovery Planning

**Last updated:** 2026-02
**Status:** GA
**Category:** Business Continuity & Disaster Recovery

---

## Introduksjon

Azure AI Foundry (tidligere Azure AI Studio / Azure Machine Learning) er Microsofts sentrale plattform for utvikling, evaluering og deployering av AI-modeller og agenter. Plattformen tilbyr imidlertid ikke automatisk failover eller disaster recovery ut av boksen -- dette er eksplisitt dokumentert av Microsoft. Det betyr at organisasjoner i norsk offentlig sektor som bygger forretningskritiske AI-loesninger pa AI Foundry, ma planlegge og implementere sin egen DR-strategi.

Disaster recovery for AI Foundry-prosjekter er mer kompleks enn for tradisjonelle webapplikasjoner. Et AI-prosjekt bestar av mange sammenkoblede komponenter: modelldeployeringer, datasett, pipeline-konfigurasjoner, agentdefinisjoner, tilkoblinger til eksterne tjenester, og tilhoerende infrastruktur som Azure Cosmos DB, Azure AI Search og Azure Storage. Tap av en enkelt komponent kan gjore hele AI-loesningen uoperativ. Saerlig for Foundry Agent Service er tilstandsdata (samtalehistorikk, agent-definisjoner, trad-kontekst) fordelt pa tvers av flere lagringstjenester, og det finnes per i dag ingen innebygd en-klikks eksport/import-funksjon for komplett gjenoppretting.

Denne referansen dekker prosjektdata-backup og replikering, modellversjonskontroll og gjenoppretting, configuration as code for reproduserbarhet, RTO/RPO-definisjoner for AI-prosjekter, og testing og validering av DR-prosedyrer. Alt er forankret i Microsofts offisielle veiledning for high availability og disaster recovery for AI Foundry.

## Prosjektdata-backup og replikering

### Komponentoversikt for AI Foundry-prosjekter

| Komponent | Lagringssted | Backup-ansvar | Replikeringsmetode |
|-----------|-------------|---------------|---------------------|
| Prosjektkonfigurasjon | AI Foundry control plane | Kunde (IaC) | Bicep/Terraform redeploy |
| Modelldeployeringer | Azure OpenAI / AI Foundry | Kunde (IaC) | Redeploy fra kildekontroll |
| Agentdefinisjoner | Cosmos DB (Standard mode) | Kunde | Cosmos DB continuous backup |
| Samtalehistorikk (traader) | Cosmos DB (`enterprise_memory`) | Kunde | Cosmos DB PITR |
| Kunnskapsfiler (agent) | Azure Storage | Kunde | GRS/GZRS replikering |
| Soekeindekser (agent) | Azure AI Search | Kunde | Manuell gjenskapning |
| Datasett og artefakter | Azure Storage (prosjekt) | Kunde | GRS/GZRS replikering |
| Notebook-filer og kode | Azure Storage | Kunde | Git + Azure Storage |
| Tilkoblinger og secrets | Azure Key Vault | Microsoft | Auto-failover til sekundaer region |
| Container images | Azure Container Registry | Microsoft* | Geo-replikering (konfigurer) |
| Application Insights | Log Analytics workspace | Kunde | Opprett i begge regioner |

> *Azure Container Registry ma konfigureres for geo-replikering av kunden, men Microsoft haandterer selve replikeringsmekanismen.

### Ressurskonfigurering for gjenoppretting

Microsoft anbefaler foelgende konfigurasjon **foer** en hendelse inntreffer:

```
+------------------------------------------------------------------+
|  Ressurs                    | Anbefalt konfigurasjon             |
+------------------------------------------------------------------+
|  Foundry account            | Purview-integrasjon for compliance |
|  Foundry project            | User-assigned managed identity     |
|  Agent Service              | Standard deployment mode           |
|  Cosmos DB                  | Continuous backup med PITR         |
|                             | Service-managed failover           |
|                             | Read replication til failover-reg. |
|  AI Search                  | Unikt navn (unnga kollisjon)       |
|  Storage account            | GZRS (geo-zone-redundant)          |
+------------------------------------------------------------------+
```

### Cosmos DB-konfigurasjon for agentdata

Cosmos DB er kritisk for Foundry Agent Service da all agent-tilstand lagres her:

```bash
# Aktiver continuous backup med 30-dagers PITR
az cosmosdb create \
  --name ddt-ai-cosmos-prod \
  --resource-group rg-ai-foundry-prod \
  --locations regionName="norwayeast" failoverPriority=0 \
  --locations regionName="swedencentral" failoverPriority=1 \
  --backup-policy-type Continuous \
  --continuous-tier Continuous30Days \
  --enable-automatic-failover true \
  --default-consistency-level Session
```

> **Viktig:** Aktiver `Service-Managed Failover` slik at Cosmos DB automatisk kan bytte skriveregion fra primaerregion til sekundaerregion ved et langvarig regionalt utfall.

### Azure Storage-konfigurasjon

```bash
# Opprett GZRS storage account for prosjektdata
az storage account create \
  --name svvaiprodstorage \
  --resource-group rg-ai-foundry-prod \
  --location norwayeast \
  --sku Standard_GZRS \
  --kind StorageV2 \
  --min-tls-version TLS1_2 \
  --allow-blob-public-access false
```

| Redundanstype | Beskrivelse | Anbefaling |
|---------------|-------------|------------|
| LRS | 3 kopier i en region | Kun for utvikling |
| ZRS | 3 kopier pa tvers av soner | Produksjon uten DR-krav |
| GRS | LRS + asynkron kopi til sekundaer region | Standard DR |
| GZRS | ZRS + asynkron kopi til sekundaer region | **Anbefalt for produksjon** |
| RA-GZRS | GZRS + lesetilgang til sekundaer region | Hoeyest tilgjengelighet |

## Modellversjonskontroll og gjenoppretting

### Versjonskontroll-strategi

AI-modeller gjennomgar kontinuerlig endring -- nye versjoner, fine-tuning, evaluering og deployering. En robust DR-plan krever sporbarhet og reproduserbarhet for alle modellversjoner.

```
Git Repository (kildekontroll)
  |
  +-- /models/
  |     +-- model-config.yaml        # Modellkonfigurasjon
  |     +-- deployment-params.json   # Deployment-parametere
  |     +-- evaluation-results/      # Evalueringsresultater per versjon
  |
  +-- /agents/
  |     +-- agent-definitions/       # JSON-definisjoner for agenter
  |     +-- knowledge-sources/       # Referanser til kunnskapsfiler
  |     +-- tool-bindings/           # Tool-konfigurasjoner
  |
  +-- /infrastructure/
  |     +-- bicep/                   # IaC for alle ressurser
  |     +-- pipelines/               # CI/CD pipeline-definisjoner
  |
  +-- /prompts/
        +-- system-prompts/          # System-prompter per agent/modell
        +-- evaluation-datasets/     # Testdata for evaluering
```

### Modellregistrering og sporing

```yaml
# model-config.yaml -- Eksempel
model:
  name: gpt-4o
  version: "2024-11-20"
  deployment_type: data_zone_standard
  regions:
    primary: norwayeast
    secondary: swedencentral
  quota:
    primary_tpm: 120000
    secondary_tpm: 120000
  fine_tuning:
    enabled: false
    base_model: null
    training_data: null
  evaluation:
    last_evaluated: "2026-01-15"
    accuracy_score: 0.94
    dataset: "eval-dataset-v3"
```

### Fine-tuned modeller

For fine-tuned modeller er det spesielt viktig med backup:

| Artefakt | Lagringssted | Backup-metode |
|----------|-------------|---------------|
| Treningsdata | Azure Storage | GZRS + versjonering |
| Modellvekter | AI Foundry model registry | Eksporter + lagre i Storage |
| Hyperparametere | Git (kildekontroll) | Standard Git-backup |
| Evalueringsresultater | AI Foundry + Git | Eksporter til Git |
| Deployment-konfig | Git (Bicep/Terraform) | Standard Git-backup |

> **Merk:** Global training (Public Preview) tilbyr rimeligere fine-tuning, men gir ikke datasuverenitet. For norsk offentlig sektor med strenge krav, bruk regional training i Norway East eller Sweden Central.

## Configuration as Code for reproduserbarhet

### Infrastruktur som kode (IaC)

Microsoft anbefaler eksplisitt a definere account, projects, capability host og avhengigheter i IaC (Bicep eller Terraform). IaC er kilden til sannhet for raskt a reprodusere konfigurasjon og rolletildelinger.

```bicep
// main.bicep -- AI Foundry prosjekt med DR-konfigurasjon
param primaryLocation string = 'norwayeast'
param secondaryLocation string = 'swedencentral'
param projectName string = 'ddt-ai-project'

// Cosmos DB med continuous backup og failover
resource cosmosAccount 'Microsoft.DocumentDB/databaseAccounts@2024-05-15' = {
  name: '${projectName}-cosmos'
  location: primaryLocation
  properties: {
    databaseAccountOfferType: 'Standard'
    consistencyPolicy: {
      defaultConsistencyLevel: 'Session'
    }
    locations: [
      {
        locationName: primaryLocation
        failoverPriority: 0
        isZoneRedundant: true
      }
      {
        locationName: secondaryLocation
        failoverPriority: 1
        isZoneRedundant: true
      }
    ]
    backupPolicy: {
      type: 'Continuous'
      continuousModeProperties: {
        tier: 'Continuous30Days'
      }
    }
    enableAutomaticFailover: true
  }
}

// Storage med GZRS
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
  name: '${projectName}storage'
  location: primaryLocation
  sku: {
    name: 'Standard_GZRS'
  }
  kind: 'StorageV2'
  properties: {
    minimumTlsVersion: 'TLS1_2'
    allowBlobPublicAccess: false
    supportsHttpsTrafficOnly: true
  }
}

// AI Foundry project (primary region)
resource aiProject 'Microsoft.MachineLearningServices/workspaces@2024-04-01' = {
  name: projectName
  location: primaryLocation
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${managedIdentity.id}': {}
    }
  }
  properties: {
    friendlyName: 'DDT AI Project'
    storageAccount: storageAccount.id
    keyVault: keyVault.id
    applicationInsights: appInsights.id
  }
}
```

### CI/CD Pipeline for dual-region deployment

```yaml
# azure-pipelines.yml
trigger:
  branches:
    include:
      - main

stages:
  - stage: DeployPrimary
    displayName: 'Deploy to Norway East'
    jobs:
      - job: DeployInfra
        steps:
          - task: AzureCLI@2
            inputs:
              azureSubscription: 'ddt-ai-prod'
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az deployment group create \
                  --resource-group rg-ai-foundry-norwayeast \
                  --template-file infrastructure/bicep/main.bicep \
                  --parameters location=norwayeast

  - stage: DeploySecondary
    displayName: 'Deploy to Sweden Central'
    dependsOn: DeployPrimary
    jobs:
      - job: DeployInfra
        steps:
          - task: AzureCLI@2
            inputs:
              azureSubscription: 'ddt-ai-prod'
              scriptType: 'bash'
              scriptLocation: 'inlineScript'
              inlineScript: |
                az deployment group create \
                  --resource-group rg-ai-foundry-swedencentral \
                  --template-file infrastructure/bicep/main.bicep \
                  --parameters location=swedencentral

  - stage: DeployAgents
    displayName: 'Deploy Agent Definitions'
    dependsOn:
      - DeployPrimary
      - DeploySecondary
    jobs:
      - job: DeployAgentDefs
        steps:
          - script: |
              python scripts/deploy-agents.py \
                --config agents/agent-definitions/ \
                --regions norwayeast swedencentral
```

### Viktige IaC-prinsipper for DR

1. **Bruk user-assigned managed identity** -- ved gjenskapning av ressurser forblir rolletildelinger gyldige
2. **Unnga usporede endringer i portalen** -- alle endringer gjennom IaC/pipeline
3. **Bygg IaC modulaert** -- uavhengig deployment per prosjekt
4. **Opprett rolletildelinger i IaC** -- ikke manuelt i portalen
5. **Deploy til begge regioner i samme pipeline** -- unnga drift

## RTO og RPO-definisjoner for AI-prosjekter

### Begrepsforklaring

| Begrep | Definisjon | Relevans for AI |
|--------|-----------|-----------------|
| **RTO** | Recovery Time Objective -- maks akseptabel tid for a gjenopprette | Hvor lenge kan AI-tjenesten vaere nede? |
| **RPO** | Recovery Point Objective -- maks akseptabelt datatap malt i tid | Hvor mye samtalehistorikk/data kan vi miste? |
| **MTTR** | Mean Time To Recovery -- gjennomsnittlig gjenopprettingstid | Faktisk maalt gjenopprettingstid |
| **MTBF** | Mean Time Between Failures -- gjennomsnittlig tid mellom feil | Paalitelighetsmal for AI-tjenesten |

### Anbefalte RTO/RPO per komponent

| Komponent | RTO-mal | RPO-mal | Gjenopprettingsmetode |
|-----------|---------|---------|----------------------|
| **Azure OpenAI inference** | < 5 min | N/A (stateless) | Automatisk failover via gateway |
| **Agent Service** | < 30 min | < 1 time | Redeploy fra IaC + Cosmos PITR |
| **Samtalehistorikk** | < 2 timer | < 5 min | Cosmos DB continuous backup |
| **Kunnskapsbaser (RAG)** | < 1 time | < 24 timer | Reindeksering fra kilde |
| **Fine-tuned modeller** | < 4 timer | < 24 timer | Redeploy fra model registry |
| **Pipeline/evaluering** | < 8 timer | < 24 timer | Redeploy fra Git |

### Tier-basert DR-strategi

```
Tier 1 -- Virksomhetskritisk (RTO < 5 min, RPO ~0)
  - Azure OpenAI inference med multi-region gateway
  - Automatisk failover via APIM backend pool
  - Eksempel: Innbyggertjenester, sanntids beslutningsstotte

Tier 2 -- Forretningsviktig (RTO < 30 min, RPO < 1 time)
  - Agent Service med Cosmos DB failover
  - Forhands-deployert sekundaer region (warm standby)
  - Eksempel: Intern chatbot, saksbehandlingsassistent

Tier 3 -- Stottende (RTO < 4 timer, RPO < 24 timer)
  - Manuell gjenskapning fra IaC
  - Cold standby i sekundaer region
  - Eksempel: Batch-analysejobber, treningspipelines
```

## Testing og validering av DR-prosedyrer

### DR-testrammeverk

| Testtype | Frekvens | Omfang | Ansvarlig |
|----------|----------|--------|-----------|
| **Tabletop exercise** | Kvartalsvis | Gjennomgang av prosedyrer | Arkitekturteam |
| **Komponent-failover** | Manedlig | Enkeltkomponent (f.eks. Cosmos DB) | Driftsteam |
| **Full DR-drill** | Halvaarlig | Komplett failover til sekundaer region | Hele teamet |
| **Chaos engineering** | Lopende | Automatisert feilinjeksjon | CI/CD pipeline |

### DR-testprosedyre

```
Fase 1: Forberedelse (1 dag foer)
  [ ] Verifiser at IaC er oppdatert og synkronisert
  [ ] Bekreft at Cosmos DB backup er aktiv og fungerer
  [ ] Sjekk at sekundaer region har tilstrekkelig kvote
  [ ] Varsle relevante interessenter

Fase 2: Simulert utfall (testdag)
  [ ] Deaktiver primaer region i gateway (APIM policy-endring)
  [ ] Verifiser at trafikk rutes til sekundaer region
  [ ] Kjoer funksjonelle tester mot sekundaer region
  [ ] Mal faktisk RTO og RPO

Fase 3: Validering (under test)
  [ ] Verifiser AI-inferens fungerer korrekt
  [ ] Sjekk at agentsamtaler kan fortsette
  [ ] Kontroller at data-konsistens er ivaretatt
  [ ] Verifiser overvaking og varsling

Fase 4: Tilbakeforing (etter test)
  [ ] Reaktiver primaer region
  [ ] Verifiser at trafikk returnerer til normalt moenster
  [ ] Dokumenter resultater og avvik
  [ ] Oppdater DR-plan basert pa laerdommer
```

### Azure Chaos Studio-integrasjon

Bruk Azure Chaos Studio for automatisert feilinjeksjon:

```json
{
  "type": "Microsoft.Chaos/experiments",
  "name": "ai-foundry-dr-test",
  "properties": {
    "steps": [
      {
        "name": "CosmosDB-failover",
        "branches": [
          {
            "name": "main",
            "actions": [
              {
                "type": "continuous",
                "name": "urn:csci:microsoft:cosmosDB:failover/1.0",
                "duration": "PT10M",
                "parameters": [
                  {
                    "key": "readRegion",
                    "value": "Norway East"
                  }
                ],
                "selectorId": "cosmos-selector"
              }
            ]
          }
        ]
      }
    ],
    "selectors": [
      {
        "id": "cosmos-selector",
        "type": "List",
        "targets": [
          {
            "id": "/subscriptions/.../cosmosdb-account",
            "type": "ChaosTarget"
          }
        ]
      }
    ]
  }
}
```

### Dokumentasjon av DR-tester

| Felt | Beskrivelse |
|------|-------------|
| **Testdato** | Dato og tidspunkt for testen |
| **Testtype** | Tabletop / Komponent / Full DR |
| **Deltakere** | Navn og roller |
| **Scenario** | Hva ble simulert |
| **Faktisk RTO** | Malt gjenopprettingstid |
| **Faktisk RPO** | Malt datatap |
| **Avvik fra mal** | Var det gap mellom mal og resultat? |
| **Funn og laerdommer** | Hva fungerte, hva ma forbedres? |
| **Tiltak** | Konkrete forbedringspunkter med eier og frist |

## Gjenopprettingsprosedyre ved regionalt utfall

### Steg-for-steg gjenoppretting

```
1. DETEKSJON (automatisk)
   - Azure Monitor-varsling om regionalt utfall
   - Health check-feil fra APIM gateway

2. VURDERING (5-10 min)
   - Er utfallet midlertidig eller vedvarende?
   - Hvilke tjenester er pavirket?
   - Utloes DR-plan hvis utfall > 15 min

3. FAILOVER (15-30 min)
   - Oppdater APIM til a rute all trafikk til sekundaer region
   - Verifiser Cosmos DB automatisk failover
   - Deploy manglende agentdefinisjoner fra kildekontroll
   - Oppdater DNS hvis relevant

4. VALIDERING (15 min)
   - Kjoer smoke tests mot sekundaer region
   - Verifiser at alle endepunkter responderer
   - Kontroller data-tilgjengelighet

5. KOMMUNIKASJON
   - Varsle interne brukere om situasjonen
   - Oppdater statusside

6. FAILBACK (nar primaer region er tilbake)
   - Verifiser primaer region er stabil
   - Gradvis ruter trafikk tilbake
   - Synkroniser eventuelle endringer fra sekundaer region
```

## Referanser

- [High availability and resiliency for Microsoft Foundry projects and Agent Services](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/high-availability-resiliency)
- [Foundry Agent Service disaster recovery](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/agent-service-disaster-recovery)
- [Foundry Agent Service resource and data loss recovery](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/agent-service-operator-disaster-recovery)
- [High availability and disaster recovery for hub projects](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/hub-disaster-recovery)
- [Azure security baseline for Azure AI Foundry - Backup and recovery](https://learn.microsoft.com/en-us/security/benchmark/azure/baselines/azure-ai-foundry-security-baseline#backup-and-recovery)
- [Continuous backup with point-in-time restore in Azure Cosmos DB](https://learn.microsoft.com/en-us/azure/cosmos-db/continuous-backup-restore-introduction)

## For Cosmo

- **Bruk denne referansen** nar kunden planlegger disaster recovery for AI Foundry-prosjekter, spesielt nar det gjelder Agent Service, fine-tuned modeller, eller komplekse AI-pipelines som ma overleve regionalt utfall.
- **Fremhev at AI Foundry IKKE tilbyr automatisk failover** -- dette er kundens ansvar. Krav til IaC, dual-region deployment og Cosmos DB continuous backup ma kommuniseres tydelig.
- **Anbefal user-assigned managed identity** som standard -- dette forenkler gjenoppretting dramatisk ved a eliminere behovet for a gjenskape rolletildelinger.
- **Tilpass RTO/RPO-maler til organisasjonens faktiske behov** -- ikke alle AI-tjenester er virksomhetskritiske. Bruk tier-modellen for a differensiere innsats og kostnad.
- **Undersstrek viktigheten av regelmessig DR-testing** -- en DR-plan som ikke er testet er ingen plan. Anbefal kvartalsvis tabletop og halvaarlig full DR-drill som minimum.
