Skip to content

Documentation Complète - Système de Déploiement Cloud

⚠️ Attention - Mise à jour importante des rôles

Les anciens rôles (Editor, Admin, Viewer, User) ont été remplacés par des rôles plus spécifiques et granulaires pour chaque service. Cette mise à jour permet un meilleur contrôle des permissions. Veuillez mettre à jour vos configurations en conséquence.

⚠️ Attention - Mise à jour de la syntaxe des variables

La syntaxe pour les variables a été mise à jour. L'ancienne forme ${VARIABLE:} n'est plus supportée. Utilisez désormais la forme ${VARIABLE:DEFAULT_VALUE} où DEFAULT_VALUE est la valeur par défaut si la variable n'est pas définie. s'il n'est pas défini, la variable sera ignorée. Pour les variables obligatoires, utilisez ${VARIABLE} ou ou ${VARIABLE:-} sans valeur par défaut.

Exemple :

  • Ancienne syntaxe : ${MY_VARIABLE:}
  • Nouvelles syntaxes : ${MY_VARIABLE:valeur_par_defaut}, ${MY_VARIABLE:-}, ${MY_VARIABLE}

🚀 Migration v1 vers v2

đź“– Guide de Migration Complet

Si vous utilisez une version antérieure du système, consultez le guide de migration détaillé qui explique :

  • Les nouveautĂ©s de la version 2
  • Les Ă©lĂ©ments dĂ©prĂ©ciĂ©s et leurs remplacements
  • Un guide Ă©tape par Ă©tape pour migrer vos configurations
  • Les outils de migration automatique disponibles

Vue d'ensemble

Ce système de déploiement automatisé permet de gérer des infrastructures cloud complexes avec une configuration déclarative en YAML. Il prend en charge Google Cloud Platform (GCP) et utilise Terraform pour l'orchestration de l'infrastructure.

Fonctionnalités Principales

  • DĂ©ploiement Multi-Service : Applications web, APIs, workers, fonctions cloud
  • Gestion des DonnĂ©es : PostgreSQL, MongoDB, BigQuery, Firebase
  • Messagerie : Pub/Sub topics et subscriptions
  • Stockage : Buckets GCS avec permissions granulaires
  • RĂ©seau : Ingress, DNS, SSL, redirections
  • SĂ©curitĂ© : Gestion des permissions IAM, whitelists IP
  • Monitoring : IntĂ©gration avec Google Cloud Operations

Architecture du Système

Composants Principaux

  1. Configuration Déclarative : Fichiers YAML pour définir l'infrastructure
  2. Modules Terraform : Infrastructure as Code réutilisable
  3. Orchestration Kubernetes : Déploiement et gestion des applications
  4. Gestion des Secrets : Intégration avec Vault pour la sécurité
  5. Monitoring : Logs et métriques centralisés

Tableau Récapitulatif des Configurations

Élément Description Requis
name Nom du projet âś“
codeType Type de code (Web, API, Static, etc.) âś“
replicas Nombre de répliques du déploiement
network Configuration réseau et services
databases Configuration des bases de données
buckets Configuration des buckets de stockage
topics Configuration des topics Pub/Sub
subscriptions Configuration des subscriptions Pub/Sub
cloudFunctions Configuration des fonctions cloud
dialogflow Configuration Dialogflow
bigQuery Configuration BigQuery
firebase Configuration Firebase
workers Configuration des workers
cronJobs Configuration des tâches planifiées
environmentVariables Variables d'environnement
vpa Autoscaling vertical des pods
whitelistRange Plages d'adresses IP autorisées
migration Configuration de migration
readinessProbe Sonde de disponibilité
livenessProbe Sonde de santé
urlRedirects Redirections d'URL (déprécié)
services Configuration des services (déprécié)

Référence Complète des Attributs

name

Description : Nom unique du projet utilisé pour identifier les ressources.

Type : string

Requis : âś“

Cas d'usage :

  • Identifier les ressources dans GCP
  • GĂ©nĂ©rer des noms de ressources uniques
  • Organiser les dĂ©ploiements par projet

Exemple :

name: "ecommerce-platform"

codeType

Description : Type d'application à déployer, détermine le comportement du déploiement.

Type : enum

Requis : âś“

Valeurs possibles :

  • Web : Application web standard avec serveur HTTP
  • Job : Tâche batch ou traitement ponctuel
  • Static : Site statique (HTML, CSS, JS)
  • Spa : Application Single Page (React, Vue, Angular)
  • Infra : Infrastructure pure sans application

Cas d'usage :

  • Web : APIs REST, applications full-stack
  • Job : Scripts de migration, traitement de donnĂ©es
  • Static : Sites vitrine, documentation
  • Spa : Applications React/Vue avec routing cĂ´tĂ© client
  • Infra : DĂ©ploiement de ressources cloud uniquement

