Les exemples qui omettent
auth utilisent un jeton d’accès à l’API CoreWeave fourni par CWSANDBOX_API_KEY. Pour vous authentifier avec une clé API Forge, suivez la page Premiers pas et transmettez les AuthHeaders obtenus à l’opération.Les exemples d’API HTTP utilisent une clé API Forge définie dans FORGE_API_KEY. Pour utiliser plutôt un jeton d’accès à l’API CoreWeave, définissez CWSANDBOX_API_KEY sur ce jeton et remplacez -H "x-wandb-api-key: $FORGE_API_KEY" par -H "Authorization: Bearer $CWSANDBOX_API_KEY" dans chaque requête. Utilisez les identifiants d’authentification du compte propriétaire du sandbox et de ses instantanés.Fonctionnement
Une sandbox avec FSS monte un système de fichiers temporaire accessible en écriture à l’emplacement de votre choix. L’exécuteur s’appuie sur unEmptyDir pour ce montage, et non sur un montage direct du stockage d’objets. Les opérations d’instantané et de restauration copient une archive tar entre ce système de fichiers local et un bucket de stockage d’objets limité à l’organisation.
Chaque instantané est une ressource FileSystemSnapshot identifiée par un fileSystemSnapshotId attribué par le serveur. Les instantanés se caractérisent par trois propriétés :
- Immuable : la création d’un instantané écrit une seule archive. La restauration d’un instantané ne modifie jamais l’instantané source ; une restauration ultérieure retrouve donc toujours les octets d’origine.
- Limité à l’organisation : vous ne pouvez restaurer que les instantanés créés dans votre propre organisation. Un ID d’instantané provenant d’une autre organisation est considéré comme introuvable.
- Cycle de vie indépendant : les instantanés sont gérés séparément des bacs à sable. La suppression d’une sandbox ne supprime pas ses instantanés, et la suppression d’un instantané n’a aucune incidence sur les bacs à sable déjà lancés à partir de celui-ci.
Démarrer un sandbox avec un montage d’instantané
Un sandbox peut démarrer à partir de l’une de ces deux sources de système de fichiers : un système de fichiers temporaire, neuf et vide, ou la restauration d’un instantané existant.Système de fichiers temporaire vierge
Un système de fichiers temporaire vierge est vide au démarrage et peut faire l’objet d’un instantané par la suite. Utilisez-le pour les flux de travail qui nécessitent un état local accessible en écriture pendant l’exécution.- Python
- API HTTP
Restaurer à partir d’un instantané
Une restauration initialise le système de fichiers à partir d’un instantané existant. Indiquez l’ID de l’instantané dans la source d’instantané du point de montage.- Python
- API HTTP
READY pour pouvoir être restauré. La restauration d’un instantané encore à l’état CREATING échoue. Consultez Statut et échecs des instantanés.
Prendre un instantané
Vous pouvez capturer un instantané de deux façons : à l’arrêt, lorsqu’une sandbox s’éteint, ou en cours d’exécution, depuis une sandbox active.Instantané à l’arrêt
Pour conserver le système de fichiers d’une sandbox lors de son arrêt, arrêtez-la en activant l’instantané à l’arrêt. C’est la méthode à suivre pour suspendre puis reprendre une sandbox : arrêtez-la avec un instantané, puis démarrez ultérieurement une nouvelle sandbox qui le restaure.- Python
- API HTTP
Instantané en cours d’exécution
Un instantané en cours d’exécution capture une sandbox active sans l’arrêter. La sandbox continue ensuite de s’exécuter.- API HTTP
- API HTTP
Par défaut,
snapshot() attend que l’instantané soit READY, puis renvoie son ID.Créer une branche à partir d’un instantané
Un même instantané peut être restauré dans plusieurs sandbox. Comme chaque instantané est immuable, les sandbox restaurées démarrent à partir d’octets identiques, puis divergent au fil de leurs écritures.- Créez un instantané
READY, soit avec un instantané à l’arrêt, soit avec un instantané en cours d’exécution. - Démarrez la sandbox A en définissant
fileSystemSnapshotIdsur cet instantané. - Démarrez la sandbox B avec le même
fileSystemSnapshotId. - Les écritures effectuées dans la sandbox A et dans la sandbox B divergent indépendamment les unes des autres. L’instantané source n’est pas modifié : une restauration ultérieure à partir du même ID retrouve donc l’instantané original, et non les écritures de l’une ou l’autre branche.
Gérer les instantanés
Listez, récupérez et supprimez les instantanés indépendamment des bacs à sable qui les ont créés.- Python
- API HTTP
list_snapshots(), get_snapshot() et delete_snapshot() acceptent également un objet AuthHeaders via le paramètre auth.
Statut des instantanés et échecs
Les instantanés sont créés de manière asynchrone. Une requête d’instantané peut réussir et renvoyer unfileSystemSnapshotId alors que l’archive est encore en cours d’écriture, puis l’instantané peut échouer par la suite. Cela se produit le plus souvent lorsque waitForReady vaut false, ou lorsque le délai d’expiration côté client est atteint alors que l’exécuteur est encore en train d’archiver.
Pour suivre la progression, récupérez l’instantané et consultez deux champs :
status: l’état du cycle de vie. Les valeurs finales sontREADYetFAILED. L’API HTTP renvoie la forme entièrement qualifiée, par exempleFILE_SYSTEM_SNAPSHOT_STATUS_READY.statusReason: renseigné lorsquestatusvautFAILED, pour indiquer la cause de l’échec.
GetFileSystemSnapshot jusqu’à ce que l’instantané atteigne l’état READY avant de le restaurer. Les méthodes snapshot() et get_snapshot() du client Python se chargent de cette interrogation pour vous lorsque vous attendez le résultat.
Le tableau suivant répertorie les causes d’échec courantes et la marche à suivre pour chacune.
Si un exécuteur termine le téléversement de l’archive sans parvenir à enregistrer le résultat, la ligne de l’instantané peut passer à l’état
FAILED alors même qu’un objet existe dans le bucket. Dans ce cas, relancez l’instantané.
En cas d’échec asynchrone, la plateforme émet également un événement sandbox.file_system_snapshot.async_fail, ce qui permet aux systèmes de notification en aval de réagir aux instantanés qui échouent après le retour de l’appel initial.
Limitations
La version 1 de FSS fournit un stockage local temporaire adossé à des instantanés. Il ne s’agit pas d’un système de fichiers partagé, et il ne permet pas de montages actifs accessibles en écriture par plusieurs clients. Pendant leur exécution, les bacs à sable ne peuvent ni lire ni écrire dans les systèmes de fichiers des autres bacs à sable. Ils ne partagent leur état que par la création et la restauration d’instantanés.Exemple avec le SDK
Pour un exemple Python complet et exécutable qui démarre une sandbox, réalise un instantané en cours d’exécution, le duplique, capture un instantané à l’arrêt et gère les instantanés, consultezfile_system_snapshots.py dans le dépôt cwsandbox-client.
Ressources associées
- Utilisez votre propre bucket pour les instantanés du système de fichiers : stockez les instantanés dans un bucket dont vous êtes propriétaire.
- Volumes : volumes temporaires et Volumes enregistrés partagés entre plusieurs bacs à sable.
-
Cycle de vie d’une sandbox : fonctionnement de
stop()et des différents états d’une sandbox. - Client Python : installez le SDK et explorez l’API.