Platform engineering 30 min de lecture

Construire une Internal Developer Platform

Qu'est-ce que le Platform Engineering ?

Le Platform Engineering consiste a construire et maintenir une plateforme interne qui permet aux equipes de developpement de livrer du logiciel de maniere autonome, sans dependre de tickets vers l'equipe Ops.

Les piliers d'une IDP

  • Self-service : les developpeurs provisionnent eux-memes leurs ressources
  • Golden paths : des chemins balisees et optimises pour les cas courants
  • Guardrails : des contraintes automatiques qui garantissent la conformite
  • Observabilite integree : monitoring, logs et traces accessibles sans configuration

Backstage : portail developpeur

Backstage (Spotify) est un framework open-source pour construire des portails developpeur :

# Creer un projet Backstage
npx @backstage/create-app@latest

# Structure du catalogue
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
  name: mon-api
  description: API de gestion des commandes
  annotations:
    github.com/project-slug: mon-org/mon-api
    backstage.io/techdocs-ref: dir:.
spec:
  type: service
  lifecycle: production
  owner: team-backend
  system: e-commerce
  providesApis:
    - orders-api
  dependsOn:
    - resource:default/postgres-db

# Template pour creer un nouveau service
apiVersion: scaffolder.backstage.io/v1beta3
kind: Template
metadata:
  name: nouveau-service
  title: Creer un nouveau microservice
spec:
  owner: team-platform
  type: service
  parameters:
    - title: Informations du service
      properties:
        name:
          title: Nom du service
          type: string
        language:
          title: Langage
          type: string
          enum: [go, python, java, nodejs]
  steps:
    - id: fetch
      name: Generer le code
      action: fetch:template
      input:
        url: ./skeleton
        values:
          name: ${{ parameters.name }}
    - id: publish
      name: Publier sur GitHub
      action: publish:github
      input:
        repoUrl: github.com?owner=mon-org&repo=${{ parameters.name }}
    - id: register
      name: Enregistrer dans le catalogue
      action: catalog:register
      input:
        repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
        catalogInfoPath: /catalog-info.yaml

Golden Paths

Les golden paths sont des workflows optimises et documentes pour les operations courantes :

  • Creer un nouveau microservice (template + CI/CD + monitoring)
  • Deployer en production (merge request -> review -> deploy automatique)
  • Ajouter une base de donnees (Terraform module self-service)
  • Configurer un domaine (DNS + certificat TLS automatique)

Self-service avec Terraform Modules

# Module self-service pour une base de donnees
module "database" {
  source = "git::https://git.example.com/modules/rds.git?ref=v2.1"

  name        = "orders-db"
  engine      = "postgres"
  version     = "15"
  environment = "production"
  team        = "backend"

  # Les guardrails sont dans le module :
  # - Chiffrement active par defaut
  # - Backups automatiques
  # - Monitoring configure
  # - Acces restreint au VPC
}

Guardrails avec OPA/Gatekeeper

# Politique : toutes les images doivent venir du registre interne
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAllowedRepos
metadata:
  name: only-internal-registry
spec:
  match:
    kinds:
    - apiGroups: [""]
      kinds: ["Pod"]
  parameters:
    repos:
    - "registry.example.com/"
Best practice : Commencez petit. Identifiez les 3-5 operations les plus frequentes et creez des golden paths pour celles-ci. Iterez en fonction des retours des equipes.