Exemple :

codeType: "Web"

replicas

Description : Nombre de répliques (instances) de l'application à déployer.

Type : number

Valeurs : 0-10

Défaut : 1

Cas d'usage :

  • Haute disponibilitĂ© (replicas >= 2)
  • MontĂ©e en charge (replicas > 3)
  • Maintenance sans interruption
  • RĂ©partition de charge

Exemple :

replicas: 3

migration

Description : Configuration pour les migrations de base de données ou d'infrastructure.

Type : object

Éléments :

  • enable (boolean) : Active/dĂ©sactive la migration
  • useAppImg (boolean) : Utilise l'image de l'application pour la migration
  • docker_image (string, optionnel) : Image Docker spĂ©cifique pour la migration
  • command (array, optionnel) : Commandes Ă  exĂ©cuter

Cas d'usage :

  • Migration de schĂ©ma de base de donnĂ©es
  • Initialisation de donnĂ©es
  • Scripts de mise Ă  jour
  • Transformation de donnĂ©es

Exemples :

# Migration avec image d'application
migration:
  enable: true
  useAppImg: true
  command:
    - "npm"
    - "run"
    - "migrate"

# Migration avec image spécifique
migration:
  enable: true
  useAppImg: false
  docker_image: "migration-tools:latest"
  command:
    - "python"
    - "migrate.py"
    - "--env=production"

network

Description : Configuration réseau pour exposer les services et gérer le trafic.

Type : array<Network>

Éléments de Network :

  • name (string, optionnel) : Nom du rĂ©seau
  • isPublic (boolean, optionnel) : AccessibilitĂ© publique
  • host (string, optionnel) : Nom d'hĂ´te FQDN
  • aliases (array<string>, optionnel) : Alias de domaine
  • dns_record_name (string, optionnel) : Nom d'enregistrement DNS
  • dnsRedirections (array<string>, optionnel) : Redirections DNS
  • seo4ajax (object, optionnel) : Configuration SEO4AJAX
  • fromToWWW (boolean, dĂ©faut: true) : Gestion des redirections www
  • services (array<serviceGke>) : Services exposĂ©s
  • urlRedirects (array<Redirect>, optionnel) : Redirections d'URL
  • whitelistRange (array<cidrBlock>, optionnel) : Plages IP autorisĂ©es
  • staticPath (string, optionnel) : Chemin des fichiers statiques
  • spaRootFile (string, optionnel) : Fichier racine SPA
  • staticRewriteTarget (string, optionnel) : Cible de réécriture

Éléments de serviceGke :

  • name (string, requis) : Nom du service
  • realName (string, optionnel) : Nom rĂ©el du service Kubernetes
  • port (number, optionnel) : Port d'exposition
  • path (string, optionnel) : Chemin d'accès

Cas d'usage :

  • Exposition d'applications web publiques
  • APIs internes avec whitelist
  • Applications multi-services
  • Gestion de domaines multiples
  • Redirections SEO

Exemples :

# Application web publique
network:
  - name: "frontend"
    isPublic: true
    host: "www.monapp.com"
    aliases:
      - "monapp.com"
    fromToWWW: true
    services:
      - name: "web"
        port: 80
        path: "/"

# API interne avec whitelist
network:
  - name: "api-internal"
    isPublic: false
    services:
      - name: "api"
        port: 8080
        path: "/api"
    whitelistRange:
      - name: "office"
        cidrs:
          - "192.168.1.0/24"

# SPA avec SEO
network:
  - name: "spa"
    isPublic: true
    host: "app.example.com"
    spaRootFile: "index.html"
    staticPath: "/static"
    seo4ajax:
      path: "/seo4ajax"
      key: "${VAULT_SECRET:seo4ajax/key}"
    services:
      - name: "spa-service"
        port: 80
        path: "/"

databases

Description : Configuration des bases de données PostgreSQL et MongoDB.

Type : object

Éléments :

  • pgs (array<Pg>) : Bases PostgreSQL internes
  • pgsExt (array<Pg>) : Bases PostgreSQL externes
  • mgs (array<Mg>) : Bases MongoDB internes
  • mgsExt (array<Mg>) : Bases MongoDB externes

Éléments de Pg :

  • name (string, requis) : Nom de la base
  • instance (string, optionnel) : Instance Cloud SQL
  • branch (string, optionnel) : Branche de dĂ©ploiement
  • provider (string, optionnel) : Fournisseur cloud
  • privateIP (string, optionnel) : IP privĂ©e
  • project (string, optionnel) : Projet GCP
  • dbname (string, optionnel) : Nom de la base de donnĂ©es
  • vaultRead (string, optionnel) : Chemin Vault pour les secrets
  • restoreFileName (string, optionnel) : Fichier de restauration
  • extensions (array, optionnel) : Extensions PostgreSQL
  • roles (array<DatabaseRole>) : RĂ´les IAM

