Importations avec reprise

Accéder aux exemples

Cette page traite des importations avec reprise dans Cloud Storage. Il s'agit de la méthode recommandée pour importer des fichiers volumineux. En effet, si une défaillance du réseau se produit en cours d'importation, vous n'aurez pas à reprendre celle-ci depuis le début.

Introduction

Une importation avec reprise vous permet de reprendre des opérations de transfert de données vers Cloud Storage après un échec de communication ayant interrompu le flux de données. Les importations avec reprise nécessitent l'envoi de plusieurs requêtes, chacune contenant une partie de l'objet que vous importez. Ceci est différent d'une importation simple, qui rassemble toutes les données de l'objet dans une seule requête, et doit redémarrer depuis le début si le processus échoue.

  • Utilisez une importation avec reprise si vous importez des fichiers volumineux ou si vous importez des données sur une connexion à faible débit. Pour connaître les limites de taille des fichiers permettant d'utiliser des importations avec reprise, consultez la section Éléments à prendre en compte sur la taille d'importation.

  • Une importation avec reprise terminée est considérée comme une opération de classe A.

Utilisation des importations avec reprise par les outils et les API

Selon votre manière d'interagir avec Cloud Storage, les importations avec reprise peuvent être gérées automatiquement en votre nom. Cliquez sur un onglet du tableau ci-dessous pour en savoir plus :

Console

Cloud Console gère automatiquement les importations avec reprise en votre nom. Cependant, si vous actualisez ou quittez Cloud Console alors qu'une importation est en cours, celle-ci est annulée.

gsutil

L'outil de ligne de commande gsutil vous permet de définir une taille minimale pour effectuer des importations avec reprise avec le paramètre resumable_threshold du fichier de configuration boto. La valeur par défaut de resumable_threshold est de 8 Mio.

Bibliothèques clientes

C++

Vous pouvez activer/désactiver l'utilisation des importations avec reprise dans le cadre de la méthode WriteObject.

C#

Pour lancer une importation avec reprise, utilisez CreateObjectUploader.

Go

Pour contrôler la taille minimale d'importation, utilisez Writer.ChunkSize. Go exécute toujours des importations avec reprise fragmentées.

Java

Les importations avec reprise sont contrôlées par le biais de la méthode writer.

Node.js

Les importations avec reprise sont automatiquement gérées lorsque vous utilisez la méthode createWriteStream.

PHP

Les importations avec reprise sont automatiquement gérées en votre nom, mais vous pouvez les contrôler directement avec l'option resumable.

Python

Les importations avec reprise se produisent automatiquement lorsque la taille du fichier dépasse 8 Mio. Vous pouvez également utiliser Resumable Media pour gérer vous-même les importations avec reprise.

Ruby

Toutes les importations sont traitées comme des importations avec reprise.

API REST

API JSON

L'API JSON Cloud Storage utilise une requête POST Object, qui inclut le paramètre de requête uploadType=resumable pour lancer l'importation avec reprise. Cette requête renvoie sous la forme d'URI de session que vous utilisez ensuite dans une ou plusieurs requêtes PUT Object pour importer les données d'objet. Pour suivre un guide par étapes sur la création de votre propre logique d'importation avec reprise, consultez la page Effectuer des importations avec reprise.

API XML

L'API JSON Cloud Storage utilise une requête POST Object, qui inclut le paramètre de requête uploadType=resumable pour lancer l'importation avec reprise. Cette requête renvoie sous la forme d'URI de session que vous utilisez ensuite dans une ou plusieurs requêtes PUT Object pour importer les données d'objet. Pour suivre un guide par étapes sur la création de votre propre logique d'importation avec reprise, consultez la page Effectuer des importations avec reprise.

Importations avec reprise de taille inconnue

