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

# Instantané de sandbox

Un instantané est un état enregistré réutilisable d’une sandbox. Il capture le système de fichiers et l’état mémoire de la sandbox afin que vous puissiez démarrer de nouvelles sandboxes à partir de ce point ultérieurement.

Novita décrit également ce concept comme le fait de valider une sandbox dans un instantané. Utilisez les instantanés lorsque vous souhaitez :

* Préparer les dépendances une seule fois et les réutiliser dans des sandboxes ultérieures.
* Enregistrer un état fiable connu avant d’exécuter des tâches risquées ou coûteuses.
* Démarrer plusieurs sandboxes à partir du même environnement capturé.
* Conserver un état réutilisable une fois que la sandbox d’origine n’est plus nécessaire.

Pour reprendre la même sandbox plus tard, utilisez [Persistance de sandbox](/docs/fr/guides/sandbox-persistence). Pour créer de nouvelles sandboxes à partir d’un point enregistré, utilisez les instantanés.

## Terminologie

* **Sandbox d’origine** : l’instance de sandbox utilisée pour créer l’instantané.
* **Instantané** : l’état enregistré qui peut être utilisé pour créer de nouvelles sandboxes.
* **Nouvelle sandbox** : une sandbox créée à partir de l’instantané.

## Créer un instantané

Vous pouvez utiliser la méthode `createSnapshot` en JavaScript ou la méthode `create_snapshot` en Python pour créer un instantané à partir d’une sandbox en cours d’exécution. La sandbox est mise en pause pendant la création de l’instantané, puis peut continuer à s’exécuter une fois l’opération terminée.

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.create()
  sandbox.commands.run("echo ready > /tmp/status.txt")

  snapshot = sandbox.create_snapshot()
  print(snapshot.snapshot_id)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  await sandbox.commands.run('echo ready > /tmp/status.txt')

  const snapshot = await sandbox.createSnapshot()
  console.log(snapshot.snapshotId)
  ```
</CodeGroup>

Vous pouvez également créer un instantané à partir de l’ID de la sandbox.

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  snapshot = Sandbox.create_snapshot(sandbox_id)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  const snapshot = await Sandbox.createSnapshot(sandboxId)
  ```
</CodeGroup>

Stockez l’ID d’instantané renvoyé. Vous pourrez ensuite l’utiliser comme modèle lors de la création d’une nouvelle sandbox.

## Créer une sandbox à partir d’un instantané

Vous pouvez transmettre l’ID d’instantané à `create` pour démarrer une nouvelle sandbox à partir de l’état capturé.

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  snapshot_id = snapshot.snapshot_id

  new_sandbox = Sandbox.create(template=snapshot_id)
  result = new_sandbox.commands.run("cat /tmp/status.txt")
  print(result.stdout)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  const snapshotId = snapshot.snapshotId

  const newSandbox = await Sandbox.create(snapshotId)
  const result = await newSandbox.commands.run('cat /tmp/status.txt')
  console.log(result.stdout)
  ```
</CodeGroup>

La nouvelle sandbox possède son propre ID de sandbox et son propre cycle de vie. La suppression de la sandbox d’origine ne supprime pas l’instantané.

## Lister les instantanés

Vous pouvez utiliser la méthode `listSnapshots` en JavaScript ou la méthode `list_snapshots` en Python lorsque vous devez trouver des états enregistrés pour une sandbox ou pour votre compte.

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  # List snapshots created from one sandbox.
  paginator = sandbox.list_snapshots(limit=20)

  while paginator.has_next:
      for snapshot in paginator.next_items():
          print(snapshot.snapshot_id)

  # Or list all snapshots.
  paginator = Sandbox.list_snapshots(limit=20)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  // List snapshots created from one sandbox.
  const paginator = sandbox.listSnapshots({ limit: 20 })

  while (paginator.hasNext) {
    const snapshots = await paginator.nextItems()
    for (const snapshot of snapshots) {
      console.log(snapshot.snapshotId)
    }
  }

  // Or list all snapshots.
  const allSnapshots = Sandbox.listSnapshots({ limit: 20 })
  ```
</CodeGroup>

Vous pouvez filtrer par ID de sandbox source lorsque vous listez tous les instantanés.

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  paginator = Sandbox.list_snapshots(sandbox_id=sandbox_id, limit=20)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  const paginator = Sandbox.listSnapshots({ sandboxId, limit: 20 })
  ```
</CodeGroup>

## Supprimer un instantané

Vous pouvez utiliser la méthode `deleteSnapshot` en JavaScript ou la méthode `delete_snapshot` en Python pour supprimer les instantanés dont vous n’avez plus besoin. Il se peut qu’un instantané ne puisse pas être supprimé tant que des sandboxes en cours d’exécution l’utilisent encore comme source ; arrêtez donc ces sandboxes avant de supprimer l’instantané.

<CodeGroup>
  ```python Python icon="python" theme={"system"}
  new_sandbox.kill()
  Sandbox.delete_snapshot(snapshot_id)
  ```

  ```js JavaScript & TypeScript icon="js" theme={"system"}
  await newSandbox.kill()
  await Sandbox.deleteSnapshot(snapshotId)
  ```
</CodeGroup>

## Recommandations relatives aux instantanés

* Créez un instantané une fois les étapes de configuration terminées avec succès.
* Conservez les IDs d’instantané dans votre propre base de données si des tâches doivent les réutiliser ultérieurement.
* Utilisez les métadonnées sur les sandboxes pour suivre l’origine des états enregistrés.
* Supprimez les instantanés inutilisés afin d’éviter de conserver des états enregistrés obsolètes.
* Utilisez plutôt [Persistance de sandbox](/docs/fr/guides/sandbox-persistence) si vous avez seulement besoin de mettre en pause et de reprendre la même sandbox.