Éléments de Mg :

  • name (string, requis) : Nom de la base
  • clusterHost (string, optionnel) : HĂ´te du cluster MongoDB
  • branch (string, optionnel) : Branche de dĂ©ploiement
  • privateIP (string, optionnel) : IP privĂ©e
  • dbname (string, optionnel) : Nom de la base de donnĂ©es
  • vaultRead (string, optionnel) : Chemin Vault pour les secrets
  • restoreFileName (string, optionnel) : Fichier de restauration
  • roles (array<DatabaseRole>) : RĂ´les IAM

RĂ´les disponibles :

  • cloudsql.client : Connexion Ă  Cloud SQL
  • cloudsql.editor : Édition des bases Cloud SQL
  • cloudsql.viewer : Lecture seule Cloud SQL
  • mongodbatlas.developer : DĂ©veloppement MongoDB Atlas
  • mongodbatlas.viewer : Lecture seule MongoDB Atlas

Variables générées :

  • PostgreSQL : PG_HOST_<NAME>, PG_PORT_<NAME>, PG_USER_<NAME>, PG_PASS_<NAME>, PG_DBNAME_<NAME>
  • MongoDB : MG_HOST_<NAME>, MG_PORT_<NAME>, MG_USER_<NAME>, MG_PASS_<NAME>, MG_DBNAME_<NAME>

Cas d'usage :

  • Applications avec base de donnĂ©es principale
  • Microservices avec bases dĂ©diĂ©es
  • Connexion Ă  des bases externes
  • Environnements multi-branches

Exemples :

# Base PostgreSQL principale
databases:
  pgs:
    - name: "main"
      dbname: "app_production"
      extensions: ["uuid-ossp", "pgcrypto"]
      roles:
        - "cloudsql.client"
        - "cloudsql.editor"

# Connexion Ă  base externe
databases:
  pgsExt:
    - name: "analytics"
      project: "analytics-project"
      instance: "analytics-instance"
      dbname: "analytics_db"
      roles:
        - "cloudsql.client"

# MongoDB Atlas
databases:
  mgs:
    - name: "documents"
      clusterHost: "cluster0.mongodb.net"
      dbname: "app_documents"
      roles:
        - "mongodbatlas.developer"

buckets

Description : Configuration des buckets de stockage Google Cloud Storage.

Type : object

Éléments :

  • app (array<Bucket>) : Buckets internes Ă  l'application
  • ext (array<Bucket>) : Buckets externes

Éléments de Bucket :

  • name (string, requis) : Nom du bucket
  • roles (array<BucketRole>) : RĂ´les d'accès
  • branch (string, optionnel) : Branche de dĂ©ploiement
  • project (string, optionnel) : Projet GCP
  • provider (string, optionnel) : Fournisseur cloud
  • realName (string, optionnel) : Nom rĂ©el du bucket dans GCP
  • isPublic (boolean, dĂ©faut: false) : AccessibilitĂ© publique
  • restoreFileName (string, optionnel) : Fichier de restauration

RĂ´les disponibles :

  • storage.objectViewer : Lecture seule des objets
  • storage.objectCreator : CrĂ©ation d'objets uniquement
  • storage.objectUser : CRUD complet sur les objets
  • storage.objectAdmin : Administration complète

Variables générées :

  • BCK_NAME_<BUCKET_NAME> : Nom du bucket

Cas d'usage :

  • Stockage de fichiers uploadĂ©s par les utilisateurs
  • Assets statiques (images, CSS, JS)
  • Backups et archives
  • Partage de fichiers entre services

Exemples :

# Buckets d'application
buckets:
  app:
    - name: "uploads"
      isPublic: false
      roles:
        - "storage.objectUser"
    - name: "static-assets"
      isPublic: true
      roles:
        - "storage.objectViewer"

# Bucket externe partagé
buckets:
  ext:
    - name: "shared-storage"
      project: "shared-project"
      realName: "shared-bucket-prod"
      roles:
        - "storage.objectViewer"

topics

Description : Configuration des topics Pub/Sub pour la messagerie asynchrone.

Type : object

Éléments :

  • app (array<Topic>) : Topics internes Ă  l'application
  • ext (array<Topic>) : Topics externes

Éléments de Topic :

  • name (string, requis) : Nom du topic
  • roles (array<TopicRole>) : RĂ´les d'accès
  • branch (string, optionnel) : Branche de dĂ©ploiement
  • project (string, optionnel) : Projet GCP
  • provider (string, optionnel) : Fournisseur cloud
  • realName (string, optionnel) : Nom rĂ©el du topic dans GCP

