L'abstraction multi-cloud

Déployer des archives sur AWS S3, Azure Blob et Google Cloud Storage nécessite normalement trois SDKs différents, trois patterns d'authentification et trois gestions d'erreur distinctes. Universal Installer V2 unifie ces trois providers derrière une interface Python unique — changer de provider est une modification d'une ligne dans le profil de configuration.

L'abstraction multi-cloud n'est pas juste une commodité : elle permet de basculer d'un provider à l'autre en cas de panne ou de changement de contrat sans modifier le pipeline de déploiement.

Profils cloud chiffrés

Les credentials cloud sont stockés dans un fichier de profil chiffré AES-256-GCM (.uiprofile). Jamais de clé AWS/Azure/GCS en clair dans les scripts :

from universal_installer.cloud import CloudProfile

# Créer un profil AWS S3
profile = CloudProfile.create(
    name="prod-s3",
    provider="s3",
    credentials={
        "access_key_id":     "AKIA...",
        "secret_access_key": "...",
        "region":            "eu-west-3",
        "bucket":           "mon-bucket-releases",
    }
)
profile.save("profiles/prod-s3.uiprofile")
# → chiffré AES-256-GCM avec clé dérivée du fingerprint machine

# Charger un profil
profile = CloudProfile.load("profiles/prod-s3.uiprofile")
# Changer de provider = changer de fichier profil

AWS S3 et compatibles

from universal_installer.cloud import CloudDeployer

deployer = CloudDeployer(profile)

# Upload simple
result = deployer.upload(
    local_path="dist/app_v1.1.uxc",
    remote_path="releases/app_v1.1.uxc",
    storage_class="STANDARD_IA",   # Standard, IA, Glacier...
    public=False
)
print(result.url)  # https://mon-bucket.s3.eu-west-3.amazonaws.com/releases/app_v1.1.uxc

# Compatible MinIO, Wasabi, Backblaze B2 (endpoint custom)
profile_minio = CloudProfile.create(
    provider="s3",
    credentials={
        "endpoint_url": "http://minio.intranet:9000",
        "access_key_id": "minioadmin",
        /* ... */
    }
)

Azure Blob Storage

profile_azure = CloudProfile.create(
    name="prod-azure",
    provider="azure",
    credentials={
        "connection_string": "DefaultEndpointsProtocol=https;...",
        "container":         "releases",
    }
)
# Même API CloudDeployer — provider transparent
deployer_azure = CloudDeployer(profile_azure)
result = deployer_azure.upload("dist/app_v1.1.uxc", "releases/app_v1.1.uxc")

Google Cloud Storage

profile_gcs = CloudProfile.create(
    provider="gcs",
    credentials={
        "service_account_json": "path/to/sa.json",
        "bucket": "mon-bucket-gcs",
    }
)

Upload atomique et retry exponentiel

Chaque upload est atomique : compression locale → fichier temp → upload avec 3 tentatives (retry exponentiel). En cas d'échec définitif, le fichier temp est supprimé et aucun objet partiel n'existe dans le bucket :

result = deployer.upload(
    local_path="dist/app_v1.1.uxc",
    remote_path="releases/app_v1.1.uxc",
    retry_max=3,
    retry_backoff=2.0,   # 1s, 2s, 4s entre les tentatives
    checksum_verify=True  # SHA-256 vérifié côté serveur
)
print(result.attempts)  # 1 si succès du premier coup

Presigned URLs

Les presigned URLs permettent de partager un fichier temporairement sans exposer les credentials :

# Générer un lien de téléchargement valide 24h
url = deployer.get_presigned_url(
    remote_path="releases/app_v1.1.uxc",
    expires_in=86400  # 24h en secondes
)
# Envoyer cette URL au client par email — expire automatiquement

Rollback automatique

# Déployer avec rollback automatique en cas d'échec
result = deployer.deploy_with_rollback(
    archive="dist/app_v1.1.uxc",
    remote_path="releases/latest/app.uxc",
    previous_remote_path="releases/archive/app_v1.0.uxc",
    health_check_url="https://mon-app.com/health",
    health_check_timeout=30
)
# Si health_check échoue → restore automatique de v1.0

Conclusion

L'abstraction multi-cloud d'Universal Installer V2 réduit le coût de migration entre providers à zéro ligne de code métier modifiée. Les profils chiffrés, l'upload atomique avec retry et les presigned URLs couvrent tous les cas d'usage d'un pipeline de déploiement professionnel.

📦
PRODUIT LIÉ
Universal Installer V2.0
← Article précédent Article suivant →