Le système d'importation avec reprise accepte les transferts de fichiers dont la taille n'est pas connue à l'avance. Par exemple, cela peut être utile pour compresser un objet à la volée pendant l'importation, car il est difficile de prédire la taille exacte du fichier compressé au début du transfert. Le système peut également s'avérer utile si vous souhaitez diffuser un transfert qui peut être réactivé après avoir été interrompu ou si l'encodage de transfert fragmenté ne fonctionne pas pour votre application.

Pour en savoir plus, consultez la page Transferts en flux continu.

Remarques

Cette section est utile si vous créez votre propre client qui envoie des requêtes d'importation avec reprise directement à l'API JSON ou XML.

URI de session

Lorsque vous lancez une importation avec reprise, Cloud Storage renvoie un URI de session, que vous utilisez dans les requêtes suivantes pour importer les données réelles. Voici un exemple d'URI de session dans l'API JSON :

https://storage.googleapis.com/upload/storage/v1/b/my-bucket/o?uploadType=resumable&name=my-file.jpg&upload_id=ABg5-UxlRQU75tqTINorGYDgM69mX06CzKO1NRFIMOiuTsu_mVsl3E-3uSVz65l65GYuyBuTPWWICWkinL1FWcbvvOA

Voici un exemple d'URI de session dans l'API XML :

 https://storage.googleapis.com/my-bucket/my-file.jpg?upload_id=ABg5-UxlRQU75tqTINorGYDgM69mX06CzKO1NRFIMOiuTsu_mVsl3E-3uSVz65l65GYuyBuTPWWICWkinL1FWcbvvOA

Cet URI de session sert de jeton d'authentification. Par conséquent, les requêtes qui l'utilisent n'ont pas besoin d'être signées et peuvent être utilisées par n'importe quel utilisateur pour importer des données dans le bucket cible sans aucune autre authentification. De ce fait, soyez prudent lorsque vous partagez l'URI de session et ne le partagez que via HTTPS.

Un URI de session est valable une semaine. Si vous envoyez une requête avec un URI de session arrivé à expiration, vous recevez un code d'état 404 Not Found. Dans ce cas, vous devez lancer une nouvelle importation avec reprise, obtenir un nouvel URI de session et reprendre l'importation depuis le début à l'aide du nouvel URI de session.

Performances des importations

Les importations avec reprise sont épinglées dans la région où vous les lancez. Par exemple, si vous lancez une importation avec reprise aux États-Unis et que vous transmettez l'URI de session à un client en Asie, l'importation transitera toujours par les États-Unis. La poursuite d'une importation avec reprise dans une région différente de celle de son lancement initial peut entraîner des ralentissements.

Si vous utilisez une instance Compute Engine pour lancer une importation avec reprise, l'instance doit se trouver au même emplacement que le bucket Cloud Storage vers lequel vous effectuez l'importation. Vous pouvez ensuite faire appel à un service de géolocalisation IP pour sélectionner la région Compute Engine vers laquelle vous redirigez les requêtes des clients, ce qui vous aidera à garder le trafic localisé dans une région géographique.

Consignes pour les nouvelles tentatives

  • Vous devez relancer les requêtes qui renvoient les codes d'état suivants :

    • 408 Request Timeout
    • 429 Too Many Requests
    • 500 Internal Server Error
    • 502 Bad Gateway
    • 503 Service Unavailable
    • 504 Gateway Timeout
  • Aucun autre code 4XX n'est considéré comme récupérable. Traitez ces erreurs, y compris 404 Not Found, en lançant une nouvelle importation avec reprise.

  • Lorsque vous relancez des requêtes, utilisez un intervalle exponentiel tronqué entre les tentatives.

Vérifications de l'intégrité

Nous vous recommandons de demander une vérification de l'intégrité de l'objet final importé, afin de vous assurer qu'il correspond au fichier source. Pour ce faire, calculez le condensé MD5 du fichier source, puis ajoutez-le à l'en-tête de requête Content-MD5.

La vérification de l'intégrité du fichier importé est particulièrement importante si vous importez un fichier volumineux sur une longue période, car il est plus probable que le fichier source soit modifié au cours de l'importation.

Étapes suivantes