RĂ´les disponibles :

  • pubsub.publisher : Publication de messages
  • pubsub.subscriber : Abonnement aux messages
  • pubsub.editor : Gestion complète du topic
  • pubsub.viewer : Lecture seule des mĂ©tadonnĂ©es

Variables générées :

  • TCP_ID_<TOPIC_NAME> : ID du topic

Cas d'usage :

  • Communication entre microservices
  • Traitement asynchrone d'Ă©vĂ©nements
  • Notifications push
  • IntĂ©gration avec des systèmes externes

Exemples :

# Topics d'application
topics:
  app:
    - name: "user-events"
      roles:
        - "pubsub.publisher"
    - name: "notifications"
      roles:
        - "pubsub.publisher"
        - "pubsub.subscriber"

# Topic externe
topics:
  ext:
    - name: "external-events"
      project: "external-project"
      realName: "external-topic-prod"
      roles:
        - "pubsub.subscriber"

subscriptions

Description : Configuration des subscriptions Pub/Sub pour recevoir les messages.

Type : object

Éléments :

  • app (array<Subscription>) : Subscriptions internes
  • ext (array<Subscription>) : Subscriptions externes

Éléments de Subscription :

  • name (string, requis) : Nom de la subscription
  • topic (string, requis) : Topic associĂ©
  • labels (object, optionnel) : Étiquettes
  • pushConfig (PushConfig, optionnel) : Configuration push
  • ackDeadLineSeconds (string, optionnel) : DĂ©lai d'acknowledgment
  • messageRetentionDuration (string, optionnel) : DurĂ©e de rĂ©tention
  • retainAckedMessage (boolean, optionnel) : Conserver les messages acquittĂ©s
  • expirationPolicy (ExpirationPolicy, optionnel) : Politique d'expiration
  • filter (string, optionnel) : Filtre de messages
  • deadLetterPolicy (DeadLetterPolicy, optionnel) : Politique de dead letter
  • retryPolicy (RetryPolicy, optionnel) : Politique de retry
  • enableMessageOrdering (boolean, optionnel) : Ordre des messages
  • project (string, optionnel) : Projet GCP
  • roles (array<SubscriptionRole>) : RĂ´les d'accès
  • realName (string, optionnel) : Nom rĂ©el dans GCP
  • branch (string, optionnel) : Branche de dĂ©ploiement

Éléments de PushConfig :

  • pushEndpoint (string, requis) : URL de webhook
  • attributes (object, optionnel) : Attributs personnalisĂ©s
  • oidcToken (OIDCToken, optionnel) : Token d'authentification

Éléments de OIDCToken :

  • serviceAccountEmail (boolean, requis) : Utiliser l'email du service account
  • audience (string, optionnel) : Audience du token

Éléments de DeadLetterPolicy :

  • deadLetterTopic (string, optionnel) : Topic de dead letter
  • maxDeliveryAttempts (string, optionnel) : Nombre max de tentatives

RĂ´les disponibles :

  • pubsub.subscriber : RĂ©ception des messages
  • pubsub.editor : Gestion complète
  • pubsub.viewer : Lecture seule

Variables générées :

  • SUB_ID_<SUBSCRIPTION_NAME> : ID de la subscription

Cas d'usage :

  • Traitement d'Ă©vĂ©nements en temps rĂ©el
  • Webhooks pour intĂ©grations externes
  • Queues de traitement asynchrone
  • Notifications push

Exemples :

# Subscription avec push webhook
subscriptions:
  app:
    - name: "event-processor"
      topic: "user-events"
      ackDeadlineSeconds: "300"
      messageRetentionDuration: "604800s"
      retainAckedMessage: true
      pushConfig:
        pushEndpoint: "https://api.monapp.com/webhook"
        oidcToken:
          serviceAccountEmail: true
      deadLetterPolicy:
        deadLetterTopic: "dead-letters"
        maxDeliveryAttempts: "5"

# Subscription pull simple
subscriptions:
  app:
    - name: "background-processor"
      topic: "background-tasks"
      ackDeadlineSeconds: "600"
      roles:
        - "pubsub.subscriber"

cloudFunctions

Description : Configuration des fonctions cloud serverless.

Type : array<cloudFunction>

