# Cloud Migration Strategy — GCP → Azure

# Cloud Migration Strategy — Drop

**Dato:** 2026-02-18
**Status:** Planlegging
**Beslutning:** Azure som produksjonsplattform, GCP for dev/staging

---

## SpareBank 1 — Teknisk Stack (Research)

| Lag | Teknologi |
|-----|----------|
| **Cloud** | Azure (primær) — Eunomia-plattformen for 13 banker |
| **Sekundær** | AWS (mindre workloads) |
| **Backend** | Kotlin/Java (Spring Boot) |
| **Frontend** | React + TypeScript |
| **Orkestrering** | Kubernetes / OpenShift |
| **Meldingskø** | Apache Kafka |
| **Autentisering** | BankID (norsk eID) |
| **API Gateway** | Axway |
| **Partnerskap** | Microsoft (strategisk partner) |

## Drops Nåværende Stack

| Lag | Teknologi |
|-----|----------|
| **Frontend** | Next.js 16 + React 19 + Tailwind v4 |
| **Backend** | Next.js API Routes (Node.js) |
| **Database** | SQLite (better-sqlite3) → PostgreSQL (prod) |
| **Auth** | JWT (jose) i httpOnly cookies + BankID |
| **Hosting** | Fly.io (staging), Vercel (planned prod) |

## Migreringsstrategi

### Fase 1: GCP Dev/Staging (NÅ)
- **Gratis prøveperiode:** $300/kr2,884 til 20. mai 2026
- **Tjenester:** Cloud Run (containerisert Next.js), Cloud SQL (PostgreSQL), Cloud Storage
- **Formål:** Utviklingsmiljø + CI/CD testing
- **Ingen regulatorisk risiko** (kun testdata)

### Fase 2: Azure Produksjon (Når credits kommer)
- **Microsoft Founders Hub** — søknad sendt (#1362)
- **Tjenester:** Azure App Service eller AKS, Azure Database for PostgreSQL, Azure Blob Storage
- **Formål:** Produksjonsmiljø
- **SpareBank 1-tilpasning:** Samme skyplattform reduserer friksjon ved partnerskap

### Fase 3: Multi-Cloud Beredskap
- **AWS** — søknad sendt (#1360), backup/DR
- **Containerisert arkitektur** — Docker + eventuelt Kubernetes gjør leverandøruavhengig

## GCP Deploy Plan (Fase 1)

### Steg 1: Containerisering
```dockerfile
# Dockerfile for Drop Next.js
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]
```

### Steg 2: GCP Oppsett
1. Opprett GCP-prosjekt (allerede: project-72cd303f)
2. Aktiver Cloud Run API
3. Opprett Cloud SQL PostgreSQL-instans (db-f1-micro for dev)
4. Konfigurer secrets i Secret Manager
5. Sett opp Cloud Build for CI/CD

### Steg 3: Deploy Pipeline
```bash
# Build og push container
gcloud builds submit --tag gcr.io/PROJECT_ID/drop-web

# Deploy til Cloud Run
gcloud run deploy drop-web \
  --image gcr.io/PROJECT_ID/drop-web \
  --platform managed \
  --region europe-north1 \
  --allow-unauthenticated \
  --set-env-vars DATABASE_URL=postgresql://...
```

### Steg 4: DNS + SSL
- Custom domain: drop.alai.no → Cloud Run
- SSL: Automatisk via Google-managed certificates
- CDN: Cloud CDN foran Cloud Run (valgfritt)

## Regulatoriske Krav (Finanstilsynet)

- **60-dagers varsel** før sky-outsourcing for finansielle tjenester
- **Dokumentasjonskrav:** Sikkerhetstiltak, data residency, exit-strategi
- **Data residency:** Europe (europe-north1 = Finland, closest to Norway)
- **Handling:** Forbered dokumentasjon FØR produksjonsmigrering

## Kotlin/Java Vurdering

**Beslutning: Nei — beholder Next.js/TypeScript**

**Hvorfor:**
1. Drop er ~7,600 linjer TypeScript — full rewrite til Kotlin = 2-3 mnd
2. SpareBank 1 sin API er REST/GraphQL — språket på vår side er irrelevant
3. TypeScript fullstack = ett språk, ett team, raskere iterasjon
4. Next.js API Routes er tilstrekkelig for vår skala (fintech MVP)
5. Når vi trenger mikrotjenester → da vurderer vi Kotlin for spesifikke tjenester

## Estimerte Kostnader

| Tjeneste | GCP (dev) | Azure (prod) |
|----------|-----------|---------------|
| Compute | Cloud Run: ~$0 (free tier) | App Service B1: ~$13/mnd |
| Database | Cloud SQL micro: ~$7/mnd | PostgreSQL Basic: ~$25/mnd |
| Storage | 5GB: ~$0.10/mnd | 5GB: ~$0.10/mnd |
| **Totalt** | **~$7/mnd** (dekkes av credits) | **~$38/mnd** (dekkes av credits) |

## Relaterte Oppgaver

- MC #1360: AWS credits søknad (sendt)
- MC #1361: GCP credits søknad (sendt, free trial aktiv)
- MC #1362: Azure/Microsoft Founders Hub (sendt)
- MC #1364: Anthropic credits søknad