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
- Configuration Déclarative : Fichiers YAML pour définir l'infrastructure
- Modules Terraform : Infrastructure as Code réutilisable
- Orchestration Kubernetes : Déploiement et gestion des applications
- Gestion des Secrets : Intégration avec Vault pour la sécurité
- 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 HTTPJob
: Tâche batch ou traitement ponctuelStatic
: 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 SQLcloudsql.editor
: Édition des bases Cloud SQLcloudsql.viewer
: Lecture seule Cloud SQLmongodbatlas.developer
: Développement MongoDB Atlasmongodbatlas.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 objetsstorage.objectCreator
: Création d'objets uniquementstorage.objectUser
: CRUD complet sur les objetsstorage.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 messagespubsub.subscriber
: Abonnement aux messagespubsub.editor
: Gestion complète du topicpubsub.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 messagespubsub.editor
: Gestion complètepubsub.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 fonctionscloudfunctions.invoker
: Invocation de fonctionscloudfunctions.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 Dialogflowdialogflow.reader
: Lecture seule des APIs Dialogflowdialogflow.consoleAgentEditor
: Édition des agents via la consoledialogflow.webhookAdmin
: Administration des webhooksdialogflow.client
: Client pour interaction avec les APIs (si disponible)
RĂ´les CX Premium (pour Dialogflow CX) :
dialogflow.aamAdmin
: CX Premium Admindialogflow.aamViewer
: CX Premium Viewerdialogflow.aamConversationalArchitect
: CX Premium Conversational Architectdialogflow.aamDialogDesigner
: CX Premium Dialog Designerdialogflow.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éesbigquery.dataViewer
: Lecture des donnéesbigquery.jobUser
: Exécution de jobsbigquery.metadataViewer
: Lecture des métadonnéesbigquery.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 analyticsfirebase.develop
: Développementfirebase.quality
: Qualité et testsfirebase.viewer
: Lecture seulefirebase.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 automatiqueInitial
: Recommandation initiale uniquementRecreate
: Recréation des pods pour mise à jourOff
: 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
pardialogflow.admin
oueditor
- Remplacez
dialogflow.viewer
pardialogflow.reader
ouviewer
- 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 :
- Créez une branche feature
- Implémentez vos modifications
- Documentez les changements
- Soumettez une pull request
Documentation mise Ă jour - Version 2.0