Craft Easy API — Hosting & Infrastrukturanalys¶
Version: 2.0 Datum: 2026-03-27 Relaterat: specification.md
Beslut¶
Allt på Azure. Cosmos DB vCore som databas. En plattform, en faktura, krediter betalar.
Atlas är en backup-plan om Cosmos-kompatibilitet visar sig vara ett problem — inte en utgångspunkt.
Innehållsförteckning¶
- Strategi
- Plattformen: Azure
- Databasen: Cosmos DB vCore
- Arkitektur per scenario
- Prisanalys med Azure-kredit
- Disaster Recovery
- Uppgraderingsväg och Atlas-eskalering
- Referens: Fullständig tjänstejämförelse
1. Strategi¶
Principer¶
| Princip | Regel |
|---|---|
| En plattform | Allt på Azure. Inga delade setups mellan GCP/Azure/Atlas. |
| Krediter först | Azure-krediten (2 000 SEK/mån) ska täcka så mycket som möjligt. |
| Cosmos först | Cosmos DB vCore tills ett projekt bevisar att det behöver Atlas. |
| Byt vid behov | Om Cosmos-kompatibilitet biter → byt det projektet till Atlas. Tar 5 min. |
| Scale-to-zero | Alla hobby/test-projekt skalar till noll. Betala bara vid trafik. |
Varför inte split GCP + Atlas?¶
| Split (GCP + Atlas) | Allt Azure | |
|---|---|---|
| Leverantörer | 2-3 | 1 |
| Konton att hantera | 3 (GCP + Atlas + Azure) | 1 |
| Fakturor | 2-3 | 1 |
| Azure-kredit utnyttjad | Nej (slösas bort) | Ja, fullt |
| Gratis DB-lagring | 512 MB (Atlas M0) | 32 GB (Cosmos Free) |
| Gratis backup | Nej | Ja (PITR 7 dagar) |
| MongoDB-kompatibilitet | 100% | ~90% |
| Komplexitet | Hög | Låg |
De 10% kompatibilitetsskillnaden i Cosmos vCore handlar om avancerade aggregation-operatorer och edge cases. Hobby-projekt och de flesta produktionsprojekt träffar aldrig dessa.
2. Plattformen¶
Azure Container Apps¶
| Egenskap | Detalj |
|---|---|
| Typ | Serverless containers |
| Skalning | 0 → N replicas (scale-to-zero) |
| Pris | ~$0.000024/vCPU-sek + ~$0.000003/GiB-sek |
| Free tier | 180K vCPU-sek + 360K GiB-sek/mån |
| TLS | Managed, gratis |
| Custom domains | Ja |
| VNet | Full integration med Private Endpoints |
Varför Container Apps? - FastAPI körs i en container → perfekt match - Scale-to-zero → hobby-projekt kostar ingenting - Samma tjänst från hobby till produktion — bara config ändras - Kredit-täckt
3. Databasen¶
Cosmos DB for MongoDB vCore¶
| Egenskap | Detalj |
|---|---|
| Motor | Riktig MongoDB-motor (inte RU-emulering) |
| Kompatibilitet | ~90% MongoDB 7.x (wire protocol) |
| Free tier | 32 GB lagring, 8 GB RAM, burstable |
| Backup | Inkluderat — PITR 7-35 dagar |
| Azure-native | Private Link, Azure AD, VNet, en faktura |
| Kredit-täckt | Ja (Azure-tjänst) |
Vad fungerar¶
- CRUD (insert, find, update, delete)
- Aggregation pipeline (de vanligaste operatorerna)
- Transactions (multi-document)
- Change streams
- Beanie ODM
- Indexes (alla standardtyper)
Kända begränsningar (de ~10%)¶
| Begränsning | Påverkan | Workaround |
|---|---|---|
| Vissa avancerade aggregation-operatorer | Låg — de flesta projekt använder dem inte | Förenkla query eller byt till Atlas |
| Ingen Atlas Search | Medium — om du behöver fulltext | Azure AI Search (separat) |
| Sharding mer begränsad | Låg — relevant först vid >100 GB | Vertikal skalning eller Atlas |
| Viss fördröjning i feature-releaser | Låg | Vänta eller Atlas |
Varför inte Cosmos DB RU-baserad?¶
Använd ALDRIG RU-varianten. Den är ett translationslager, inte riktig MongoDB. Cosmos vCore är en helt annan produkt — den kör faktisk MongoDB-motor.
4. Arkitektur per scenario¶
Alla projekt (hobby, test, produktion)¶
┌──────────────────────────────────────────────────────┐
│ Azure │
│ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Container Apps Environment │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌────────┐ │ │
│ │ │Projekt 1 │ │Projekt 2 │ │Proj. N │ ... │ │
│ │ │(service) │ │(service) │ │ │ │ │
│ │ │scale: 0-N│ │scale: 0-N│ │ │ │ │
│ │ └────┬─────┘ └────┬─────┘ └───┬────┘ │ │
│ └───────┼─────────────┼───────────┼────────────────┘ │
│ │ │ │ │
│ ┌───────▼─────────────▼───────────▼────────────────┐ │
│ │ Cosmos DB vCore (Free / M30 / M40) │ │
│ │ │ │
│ │ DB: projekt1 DB: projekt2 DB: projektN │ │
│ │ │ │
│ │ Free: 32 GB, 8 GB RAM, PITR backup │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────┐ ┌──────────┐ ┌───────────────────┐ │
│ │ ACR (Basic)│ │Key Vault │ │ Log Analytics │ │
│ │ Container │ │ Secrets │ │ Monitor + Alerts │ │
│ │ images │ │ │ │ │ │
│ └────────────┘ └──────────┘ └───────────────────┘ │
└─────────────────────────────────────────────────────────┘
Hobby/Test: Delad Cosmos Free¶
Alla hobby- och test-projekt delar samma Cosmos vCore Free-instans med separata databaser:
# Projekt 1
DATABASE_NAME=hobby-projekt1
MONGODB_URI=mongodb+srv://cosmos-free-instance...
# Projekt 2
DATABASE_NAME=hobby-projekt2
MONGODB_URI=mongodb+srv://cosmos-free-instance...
# ... samma connection string, olika databasnamn
32 GB delat mellan alla projekt. Mer än tillräckligt — Atlas M0 ger bara 512 MB.
Produktion: Dedikerad Cosmos-instans (eller Atlas)¶
När ett projekt går till produktion får det sin egen Cosmos-instans:
Hobby/Test: Cosmos Free (delad) → $0
Produktion: Cosmos M30 + HA (egen) → ~$680/mån (delvis kredit-täckt)
eller
Atlas M30 (egen) → ~$600/mån (ej kredit-täckt)
5. Prisanalys med Azure-kredit¶
Azure-kredit: 2 000 SEK/mån (~$190 USD)¶
Krediten täcker alla Azure-tjänster. Gäller EJ Atlas (separat leverantör).
Hobby — 4 projekt¶
| Komponent | Tjänst | ~Pris/mån |
|---|---|---|
| Compute | 4 Container Apps (scale-to-zero) | ~$0-15 |
| Databas | Cosmos vCore Free (32 GB, delad) | $0 |
| Registry | ACR Basic | $5 |
| Monitoring | Azure Monitor Free | $0 |
| Summa | ~$5-20 | |
| Azure-kredit | -$190 | |
| Ur fickan | $0 |
Test/Staging — 1 projekt¶
| Komponent | Tjänst | ~Pris/mån |
|---|---|---|
| Compute | Container Apps (1 container, always-on) | ~$15 |
| Databas | Cosmos vCore Free | $0 |
| Registry | ACR Basic | $5 |
| Monitoring | Azure Monitor | $0 |
| Summa | ~$20 | |
| Azure-kredit | -$190 | |
| Ur fickan | $0 |
Produktion — full redundans, DR¶
| Komponent | Tjänst | ~Pris/mån |
|---|---|---|
| Compute (Primary) | Container Apps, 2 replicas, West Europe | $80 |
| Compute (DR) | Container Apps, 1 replica, North Europe | $50 |
| Load Balancer | Azure Front Door Standard | $35 |
| WAF | Front Door WAF | $20 |
| Databas | Cosmos vCore M30 + HA (backup inkluderat) | $680 |
| Registry | ACR Standard (geo-replicated) | $25 |
| Secrets | Key Vault Standard | $5 |
| Monitoring | Monitor + Log Analytics (10 GB) | $25 |
| Alerting | Monitor Alerts (10 rules) | $5 |
| Summa | ~$925 | |
| Azure-kredit | -$190 | |
| Ur fickan | ~$735 |
Produktion med Atlas istället¶
| Komponent | Tjänst | ~Pris/mån |
|---|---|---|
| Azure-infra (compute, LB, WAF, secrets, monitoring) | $245 | |
| Atlas M30 + extra region + PITR | $600 | |
| Summa | ~$845 | |
| Azure-kredit (täcker bara Azure-infra) | -$190 | |
| Ur fickan | ~$655 |
Jämförelse — alla scenarier¶
| Scenario | Allt Azure + Cosmos | Azure + Atlas | Skillnad |
|---|---|---|---|
| Hobby (4 proj) | $0 | $0 | Lika |
| Test | $0 | $57 (Atlas M10) | Cosmos $57 billigare |
| Produktion | $735 | $655 | Atlas $80 billigare |
| Hobby + Test + Prod (år) | $8,820 | $8,484 | Atlas $336 billigare/år |
Slutsats: Nästan identisk årskostnad (~$300 skillnad). Cosmos-vägen ger enklare setup (en leverantör). Atlas-vägen ger billigare produktion och 100% kompatibilitet.
Rekommendation: Kör Cosmos för allt. Om du stöter på kompatibilitetsproblem i ett produktionsprojekt → byt det till Atlas ($80/mån mer, 5 minuters arbete).
6. Disaster Recovery¶
Krav¶
| Krav | Mål |
|---|---|
| RTO | < 4 timmar |
| RPO | < 1 timme |
Arkitektur¶
┌─────────────────────────┐
│ Azure Front Door │
│ (Global LB + WAF) │
│ Health probes: /health │
└─────────┬───────┬─────────┘
│ │
┌───────────────▼─┐ ┌─▼───────────────┐
│ West Europe │ │ North Europe │
│ (Primary) │ │ (DR) │
│ │ │ │
│ Container Apps │ │ Container Apps │
│ 2 replicas │ │ 1 replica │
└────────┬─────────┘ └────────┬──────────┘
│ │
┌────────▼──────────────────────▼──────────┐
│ Cosmos DB vCore M30 + HA │
│ │
│ Primary (West EU) ←→ Standby (same AZ) │
│ Automatic failover: 15-30 sek │
│ PITR: 7-35 dagar (inkluderat) │
│ Geo-redundant backup │
└───────────────────────────────────────────┘
Uppnått¶
| Krav | Mål | Uppnått |
|---|---|---|
| RTO | < 4 timmar | < 2 minuter (Front Door failover + Cosmos HA) |
| RPO | < 1 timme | < 1 minut (HA standby + PITR) |
7. Uppgraderingsväg och Atlas-eskalering¶
Från hobby till produktion¶
$0/mån Cosmos Free (delad) + Container Apps (scale-to-zero)
│ Krediten täcker allt.
│
▼ Projektet börjar få användare
$0/mån Samma setup — Free-instansen klarar mer än du tror (32 GB, 8 GB RAM)
│
▼ Behöver mer: always-on, fler replicas
~$100 Cosmos Free + Container Apps (min 1 instance, always-on)
│ Fortfarande kredit-täckt.
│
▼ Behöver mer DB: fler anslutningar, mer lagring
~$250 Cosmos M25 ($55) + Container Apps
│ Kredit-täckt.
│
▼ Produktion: behöver HA, DR, multi-region
~$735 Cosmos M30+HA + Front Door + 2 regioner
│ $190 kredit → betalar $735 ur fickan.
│
▼ Stöter på Cosmos-kompatibilitetsproblem?
~$655 Byt DB till Atlas M30 + multi-region
$190 kredit täcker Azure-infra, Atlas separat.
När ska du byta till Atlas?¶
Byt bara om du stöter på ett konkret problem:
| Symptom | Orsak | Åtgärd |
|---|---|---|
| Aggregation pipeline kraschar | Operator saknas i Cosmos | Byt till Atlas |
| Beanie-operation beter sig konstigt | Cosmos-skillnad | Byt till Atlas |
| Behöver Atlas Search / fulltext | Finns inte i Cosmos | Byt till Atlas |
| Prestanda otillräcklig trots uppgradering | Cosmos-begränsning | Byt till Atlas |
Bytesprocess: Ändra MONGODB_URI i .env → deploy. Klart. Beanie och all kod fungerar identiskt.
8. Referens: Fullständig tjänstejämförelse¶
Compute¶
| Kriterium | Azure Container Apps | GCP Cloud Run |
|---|---|---|
| Pris | ~$0.000024/vCPU-sek | ~$0.000024/vCPU-sek |
| Scale-to-zero | Ja | Ja |
| Cold start | 2-5 sek | 1-3 sek |
| Free tier | 180K vCPU + 360K GiB | 180K vCPU + 360K GiB + 2M req |
| VNet | Utmärkt | Bra |
| Azure-kredit | Ja | Nej |
Databas¶
| Kriterium | Cosmos vCore | Atlas | Cosmos RU |
|---|---|---|---|
| MongoDB-kompatibilitet | ~90% | 100% | ~60% (UNDVIK) |
| Beanie ODM | Ja | Ja | Riskfyllt |
| Free tier lagring | 32 GB | 512 MB | — |
| Backup inkluderat | Ja (PITR) | Snapshots (PITR extra) | Periodisk |
| Azure-kredit | Ja | Nej | Ja |
| Azure AD | Ja | Nej | Ja |
| Multi-cloud | Nej | Ja | Nej |
| Atlas Search | Nej | Ja | Nej |
| Vendor lock-in | Medium | Låg | Hög |
GCP native databas — finns det?¶
Nej. GCP har ingen MongoDB-kompatibel managed databas. Deras alternativ:
| GCP-tjänst | Typ | MongoDB-kompatibel? |
|---|---|---|
| Firestore | Dokumentdatabas | Nej (annat query-språk) |
| Cloud Bigtable | Wide-column | Nej |
| Cloud SQL | Relationsdatabas | Nej |
| AlloyDB | PostgreSQL | Nej |
| Spanner | Global SQL | Nej |
På GCP måste du använda Atlas eller självhanterad MongoDB.
Prisöversikt — alla konfigurationer¶
Med Azure-kredit (2 000 SEK ≈ $190/mån):
| Konfiguration | Hobby (4 proj) | Test | Produktion | Prod/år |
|---|---|---|---|---|
| Azure + Cosmos (rekommenderat) | $0 | $0 | $735 | $8,820 |
| Azure + Atlas | $0 | $57 | $655 | $8,484 |
| GCP + Atlas (kredit slösas) | $0 | $67 | $761 (+$190 slösad) | $11,412* |
* GCP-raden inkluderar den slösade Azure-krediten ($190×12 = $2,280/år) som alternativkostnad.
OBS: Priser är uppskattningar (Q1 2025). Verifiera med: - Azure Pricing Calculator - MongoDB Atlas Pricing - Azure-kredit: 2 000 SEK/mån vid kurs ~10.5 SEK/USD