S

super-dev — full-stack

@super-dev.app · Full-stack · ★ ouvert aux missions
12,8k abonnés·47 vidéos·Actif depuis 2017

Développeur full-stack .NET / Angular avec une casquette DevOps sur Azure Cloud. Aussi à l'aise sur Flutter + Firebase. Je construis des produits, je les déploie, je les surveille.

Retour aux articles
AZURE
AZURE

Déployer une API .NET sur Azure Container Apps

Article 3 sur 6 — Azure DevOps de zéro
Prerender, Container Apps, secrets, CI/CD, Docker, observabilité : livrer sur Azure sans serveur ni douleur.

Provisionner un cluster Kubernetes pour héberger une seule API, c'est sortir l'artillerie lourde pour une mouche. Azure Container Apps offre le serverless conteneurisé : on pousse une image, la plateforme gère l'orchestration, le scaling — jusqu'à zéro — et le routage, le tout sans jamais écrire un manifeste Kubernetes.

Déployer une image en une commande

Container Apps s'appuie sur un environment (la frontière réseau et de logs partagée par plusieurs apps) puis sur des apps individuelles. La CLI az containerapp up fait tout le travail de bootstrap au premier déploiement :

Bash
1az containerapp up \
2 --name api-super-dev \
3 --resource-group rg-super-dev \
4 --environment env-super-dev \
5 --image ghcr.io/super-dev/api:1.4.0 \
6 --target-port 8080 \
7 --ingress external \
8 --query properties.configuration.ingress.fqdn

Le --target-port 8080 doit correspondre au port que Kestrel écoute dans le conteneur ( ASPNETCORE_URLS=http://+:8080 ). L'ingress external expose un FQDN HTTPS public avec certificat géré ; internal réserve l'app au trafic intra-environment, idéal pour un service appelé seulement par d'autres apps.

Scale-to-zero et règles KEDA

L'argument économique décisif : avec --min-replicas 0 , une app inactive ne coûte rien . À la première requête, la plateforme démarre un réplica (cold start de quelques centaines de millisecondes). Le scaling repose sur KEDA : on déclare des règles sur des métriques, pas seulement sur le CPU.

Bash
1az containerapp update \
2 --name api-super-dev \
3 --resource-group rg-super-dev \
4 --min-replicas 0 \
5 --max-replicas 10 \
6 --scale-rule-name http-rule \
7 --scale-rule-type http \
8 --scale-rule-http-concurrency 50

Ici un nouveau réplica est ajouté par tranche de 50 requêtes concurrentes. Pour un worker consommant une file, on utilise un scaler azure-servicebus ou azure-queue : l'app dort tant que la file est vide, puis monte en charge selon la profondeur de la queue. Le catalogue des scalers KEDA couvre Kafka, Redis, Prometheus et bien d'autres.

Révisions et traffic split

Chaque modification de la configuration de conteneur (image, variables, ressources) crée une nouvelle révision immuable. En mode multiple , plusieurs révisions tournent en parallèle et on répartit le trafic — la base d'un déploiement canary ou blue-green.

Bash
1az containerapp ingress traffic set \
2 --name api-super-dev \
3 --resource-group rg-super-dev \
4 --revision-weight api-super-dev--rev3=90 api-super-dev--rev4=10

On envoie ici 10 % du trafic vers la nouvelle révision. Si les métriques tiennent, on bascule à 100 , sinon on revient à 0 instantanément — sans redéployer. C'est un rollback qui se mesure en secondes.

Gérer la configuration proprement

Les variables d'environnement sensibles passent par des secrets d'app, référencés via la syntaxe secretref: . Mieux : activez l' identité managée sur l'app et faites pointer un secret directement vers Azure Key Vault, sans jamais matérialiser la valeur. La documentation Container Apps détaille ingress, Dapr et les sondes de santé ( liveness / readiness ) à câbler pour un service de production.

Container Apps, c'est le serverless sans renoncer aux conteneurs : on garde son image OCI et son Dockerfile , mais on oublie le cluster . Scale-to-zero et traffic split offerts.
super-dev — portfolio.app
// Continuer dans AZURE
Déployer un SPA Angular prerendu (SSG) sur Azure Static Web Apps
7 min • 2,7k lectures
Secrets zéro-config : Key Vault + Managed Identity
7 min • 1,7k lectures