Éléments de cloudFunction :

  • name (string, requis) : Nom de la fonction
  • realName (string, optionnel) : Nom rĂ©el dans GCP
  • project (string, optionnel) : Projet GCP
  • runtime (string, requis) : Runtime (nodejs18, python39, etc.)
  • location (string, optionnel) : RĂ©gion de dĂ©ploiement
  • trigger (string, requis) : Type de dĂ©clencheur (http, topic, bigquery)
  • source (string, requis) : Chemin du code source
  • entryPoint (string, requis) : Point d'entrĂ©e de la fonction
  • memory (string, requis) : MĂ©moire allouĂ©e (256MB, 512MB, etc.)
  • cpu (string, requis) : CPU allouĂ© (0.5, 1, 2)
  • trigger_topic (string, optionnel) : Topic dĂ©clencheur (si trigger=topic)
  • ingress_settings (string, optionnel) : Configuration d'ingress
  • description (string, optionnel) : Description de la fonction
  • timeout (string, requis) : Timeout en secondes
  • envVars (array<EnvironmentVariable>) : Variables d'environnement
  • buildEnvVars (array<EnvironmentVariable>) : Variables de build
  • allUsers_invoker (boolean, optionnel) : Invocation publique
  • min_instance_count (number, optionnel) : Instances minimum
  • max_instance_count (number, optionnel) : Instances maximum
  • roles (array<CloudFunctionRole>) : RĂ´les d'accès

RĂ´les disponibles :

  • cloudfunctions.developer : DĂ©veloppement de fonctions
  • cloudfunctions.invoker : Invocation de fonctions
  • cloudfunctions.viewer : Lecture seule

Cas d'usage :

  • APIs serverless
  • Traitement d'Ă©vĂ©nements
  • IntĂ©grations avec des services tiers
  • Transformations de donnĂ©es

Exemples :

# Fonction HTTP publique
cloudFunctions:
  - name: "api-handler"
    runtime: "nodejs18"
    trigger: "http"
    source: "./functions/api"
    entryPoint: "handler"
    memory: "512MB"
    cpu: "1"
    timeout: "300"
    allUsers_invoker: true
    envVars:
      - name: "NODE_ENV"
        value: "production"
    min_instance_count: 1
    max_instance_count: 10

# Fonction déclenchée par Pub/Sub
cloudFunctions:
  - name: "event-processor"
    runtime: "python39"
    trigger: "topic"
    trigger_topic: "user-events"
    source: "./functions/processor"
    entryPoint: "process_event"
    memory: "256MB"
    cpu: "0.5"
    timeout: "120"
    envVars:
      - name: "DATABASE_URL"
        value: "${VAULT_SECRET:database/url}"

dialogflow

Description : Configuration pour l'intégration avec Dialogflow.

Type : dialogflows

Éléments de dialogflows :

  • ext (array<dialogflow>) : Projets Dialogflow externes

Éléments de dialogflow :

  • enable (boolean, requis) : Activation de l'intĂ©gration
  • projects (array<string>, requis) : IDs des projets Dialogflow
  • roles (array<DialogflowRole>) : RĂ´les d'accès

RĂ´les disponibles :

  • dialogflow.admin : Administration complète des APIs Dialogflow
  • dialogflow.reader : Lecture seule des APIs Dialogflow
  • dialogflow.consoleAgentEditor : Édition des agents via la console
  • dialogflow.webhookAdmin : Administration des webhooks
  • dialogflow.client : Client pour interaction avec les APIs (si disponible)

RĂ´les CX Premium (pour Dialogflow CX) :

  • dialogflow.aamAdmin : CX Premium Admin
  • dialogflow.aamViewer : CX Premium Viewer
  • dialogflow.aamConversationalArchitect : CX Premium Conversational Architect
  • dialogflow.aamDialogDesigner : CX Premium Dialog Designer
  • dialogflow.aamLeadDialogDesigner : CX Premium Lead Dialog Designer

⚠️ Attention : Les rôles comme dialogflow.developer ne sont plus supportés au niveau du projet. Référez-vous à la documentation officielle Google Cloud pour les rôles à jour.

Recommandations de rĂ´les :

  • Pour l'administration complète : dialogflow.admin
  • Pour la lecture seule : dialogflow.reader
  • Pour l'Ă©dition d'agents : dialogflow.consoleAgentEditor
  • Pour les webhooks : dialogflow.webhookAdmin

Cas d'usage :

  • Chatbots et assistants virtuels
  • Traitement du langage naturel
  • IntĂ©gration avec des applications de messagerie

Exemple :

dialogflow:
  ext:
    - enable: true
      projects:
        - "chatbot-project"
        - "assistant-project"
      roles:
        - "dialogflow.admin"
        - "dialogflow.reader"

bigQuery

Description : Configuration pour l'intégration avec BigQuery.

Type : bigQueries

Éléments de bigQueries :

  • ext (array<bigQuery>) : Projets BigQuery externes

Éléments de bigQuery :

  • enable (boolean, requis) : Activation de l'intĂ©gration
  • projects (array<string>, requis) : IDs des projets BigQuery
  • roles (array<BigQueryRole>) : RĂ´les d'accès

