> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Gestion des snapshots

> Dans cette section, vous apprendrez à créer, récupérer et restaurer des snapshots pour vos applications et bases de données à l'aide du SDK Python.

[Client]: client

[Application]: client#application

Les snapshots sont des sauvegardes de votre application ou base de données à un instant précis. Ils vous permettent de restaurer votre application ou base de données à un état antérieur si nécessaire. Square Cloud fournit des snapshots illimités avec des sauvegardes quotidiennes automatiques.

## Créer un snapshot d'application

`client.snapshot` renvoie un objet `Snapshot`.

<Tabs>
  <Tab title="Avec Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshot = await client.snapshot(app_id='application_id')
        
        print(snapshot.url)  # Download URL for the snapshot
        print(snapshot.key)  # Snapshot key identifier
    ```
  </Tab>

  <Tab title="Avec Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshot = await app.snapshot()
        
        print(snapshot.url)  # Download URL for the snapshot
        print(snapshot.key)  # Snapshot key identifier
    ```
  </Tab>
</Tabs>

## Télécharger un snapshot

L'objet `Snapshot` fournit une méthode pour télécharger le snapshot sous forme de fichier zip.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    snapshot = await client.snapshot(app_id='application_id')
    
    # Download snapshot to current directory
    zip_file = await snapshot.download()
    
    # Download snapshot to specific directory
    zip_file = await snapshot.download(path='./backups')
```

## Lister les snapshots d'une application

`client.all_app_snapshots` renvoie une liste d'objets `SnapshotInfo`.

<Tabs>
  <Tab title="Avec Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshots = await client.all_app_snapshots(app_id='application_id')
        
        for snapshot in snapshots:
            print(f"Snapshot ID: {snapshot.id}")
            print(f"  Size: {snapshot.size}")
            print(f"  Created at: {snapshot.created_at}")
    ```
  </Tab>

  <Tab title="Avec Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshots = await app.all_snapshots()
        
        for snapshot in snapshots:
            print(f"Snapshot ID: {snapshot.id}")
            print(f"  Size: {snapshot.size}")
            print(f"  Created at: {snapshot.created_at}")
    ```
  </Tab>
</Tabs>

## Restaurer un snapshot

`client.restore_snapshot` renvoie un objet `Response`. Vous pouvez restaurer des snapshots aussi bien pour les applications que pour les bases de données.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    # Restore an application snapshot
    response = await client.restore_snapshot(
        application_type='app',
        app_id='application_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Snapshot restored: {response.status}")
    
    # Restore a database snapshot
    response = await client.restore_snapshot(
        application_type='database',
        app_id='database_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Database snapshot restored: {response.status}")
```

## Structures de données des snapshots

### Snapshot

L'objet `Snapshot` représente un snapshot créé :

| Propriété | Type  | Description                       |
| --------- | ----- | --------------------------------- |
| `url`     | `str` | URL de téléchargement du snapshot |
| `key`     | `str` | Identifiant unique du snapshot    |

### SnapshotInfo

L'objet `SnapshotInfo` représente les métadonnées d'un snapshot :

| Propriété    | Type  | Description                                   |
| ------------ | ----- | --------------------------------------------- |
| `id`         | `str` | Identifiant unique du snapshot                |
| `size`       | `str` | Taille du snapshot                            |
| `created_at` | `str` | Horodatage de création du snapshot (ISO 8601) |

## Bonnes pratiques

* **Sauvegardes automatiques** : Square Cloud crée automatiquement des snapshots quotidiens pour vos applications et bases de données.
* **Snapshots illimités** : créez autant de snapshots manuels que nécessaire, sans coût supplémentaire.
* **Période de rétention** : les snapshots sont conservés pendant 30 jours.
* **Temps de restauration** : le processus de restauration prend environ 60 secondes afin de garantir la stabilité de toutes les données.
* **Tests** : avant de restaurer un snapshot, envisagez de créer une nouvelle application ou base de données pour tester d'abord le processus de restauration.

## Limites des snapshots

* **Snapshots quotidiens par plan** : chaque plan peut générer `(RAM / 256) * 2` snapshots par jour
  * Exemple : plan Hobby avec 2048 Mo = 16 snapshots quotidiens (480 par mois)
* **Rétention** : tous les snapshots sont conservés pendant les 30 derniers jours
* **Coût** : aucun coût supplémentaire pour les snapshots
