Cloud

Azure

Services Azure essentiels, CLI et architecture cloud pour le DevOps.

azurecloudclidevopsinfrastructure

Azure CLI — Configuration

$az login
$az account list --output table
$az account set --subscription 'Mon Abonnement'
$az group create --name rg-projet --location westeurope

Compute

Machines virtuelles

$az vm create --resource-group rg-projet --name vm-web --image Ubuntu2204 --admin-username azureuser --generate-ssh-keys --size Standard_B2s
$az vm list --resource-group rg-projet --output table
$az vm start --resource-group rg-projet --name vm-web
$az vm stop --resource-group rg-projet --name vm-web
$az vm delete --resource-group rg-projet --name vm-web --yes

Azure Kubernetes Service (AKS)

$az aks create --resource-group rg-projet --name aks-cluster --node-count 3 --generate-ssh-keys --network-plugin azure
$az aks get-credentials --resource-group rg-projet --name aks-cluster
$az aks scale --resource-group rg-projet --name aks-cluster --node-count 5

App Service

$az webapp create --resource-group rg-projet --plan plan-web --name mon-app --runtime 'NODE:20-lts'
$az webapp deployment source config --resource-group rg-projet --name mon-app --repo-url https://github.com/user/repo --branch main

Stockage

Blob Storage

$az storage account create --name stockageprojet --resource-group rg-projet --location westeurope --sku Standard_LRS
$az storage container create --name conteneur --account-name stockageprojet
$az storage blob upload --account-name stockageprojet --container-name conteneur --name fichier.txt --file ./fichier.txt
$az storage blob list --account-name stockageprojet --container-name conteneur --output table
$az storage blob download --account-name stockageprojet --container-name conteneur --name fichier.txt --file ./fichier-dl.txt

Réseau

VNet & Sous-réseaux

$az network vnet create --resource-group rg-projet --name vnet-prod --address-prefix 10.0.0.0/16 --subnet-name subnet-web --subnet-prefix 10.0.1.0/24

Network Security Group

$az network nsg create --resource-group rg-projet --name nsg-web
$az network nsg rule create --resource-group rg-projet --nsg-name nsg-web --name AllowHTTP --priority 100 --destination-port-ranges 80 443 --access Allow --protocol Tcp --direction Inbound

Load Balancer

$az network lb create --resource-group rg-projet --name lb-web --sku Standard --frontend-ip-name frontend --backend-pool-name pool-web

Identité & Sécurité

Entra ID (Azure AD)

$az ad user list --output table
$az ad group create --display-name devops-team --mail-nickname devops

RBAC

$az role assignment create --assignee [email protected] --role Contributor --scope /subscriptions/{sub-id}/resourceGroups/rg-projet
$az role assignment list --resource-group rg-projet --output table

Key Vault

$az keyvault create --name kv-projet --resource-group rg-projet --location westeurope
$az keyvault secret set --vault-name kv-projet --name db-password --value 'MotDePasseSecret'
$az keyvault secret show --vault-name kv-projet --name db-password --query value --output tsv

Base de données

Azure SQL

$az sql server create --name sql-projet --resource-group rg-projet --location westeurope --admin-user sqladmin --admin-password 'P@ssw0rd'
$az sql db create --resource-group rg-projet --server sql-projet --name db-app --service-objective S1

PostgreSQL Flexible Server

$az postgres flexible-server create --resource-group rg-projet --name pg-projet --location westeurope --admin-user pgadmin --admin-password 'P@ssw0rd' --sku-name Standard_B1ms --tier Burstable

DevOps & Container Registry

Azure Container Registry (ACR)

$az acr create --resource-group rg-projet --name acrprojet --sku Basic
$az acr login --name acrprojet
$docker tag mon-app:latest acrprojet.azurecr.io/mon-app:v1
$docker push acrprojet.azurecr.io/mon-app:v1

Attacher ACR à AKS :

$az aks update --resource-group rg-projet --name aks-cluster --attach-acr acrprojet

Azure Pipelines (exemple)

trigger:
  - main
 
pool:
  vmImage: "ubuntu-latest"
 
steps:
  - task: NodeTool@0
    inputs:
      versionSpec: "20.x"
 
  - script: |
      npm ci
      npm run build
      npm test
    displayName: "Build & Test"
 
  - task: AzureWebApp@1
    inputs:
      azureSubscription: "ma-connexion"
      appName: "mon-app"
      package: "$(System.DefaultWorkingDirectory)"

Bonnes pratiques

PratiqueDétail
Resource GroupsUn groupe par environnement (rg-dev, rg-staging, rg-prod)
NommageConvention cohérente : {type}-{projet}-{env}
TagsToujours taguer : environment, owner, cost-center
CoûtsActiver Azure Cost Management et les alertes budgétaires
VerrousCanNotDelete sur les ressources critiques en production
IaCPréférer Terraform ou Bicep aux déploiements manuels
MonitoringAzure Monitor + Log Analytics sur chaque ressource