RĂ´les disponibles :

  • bigquery.dataEditor : Édition des donnĂ©es
  • bigquery.dataViewer : Lecture des donnĂ©es
  • bigquery.jobUser : ExĂ©cution de jobs
  • bigquery.metadataViewer : Lecture des mĂ©tadonnĂ©es
  • bigquery.user : Utilisateur standard

Cas d'usage :

  • Analytics et reporting
  • Data warehousing
  • Machine learning
  • Business intelligence

Exemple :

bigQuery:
  ext:
    - enable: true
      projects:
        - "analytics-project"
        - "data-warehouse"
      roles:
        - "bigquery.dataViewer"
        - "bigquery.jobUser"

firebase

Description : Configuration pour l'intégration avec Firebase.

Type : Firebase

Éléments de Firebase :

  • enable (boolean, requis) : Activation de l'intĂ©gration
  • project (string, requis) : ID du projet Firebase
  • roles (array<FirebaseRole>) : RĂ´les d'accès

RĂ´les disponibles :

  • firebase.analyticsViewer : Lecture des analytics
  • firebase.develop : DĂ©veloppement
  • firebase.quality : QualitĂ© et tests
  • firebase.viewer : Lecture seule
  • firebase.admin : Administration

Cas d'usage :

  • Authentification utilisateur
  • Base de donnĂ©es temps rĂ©el
  • Notifications push
  • Analytics d'application

Exemple :

firebase:
  enable: true
  project: "mon-projet-firebase"
  roles:
    - "firebase.develop"
    - "firebase.admin"

workers

Description : Configuration des workers pour le traitement en arrière-plan.

Type : array<Worker>

Éléments de Worker :

  • enabled (boolean, requis) : Activation du worker
  • name (string, requis) : Nom du worker
  • replicas (number, requis) : Nombre de rĂ©pliques
  • args (array<string>, requis) : Arguments de lancement
  • useApp (boolean, requis) : Utiliser l'image de l'application
  • image (string, requis) : Image Docker (si useApp=false)
  • env (array<EnvironmentVariable>, requis) : Variables d'environnement

Cas d'usage :

  • Traitement de queues
  • Tâches de fond
  • Traitement d'images
  • Envoi d'emails

Exemple :

workers:
  - enabled: true
    name: "email-worker"
    replicas: 2
    args: ["worker", "--queue=email"]
    useApp: true
    image: ""
    env:
      - name: "WORKER_TYPE"
        value: "email"
      - name: "QUEUE_NAME"
        value: "email"

cronJobs

Description : Configuration des tâches planifiées.

Type : array<CronJobs>

Éléments de CronJobs :

  • name (string, requis) : Nom de la tâche
  • enabled (boolean, dĂ©faut: true) : Activation de la tâche
  • schedule (string, requis) : Planning cron
  • image (string, optionnel) : Image Docker spĂ©cifique
  • timezone (string, dĂ©faut: "UTC") : Fuseau horaire
  • useApp (boolean, dĂ©faut: false) : Utiliser l'image de l'application
  • env (array<EnvironmentVariable>, optionnel) : Variables d'environnement
  • commands (array, requis) : Commandes Ă  exĂ©cuter

Cas d'usage :

  • Sauvegardes automatiques
  • Nettoyage de donnĂ©es
  • Rapports pĂ©riodiques
  • Synchronisation de donnĂ©es

Exemples :

cronJobs:
  - name: "daily-backup"
    enabled: true
    schedule: "0 2 * * *"
    timezone: "Europe/Paris"
    useApp: true
    commands: ["backup.sh"]
    env:
      - name: "BACKUP_TYPE"
        value: "daily"

  - name: "weekly-cleanup"
    enabled: true
    schedule: "0 3 * * 0"
    timezone: "UTC"
    image: "cleanup-image:latest"
    commands: ["cleanup", "--type=weekly"]

environmentVariables

Description : Variables d'environnement pour l'application.

Type : array<EnvironmentVariable>

Éléments de EnvironmentVariable :

  • name (string, requis) : Nom de la variable
  • value (string, requis) : Valeur de la variable

Cas d'usage :

  • Configuration d'application
  • Secrets et clĂ©s API
  • URLs de services
  • Paramètres d'environnement

Exemple :

environmentVariables:
  - name: "NODE_ENV"
    value: "production"
  - name: "DATABASE_URL"
    value: "${VAULT_SECRET:database/url}"
  - name: "API_KEY"
    value: "${VAULT_SECRET:api/key:-default_key}"

vpa

Description : Configuration de l'autoscaling vertical des pods.

Type : VerticalPodAutoscaler

