Steg 9 (R4): unified migrate-corpus.mjs --write over engineering/governance/ infrastructure/security. 327 filer mutert, verified=null, prosa byte-identisk (fra første ## seksjon), advisor urørt (0 endringer). To applier-fixes oppdaget under kjøring (TDD, RED→GREEN): - insertHeaderFields: anker faller nå tilbake når en meta-linje selv passerer 500B (2 filer pakket et avsnitt i **Status:** → Type/Source landet utenfor scan-vinduet, applierens post-write-assertion fanget + restaurerte). - normalizeStaleVerified: fjerner nå ALLE stale non-date **Verified:** i 500B-vinduet, inkl. stray body-dup rett under --- (9 mlops-genaiops-filer var ellers falskt "verified"/fresh, droppet fra worklist). Operatør-godkjent utvidelse av carve-out; kun stray metadata-linjer, aldri prosa. test-transform-criterion: precondition oppdatert til post-migrasjons-sannhet (fila bærer nå Source). Suite 728/728 grønn.
450 lines
16 KiB
Markdown
450 lines
16 KiB
Markdown
# Multi-Region AI Gateway Architecture
|
|
|
|
**Last updated:** 2026-06-24
|
|
**Status:** GA
|
|
**Category:** API Management & AI Gateway
|
|
**Type:** reference
|
|
**Source:** https://learn.microsoft.com/azure/foundry/foundry-models/concepts/deployment-types
|
|
|
|
---
|
|
|
|
## Innhold
|
|
|
|
- [Introduksjon](#introduksjon)
|
|
- [Global APIM Distribution](#global-apim-distribution)
|
|
- [Region-Aware Routing](#region-aware-routing)
|
|
- [Latency Optimization](#latency-optimization)
|
|
- [Data Residency Compliance](#data-residency-compliance)
|
|
- [Cross-Region Failover](#cross-region-failover)
|
|
- [Nettverksarkitektur](#nettverksarkitektur)
|
|
- [Referanser](#referanser)
|
|
- [For Cosmo](#for-cosmo)
|
|
|
|
## Introduksjon
|
|
|
|
Organisasjoner som bygger AI-drevne tjenester med Azure OpenAI og andre LLM-tjenester trenger en gateway-arkitektur som tåler regionale feil, minimerer latens for geografisk distribuerte brukere, og overholder krav til dataresidency. Azure API Management (APIM) med multi-region deployment gir nettopp denne kapabiliteten, og er den anbefalte tilnærmingen for enterprise AI-workloads.
|
|
|
|
For norsk offentlig sektor er multi-region-design spesielt relevant: mange organisasjoner har krav om at data skal behandles innenfor EØS, men ønsker samtidig redundans og lav latens. APIM Premium (classic)-tier støtter multi-region gateways med én kontrollplan, noe som forenkler administrasjon og gir automatisk failover mellom regioner. (Merk: den nyere Premium v2-tieren støtter availability zones, men IKKE multi-region deployment — multi-region er kun Premium classic.) Denne referansen dekker alle aspekter ved design, deploy og drift av en geografisk distribuert AI-gateway.
|
|
|
|
En vellykket multi-region AI-gateway-arkitektur balanserer tre hensyn: pålitelighet (at tjenesten overlever regionale feil), ytelse (at brukere opplever lav latens uavhengig av lokasjon), og compliance (at data behandles i henhold til regulatoriske krav). API Management løser alle tre gjennom innebygd FQDN-routing, regionale gateways og policy-basert trafikkhåndtering.
|
|
|
|
---
|
|
|
|
## Global APIM Distribution
|
|
|
|
### Multi-Region Deployment Architecture
|
|
|
|
APIM Premium (classic)-tier støtter replikering av gateway-komponenten til flere Azure-regioner. Kontrollplanet (management plane) og utviklerportalen forblir i primærregionen, mens gateway-trafikk håndteres lokalt i hver region.
|
|
|
|
| Komponent | Distribusjon | Merknader |
|
|
|-----------|-------------|-----------|
|
|
| Management plane | Kun primærregion | API-definisjoner, policyer, brukerhåndtering |
|
|
| Developer portal | Kun primærregion | Brukerregistrering, API-dokumentasjon |
|
|
| Gateway | Alle konfigurerte regioner | Håndterer API-trafikk, policy-kjøring |
|
|
| Policy-konfigurasjon | Synkronisert (< 10 sek) | Automatisk propagering til alle regioner |
|
|
|
|
### Deployment via Azure Portal
|
|
|
|
```
|
|
1. Naviger til APIM-instansen → Locations
|
|
2. Klikk "+ Add" → Velg region (f.eks. North Europe)
|
|
3. Konfigurer antall scale units
|
|
4. Aktiver availability zones (anbefalt)
|
|
5. Konfigurer VNet/subnet hvis nettverksintegrert
|
|
6. Klikk "Add" → gjenta for flere regioner
|
|
7. Klikk "Save" for å starte deployment
|
|
```
|
|
|
|
### Bicep-template for Multi-Region APIM
|
|
|
|
```bicep
|
|
resource apim 'Microsoft.ApiManagement/service@2023-09-01-preview' = {
|
|
name: 'ai-gateway-apim'
|
|
location: 'westeurope'
|
|
sku: {
|
|
name: 'Premium'
|
|
capacity: 2
|
|
}
|
|
properties: {
|
|
publisherEmail: 'admin@example.com'
|
|
publisherName: 'AI Gateway'
|
|
additionalLocations: [
|
|
{
|
|
location: 'northeurope'
|
|
sku: {
|
|
name: 'Premium'
|
|
capacity: 1
|
|
}
|
|
zones: ['1', '2', '3']
|
|
}
|
|
{
|
|
location: 'swedencentral'
|
|
sku: {
|
|
name: 'Premium'
|
|
capacity: 1
|
|
}
|
|
zones: ['1', '2', '3']
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Regional DNS-mønster
|
|
|
|
Hver region får et eget DNS-endepunkt:
|
|
|
|
| Region | URL-mønster |
|
|
|--------|------------|
|
|
| Primary (West Europe) | `https://ai-gateway-apim.azure-api.net` |
|
|
| West Europe (regional) | `https://ai-gateway-apim-westeurope-01.regional.azure-api.net` |
|
|
| North Europe (regional) | `https://ai-gateway-apim-northeurope-01.regional.azure-api.net` |
|
|
| Sweden Central (regional) | `https://ai-gateway-apim-swedencentral-01.regional.azure-api.net` |
|
|
|
|
---
|
|
|
|
## Region-Aware Routing
|
|
|
|
### Innebygd Latency-basert Routing
|
|
|
|
APIM tilbyr automatisk FQDN-basert routing som sender trafikk til gatewayen med lavest latens. Dette er standard oppførsel for multi-region deployments og krever ingen ekstra konfigurasjon.
|
|
|
|
```
|
|
Klient → DNS-oppslag (ai-gateway-apim.azure-api.net)
|
|
→ Latency-basert resolving → Nærmeste gateway
|
|
→ Lokal policy-kjøring → Backend-kall
|
|
```
|
|
|
|
### Routing til Regionale Backend-tjenester
|
|
|
|
For å utnytte geografisk distribusjon fullt ut, bør Azure OpenAI-instanser deployes i samme regioner som APIM-gateways. Bruk `context.Deployment.Region` for å rute til lokale backends:
|
|
|
|
```xml
|
|
<policies>
|
|
<inbound>
|
|
<base />
|
|
<choose>
|
|
<when condition="@("West Europe".Equals(context.Deployment.Region,
|
|
StringComparison.OrdinalIgnoreCase))">
|
|
<set-backend-service backend-id="aoai-westeurope" />
|
|
</when>
|
|
<when condition="@("North Europe".Equals(context.Deployment.Region,
|
|
StringComparison.OrdinalIgnoreCase))">
|
|
<set-backend-service backend-id="aoai-northeurope" />
|
|
</when>
|
|
<when condition="@("Sweden Central".Equals(context.Deployment.Region,
|
|
StringComparison.OrdinalIgnoreCase))">
|
|
<set-backend-service backend-id="aoai-swedencentral" />
|
|
</when>
|
|
<otherwise>
|
|
<set-backend-service backend-id="aoai-westeurope" />
|
|
</otherwise>
|
|
</choose>
|
|
</inbound>
|
|
<backend>
|
|
<base />
|
|
</backend>
|
|
<outbound>
|
|
<base />
|
|
</outbound>
|
|
<on-error>
|
|
<base />
|
|
</on-error>
|
|
</policies>
|
|
```
|
|
|
|
### Backend Pool med Priority-basert Load Balancing
|
|
|
|
Kombinér regionale backends med priority groups for automatisk failover:
|
|
|
|
```bicep
|
|
resource backendPool 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
|
|
name: 'ai-gateway-apim/aoai-pool-westeurope'
|
|
properties: {
|
|
description: 'West Europe pool med failover til North Europe'
|
|
type: 'Pool'
|
|
pool: {
|
|
services: [
|
|
{
|
|
id: '/subscriptions/.../backends/aoai-westeurope'
|
|
priority: 1
|
|
weight: 1
|
|
}
|
|
{
|
|
id: '/subscriptions/.../backends/aoai-northeurope'
|
|
priority: 2
|
|
weight: 1
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Egendefinert Routing med Azure Traffic Manager
|
|
|
|
For scenarier der innebygd routing ikke er tilstrekkelig:
|
|
|
|
```
|
|
1. Opprett Azure Traffic Manager-profil
|
|
2. Konfigurer APIM regionale endepunkter som endpoints
|
|
3. Bruk Geographic routing for data residency
|
|
4. Konfigurer health probe mot /status-0123456789abcdef
|
|
5. Pek custom domain mot Traffic Manager
|
|
```
|
|
|
|
| Routing-metode | Bruksområde |
|
|
|---------------|------------|
|
|
| Geographic | Data residency-krav (EØS-region) |
|
|
| Performance | Lavest latens for sluttbrukere |
|
|
| Priority | DR-scenarier med primær/sekundær |
|
|
| Weighted | Gradvis migrering mellom regioner |
|
|
|
|
---
|
|
|
|
## Latency Optimization
|
|
|
|
### Strategier for Lav Latens
|
|
|
|
| Strategi | Beskrivelse | Latensreduksjon |
|
|
|----------|-------------|-----------------|
|
|
| Co-lokalisering | APIM gateway + Azure OpenAI i samme region | Eliminerer cross-region latens |
|
|
| Semantic caching | Cacher tidligere LLM-completions | 50-90% for gjentatte prompts |
|
|
| Private endpoints | Direkte nettverksforbindelse uten offentlig internett | 10-30ms reduksjon |
|
|
| Connection pooling | Gjenbruk av TCP-forbindelser | 50-100ms per request |
|
|
| Regional DNS | Innebygd FQDN med latency-based routing | Automatisk optimal ruting |
|
|
|
|
### Semantic Caching med Azure Managed Redis
|
|
|
|
```xml
|
|
<inbound>
|
|
<base />
|
|
<llm-semantic-cache-lookup
|
|
score-threshold="0.15"
|
|
embeddings-backend-id="embedding-backend"
|
|
embeddings-backend-auth="system-assigned" />
|
|
</inbound>
|
|
<outbound>
|
|
<base />
|
|
<llm-semantic-cache-store duration="3600" />
|
|
</outbound>
|
|
```
|
|
|
|
### Måling av Regional Latens
|
|
|
|
Bruk `llm-emit-token-metric` med regiondimensjon for å spore latens per region:
|
|
|
|
```xml
|
|
<llm-emit-token-metric namespace="ai-gateway-metrics">
|
|
<dimension name="Region" value="@(context.Deployment.Region)" />
|
|
<dimension name="API" value="@(context.Api.Name)" />
|
|
<dimension name="Backend" value="@(context.Request.Url.Host)" />
|
|
</llm-emit-token-metric>
|
|
```
|
|
|
|
---
|
|
|
|
## Data Residency Compliance
|
|
|
|
### EØS Data Residency-krav
|
|
|
|
For norsk offentlig sektor med krav om databehandling innenfor EØS:
|
|
|
|
| Krav | APIM-implementasjon |
|
|
|------|---------------------|
|
|
| Data-at-rest i EØS | Deploy APIM primærregion i West Europe/North Europe |
|
|
| Data-in-transit i EØS | Private endpoints + VNet-isolasjon |
|
|
| Ingen cross-geopolitical failover | Separate gateways per geopolitisk grense |
|
|
| Logging i EØS | Log Analytics workspace i EØS-region |
|
|
| Nøkkelhåndtering i EØS | Azure Key Vault i EØS-region |
|
|
|
|
### Viktige Advarsler
|
|
|
|
**Ikke** implementer en enhetlig gateway på tvers av geopolitiske regioner når data residency er påkrevd:
|
|
|
|
```
|
|
RIKTIG:
|
|
Gateway (West Europe) → Azure OpenAI (West Europe)
|
|
Gateway (North Europe) → Azure OpenAI (North Europe)
|
|
Separate FQDN per region
|
|
|
|
FEIL:
|
|
Gateway (West Europe) → Azure OpenAI (East US) ← Bryter data residency
|
|
Enhetlig gateway med failover til US-region ← Bryter data residency
|
|
```
|
|
|
|
### Azure OpenAI Deployment Types og Data Residency
|
|
|
|
| Deployment Type | Data Residency | Egnet for offentlig sektor? |
|
|
|----------------|---------------|---------------------------|
|
|
| Standard | Data i angitt region | Ja, med EØS-region |
|
|
| Provisioned (PTU) | Data i angitt region | Ja, med EØS-region |
|
|
| Data Zone Standard | Data innenfor Azure data zone | Ja, med European data zone |
|
|
| Global Standard | Data kan prosesseres i enhver region | Nei, ikke for data residency-krav |
|
|
|
|
### Policy for Data Residency Enforcement
|
|
|
|
```xml
|
|
<inbound>
|
|
<base />
|
|
<!-- Blokkér requests som kan rutes utenfor EØS -->
|
|
<choose>
|
|
<when condition="@(!new[] { "West Europe", "North Europe",
|
|
"Sweden Central", "France Central", "Germany West Central" }
|
|
.Contains(context.Deployment.Region))">
|
|
<return-response>
|
|
<set-status code="403" reason="Forbidden" />
|
|
<set-body>Data residency violation: Request routed outside EEA</set-body>
|
|
</return-response>
|
|
</when>
|
|
</choose>
|
|
</inbound>
|
|
```
|
|
|
|
---
|
|
|
|
## Cross-Region Failover
|
|
|
|
### Automatisk Failover med Innebygd FQDN
|
|
|
|
Ved standard multi-region deployment håndterer APIM failover automatisk:
|
|
|
|
```
|
|
1. Gateway i Region A svarer ikke
|
|
2. DNS TTL utløper (typisk 5-10 minutter)
|
|
3. Trafikk rutes til Region B (lavest latens blant aktive)
|
|
4. Klienter MÅ respektere DNS TTL
|
|
5. Retry-logikk i klient håndterer overgangsperiode
|
|
```
|
|
|
|
### Disable/Enable Regional Gateway
|
|
|
|
For planlagt vedlikehold eller DR-testing:
|
|
|
|
```bash
|
|
# Deaktiver gateway i North Europe
|
|
az apim update \
|
|
--name ai-gateway-apim \
|
|
--resource-group rg-apim \
|
|
--set additionalLocations[location="North Europe"].disableGateway=true
|
|
|
|
# Verifiser status
|
|
az apim show \
|
|
--name ai-gateway-apim \
|
|
--resource-group rg-apim \
|
|
--query "additionalLocations[].{Location:location,Disabled:disableGateway,Url:gatewayRegionalUrl}" \
|
|
--output table
|
|
|
|
# Reaktiver etter vedlikehold
|
|
az apim update \
|
|
--name ai-gateway-apim \
|
|
--resource-group rg-apim \
|
|
--set additionalLocations[location="North Europe"].disableGateway=false
|
|
```
|
|
|
|
### Active-Active med Active-Passive Azure OpenAI
|
|
|
|
For maksimal pålitelighet, kombinér active-active gateway med active-passive backend:
|
|
|
|
```
|
|
Region A (Active):
|
|
APIM Gateway → PTU Azure OpenAI (Priority 1)
|
|
→ Standard Azure OpenAI (Priority 2, failover)
|
|
|
|
Region B (Active):
|
|
APIM Gateway → PTU Azure OpenAI (Priority 1)
|
|
→ Standard Azure OpenAI (Priority 2, failover)
|
|
|
|
Cross-region failover:
|
|
Region A feil → All trafikk til Region B
|
|
Region A PTU throttled → Standard deployment i Region A
|
|
```
|
|
|
|
### Circuit Breaker for Backend Failover
|
|
|
|
```bicep
|
|
resource backend 'Microsoft.ApiManagement/service/backends@2023-09-01-preview' = {
|
|
name: 'ai-gateway-apim/aoai-westeurope'
|
|
properties: {
|
|
url: 'https://aoai-westeurope.openai.azure.com'
|
|
protocol: 'http'
|
|
circuitBreaker: {
|
|
rules: [
|
|
{
|
|
failureCondition: {
|
|
count: 3
|
|
errorReasons: ['Server errors']
|
|
interval: 'PT1M'
|
|
statusCodeRanges: [
|
|
{ min: 429, max: 429 }
|
|
{ min: 500, max: 599 }
|
|
]
|
|
}
|
|
name: 'aoai-breaker'
|
|
tripDuration: 'PT30S'
|
|
acceptRetryAfter: true
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Kapasitetsplanlegging for Failover
|
|
|
|
Ved failover må gjenværende regioner absorbere all trafikk:
|
|
|
|
| Scenario | Region A Kapasitet | Region B Kapasitet | Nødvendig overprovisionering |
|
|
|----------|-------------------|-------------------|-----------------------------|
|
|
| 2 regioner, active-active | 100% normal load | 100% normal load | Hver region: 2x normal |
|
|
| 2 regioner, active-passive | 100% normal load | 0% (standby) | Passiv region: 1x normal |
|
|
| 3 regioner, active-active | 33% normal load | 33% normal load | Hver region: 1.5x normal |
|
|
|
|
Bruk [Azure OpenAI Capacity Calculator](https://oai.azure.com/portal/calculator) for PTU-kapasitetsplanlegging.
|
|
|
|
---
|
|
|
|
## Nettverksarkitektur
|
|
|
|
### Internal VNet Mode — Multi-Region
|
|
|
|
For scenarier med intern VNet-modus (typisk for offentlig sektor):
|
|
|
|
```
|
|
Klient → Azure Front Door (WAF) → Private Endpoint → APIM Gateway (Region A)
|
|
→ APIM Gateway (Region B)
|
|
→ Egenhåndtert routing (Load Balancer/Traffic Manager)
|
|
```
|
|
|
|
**Viktig:** I internal VNet-modus håndterer APIM IKKE automatisk routing mellom regionale gateways. Organisasjonen må selv implementere routing via Azure Front Door, Traffic Manager, eller en annen load balancer.
|
|
|
|
### VNet Krav per Region
|
|
|
|
Hver region krever eget VNet med nødvendige NSG-regler:
|
|
|
|
| Port | Retning | Formål |
|
|
|------|---------|--------|
|
|
| 3443 | Inbound | Management traffic |
|
|
| 443 | Inbound | Client traffic (HTTPS) |
|
|
| 1433 | Outbound | Azure SQL (primærregion) — påkrevd fra alle regioner |
|
|
| 443 | Outbound | Azure Storage, Azure Monitor, Key Vault |
|
|
|
|
---
|
|
|
|
## Referanser
|
|
|
|
- [Deploy an Azure API Management instance to multiple Azure regions](https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-deploy-multi-region) — Offisiell guide for multi-region deployment
|
|
- [Use a gateway in front of multiple Azure OpenAI deployments or instances](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/azure-openai-gateway-multi-backend) — Arkitekturmønstre for AI gateway
|
|
- [AI gateway in Azure API Management](https://learn.microsoft.com/en-us/azure/api-management/genai-gateway-capabilities) — Oversikt over AI gateway-kapabiliteter
|
|
- [Access Azure OpenAI through a gateway](https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/azure-openai-gateway-guide) — Well-Architected Framework-veiledning
|
|
- [Azure OpenAI deployment types](https://learn.microsoft.com/en-us/azure/foundry/foundry-models/concepts/deployment-types) — Deployment types og data residency
|
|
|
|
---
|
|
|
|
## For Cosmo
|
|
|
|
- **Bruk denne referansen** når kunder trenger en AI-gateway som dekker flere Azure-regioner, eller når data residency og failover er sentrale krav.
|
|
- For norsk offentlig sektor: Anbefal alltid EØS-regioner (West Europe, North Europe, Sweden Central) og advar eksplisitt mot Global Standard deployments som kan prosessere data utenfor EØS.
|
|
- Husk at rate-limiting policyer (rate-limit, llm-token-limit) teller separat per regional gateway — dette betyr at en 1000 TPM-grense gjelder per region, ikke totalt.
|
|
- Start enkelt med to EØS-regioner (West Europe + North Europe) og vurder tredje region (Sweden Central) kun ved behov for høyere tilgjengelighet.
|
|
- Kombiner alltid multi-region gateway med circuit breaker og backend pools for å sikre automatisk failover uten manuell intervensjon.
|