Éléments de VerticalPodAutoscaler :

  • enabled (boolean, requis) : Activation du VPA
  • updateMode (VerticalPodAutoscalerMode, requis) : Mode de mise Ă  jour
  • minReplicas (number, requis) : Nombre minimum de rĂ©pliques

Modes disponibles :

  • Auto : Mise Ă  jour automatique
  • Initial : Recommandation initiale uniquement
  • Recreate : RecrĂ©ation des pods pour mise Ă  jour
  • Off : DĂ©sactivĂ©

Cas d'usage :

  • Optimisation automatique des ressources
  • Adaptation aux charges variables
  • RĂ©duction des coĂ»ts

Exemple :

vpa:
  enabled: true
  updateMode: "Auto"
  minReplicas: 1

whitelistRange

Description : Plages d'adresses IP autorisées à accéder aux services.

Type : array<cidrBlock>

Éléments de cidrBlock :

  • name (string, requis) : Nom de la plage
  • cidrs (array<string>, requis) : Plages CIDR

Cas d'usage :

  • SĂ©curisation des APIs internes
  • Accès restreint aux environnements de dĂ©veloppement
  • ConformitĂ© sĂ©curitaire

Exemple :

whitelistRange:
  - name: "office"
    cidrs:
      - "192.168.1.0/24"
      - "10.0.0.0/8"
  - name: "vpn"
    cidrs:
      - "172.16.0.0/12"

readinessProbe

Description : Sonde de disponibilité pour vérifier si l'application est prête.

Type : ContainerDefinition

Éléments :

  • httpGet (object) : Configuration HTTP GET
  • path (string) : Chemin de l'endpoint
  • port (number) : Port de l'endpoint
  • initialDelaySeconds (number) : DĂ©lai initial
  • periodSeconds (number) : PĂ©riode entre les vĂ©rifications

Cas d'usage :

  • Attendre l'initialisation de l'application
  • VĂ©rifier la connectivitĂ© aux dĂ©pendances
  • Éviter le trafic vers des pods non prĂŞts

Exemple :

readinessProbe:
  httpGet:
    path: "/health"
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10

livenessProbe

Description : Sonde de santé pour vérifier si l'application fonctionne.

Type : ContainerDefinition

Éléments : (identiques à readinessProbe)

Cas d'usage :

  • RedĂ©marrer les pods dĂ©faillants
  • DĂ©tecter les blocages d'application
  • Maintenir la santĂ© du service

Exemple :

livenessProbe:
  httpGet:
    path: "/health"
    port: 8080
  initialDelaySeconds: 60
  periodSeconds: 30

urlRedirects (Déprécié)

Description : Redirections d'URL (remplacé par network.urlRedirects).

Type : array<Redirect>

Éléments de Redirect :

  • source (string, requis) : URL source
  • target (string, requis) : URL cible
  • sourceArgs (string, optionnel) : Arguments source
  • targetArgs (string, optionnel) : Arguments cible
  • useRegex (boolean, dĂ©faut: false) : Utiliser regex

Exemple :

urlRedirects:
  - source: "/old-path"
    target: "/new-path"
  - source: "/api/v1/(.*)"
    target: "/api/v2/$1"
    useRegex: true

services (Déprécié)

Description : Configuration des services (remplacé par network).

Type : array<Service>

Éléments de Service :

  • name (string, optionnel) : Nom du service
  • port (number, optionnel) : Port d'exposition
  • isPublic (boolean, optionnel) : AccessibilitĂ© publique
  • host (string, optionnel) : Nom d'hĂ´te
  • aliases (array<string>) : Alias de domaine
  • internalPaths (array) : Chemins internes
  • seo4ajax (Seo4ajax, optionnel) : Configuration SEO
  • hasWWW (boolean, dĂ©faut: true) : Gestion www

Exemple :

services:
  - name: "web"
    port: 80
    isPublic: true
    host: "www.example.com"
    aliases:
      - "example.com"

Guide d'Utilisation

Configuration de Base

1. Définition du Projet

name: "mon-application"
codeType: "Web"
replicas: 3
namespace: "production"

2. Configuration Réseau

network:
  - name: "frontend"
    isPublic: true
    host: "www.monapp.com"
    aliases:
      - "monapp.com"
      - "app.monapp.com"
    services:
      - name: "web"
        port: 80
        path: "/"
      - name: "api"
        port: 8080
        path: "/api"
    urlRedirects:
      - source: "/old-path"
        target: "/new-path"
    fromToWWW: true

3. Variables d'Environnement

environmentVariables:
  - name: "NODE_ENV"
    value: "production"
  - name: "DATABASE_URL"
    value: "${VAULT_SECRET:database/url}"
  - name: "API_KEY"
    value: "${VAULT_SECRET:api/key:-default_key}"

Exemples de Configurations Complètes

Application Web Full-Stack

name: "ecommerce-app"
codeType: "Web"
replicas: 3

network:
  - name: "frontend"
    isPublic: true
    host: "www.boutique.com"
    services:
      - name: "web"
        port: 80
        path: "/"
      - name: "api"
        port: 8080
        path: "/api"

databases:
  pgs:
    - name: "main"
      dbname: "ecommerce"
      extensions: ["uuid-ossp"]

buckets:
  app:
    - name: "product-images"
      isPublic: true
      roles: ["storage.objectViewer"]

topics:
  app:
    - name: "orders"
      roles: ["pubsub.publisher"]

subscriptions:
  app:
    - name: "order-processor"
      topic: "orders"
      ackDeadlineSeconds: 300

environmentVariables:
  - name: "NODE_ENV"
    value: "production"
  - name: "STRIPE_SECRET"
    value: "${VAULT_SECRET:stripe/secret}"

API Microservice

name: "user-service"
codeType: "Web"
replicas: 2

network:
  - name: "api"
    isPublic: false
    services:
      - name: "api"
        port: 8080
        path: "/"

databases:
  pgs:
    - name: "users"
      dbname: "user_db"

topics:
  app:
    - name: "user-events"
      roles: ["pubsub.publisher"]

workers:
  - enabled: true
    name: "email-worker"
    replicas: 1
    args: ["worker", "--queue=email"]
    useApp: true

Déploiement et Gestion

Commandes de Base

# Déploiement initial
terraform init
terraform plan
terraform apply

# Mise Ă  jour
terraform plan
terraform apply

# Nettoyage
terraform destroy

Variables d'Environnement Requises

export VAULT_TOKEN="your-vault-token"
export GITLAB_USER="your-gitlab-user"
export GITLAB_PASSWORD="your-gitlab-password"
export GOOGLE_APPLICATION_CREDENTIALS="path/to/service-account.json"

Bonnes Pratiques

Nommage

  • Utilisez des noms descriptifs et cohĂ©rents
  • Évitez les underscores dans les noms de ressources GCP
  • Respectez les conventions de nommage DNS pour les hosts

Sécurité

  • Stockez tous les secrets dans Vault
  • Configurez des whitelists IP appropriĂ©es
  • Utilisez des rĂ´les IAM granulaires
  • Activez les logs d'audit

Performance

  • Configurez les ressources selon les besoins rĂ©els
  • Utilisez l'autoscaling pour les charges variables
  • Optimisez les timeouts et dĂ©lais
  • Surveillez les mĂ©triques de performance

Maintenance

  • Documentez tous les changements
  • Utilisez des branches pour les modifications
  • Planifiez les maintenances
  • Sauvegardez rĂ©gulièrement les configurations

Dépannage

Erreurs Communes

Erreur de Permission :

Error: Insufficient permissions

Solution : Vérifiez les rôles IAM et les permissions du service account

Erreur de Ressource :

Error: Resource not found

Solution : Vérifiez que toutes les dépendances sont créées

Erreur de Configuration :

Error: Invalid configuration

Solution : Validez la syntaxe YAML et les types de données

Erreur de RĂ´le Dialogflow :

Error 400: Role roles/dialogflow.developer is not supported for this resource., badRequest

Solution : Les rôles spécifiques Dialogflow ne sont plus supportés au niveau du projet. Utilisez plutôt :

  • Remplacez dialogflow.developer par dialogflow.admin ou editor
  • Remplacez dialogflow.viewer par dialogflow.reader ou viewer
  • Configurez les permissions directement au niveau des agents Dialogflow

Exemple de correction :

# ❌ Ancienne configuration (ne fonctionne plus)
dialogflow:
  ext:
    - enable: true
      projects: ["mon-projet"]
      roles:
        - "dialogflow.developer"

# ✅ Nouvelle configuration (recommandée)
dialogflow:
  ext:
    - enable: true
      projects: ["mon-projet"]
      roles:
        - "dialogflow.admin"
        - "dialogflow.client"

Erreur de Quota :

Error: Quota exceeded

Solution : Vérifiez les quotas dans Google Cloud Console et demandez une augmentation si nécessaire

Erreur de Réseau :

Error: Connection timeout

Solution : Vérifiez la connectivité réseau et les règles de firewall

Logs et Monitoring

  • Consultez Google Cloud Console pour les logs
  • Utilisez terraform plan pour prĂ©visualiser les changements
  • Surveillez les mĂ©triques dans Cloud Monitoring
  • Configurez des alertes pour les erreurs critiques

Support et Ressources

Documentation Complémentaire

Contribution

Pour contribuer au projet :

  1. Créez une branche feature
  2. Implémentez vos modifications
  3. Documentez les changements
  4. Soumettez une pull request

Documentation mise Ă  jour - Version 2.0