IBM Cloud Docs
Archivage et accès aux données les moins sollicitées

Archivage et accès aux données les moins sollicitées

IBM Cloud® Object Storage "Archive" et "Archive accélérée" sont des options peu coûteuses pour les données rarement consultées. Vous pouvez stocker des données en passant de n'importe quel niveau de stockage (Standard, Coffre, Coffre froid et Flex) à des archives hors ligne à long terme ou vous pouvez utiliser l'option de stockage en ligne Coffre froid. Avec la nouvelle fonction "Archive accélérée", vous pouvez accéder rapidement aux données dormantes avec une restauration en moins de deux heures.

Cette fonction n'est actuellement pas prise en charge dans Object Storage pour Satellite. En savoir plus.

Les niveaux d'archivage et d'archivage accéléré ont une durée de stockage minimale de 90 jours. Les objets supprimés avant cette date continueront à faire l'objet de frais de stockage pour la durée totale de 90 jours.

Archive et Accelerated Archive ont tous deux une taille minimale d'objet pour la facturation de 128KBs. Les objets plus petits peuvent toujours être archivés, mais ils seront facturés au tarif de 128KB.

Les objets écrits en chambre forte ou en chambre froide seront facturés pour la durée minimale de stockage dans ces niveaux, même si l'objet est archivé avant la durée minimale.

Vous pouvez archiver des objets à l'aide de la console Web, de l'API REST et des outils tiers qui sont intégrés à IBM Cloud Object Storage.

Pour plus d'informations sur les noeuds finaux, voir Noeuds finaux et emplacements de stockage.

Ajout ou gestion d'une règle d'archivage sur un compartiment

Lorsque vous créez ou modifiez une règle d'archivage pour un compartiment, tenez compte des points suivants :

  • Une règle d'archivage peut être ajoutée à tout moment à un compartiment nouveau ou existant.
  • Une règle d'archivage existante peut être modifiée ou désactivée.
  • Une règle d'archivage récemment ajoutée ou modifiée s'applique aux nouveaux objets envoyés par téléchargement et n'affecte pas les objets existants.

Créez un compartiment dans la console après vous être connecté et vous pouvez configurer votre stratégie d'archivage à l'aide des zones de la figure 1.

Créer une politique d'archivage
Créer une politique d'archivage

Pour archiver immédiatement les nouveaux objets envoyés par téléchargement dans un compartiment, entrez 0 jours dans la règle d'archivage.

La fonction d'archivage n'est disponible que dans certaines régions. Pour plus d'informations, voir Services intégrés.

Restauration d'un objet archivé

Pour pouvoir accéder à un objet archivé, vous devez le restaurer vers le niveau de stockage d'origine. Lorsque vous restaurez un objet, vous pouvez indiquer le nombre de jours pendant lequel l'objet doit être disponible. A la fin de la période ainsi spécifiée, la copie restaurée est supprimée.

Le processus de restauration pour "Accelerated Archive" prend jusqu'à 2 heures, tandis que le processus de restauration pour "Archive" prend jusqu'à 12 heures.

Les sous-états d'objet archivé sont les suivants :

  • Archivé : Un objet à l'état Archivé est passé de son niveau de stockage en ligne (Standard, Coffre, Coffre froid et Flex) au niveau d'archivage hors ligne sur la base de la règle d'archivage définie sur le compartiment.
  • En cours de restauration : Un objet à l'état En cours de restauration est en train de générer une copie à partir de l'état Archivé vers son niveau de stockage en ligne d'origine.
  • Restauré : Un objet de l'état Restauré est une copie de l'objet archivé qui a été restauré vers son niveau de stockage en ligne d'origine pour une durée déterminée. A la fin de la période ainsi spécifiée, la copie de l'objet est supprimée et l'objet archivé est conservé.

Restauration d'un objet à l'aide de l'interface de ligne de commande AWS

Les exemples suivants utilisent des variables d'environnement pour plus de clarté. Ces valeurs doivent être définies sur les valeurs souhaitées, par exemple, $ENDPOINT doit être défini sur https://s3.us.cloud-object-storage.appdomain.cloud, https://s3.eu-de.private.cloud-object-storage.appdomain.cloud ou toute autre valeur requise.

  1. Vérifiez le statut de l'objet: aws --endpoint-url $ENDPOINT s3api head-object --bucket $BUCKET --key $KEY La classe de stockage s'affiche sous la forme ("StorageClass": "GLACIER")
  2. Restaurez l'objet: aws --endpoint-url $ENDPOINT s3api restore-object ---bucket $BUCKET --key $KEY --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Bulk"}}'
  3. Vérifiez le statut : aws --endpoint-url $ENDPOINT s3api head-object --bucket $BUCKET --key $KEY

Limitations

Les règles d'archivage sont implémentée à l'aide d'un sous-ensemble de l'opération d'API S3 PUT Bucket Lifecycle Configuration.

Les fonctionnalités prises en charge sont notamment les suivantes :

  • Spécification d'une date ou d'un nombre de jours situés dans le futur indiquant le moment où les objets passeront à l'état Archivé
  • Définition de règles d'expiration pour les objets

Les règles spécifiant une date dans le passé peuvent prendre jusqu'à quelques jours.

Les fonctionnalités non prises en charge sont notamment les suivantes :

  • Plusieurs règles de transition par compartiment
  • Filtrage des objets à archiver à l'aide d'un préfixe ou d'une clé d'objet
  • Hiérarchisation entre les classes de stockage

Les utilisateurs de l'infrastructure classique (non IAM) ne peuvent pas définir la classe de stockage de transition sur ACCELERATED.

Utilisation de l'API REST et de SDK

Création d'une configuration de cycle de vie de compartiment

Cette implémentation de l'opération PUT utilise le paramètre de requête lifecycle pour définir les paramètres de cycle de vie du compartiment. Cette opération permet de créer une définition de règle de cycle de vie unique pour un compartiment donné. La règle est définie comme une règle composée des paramètres suivants : ID, Status et Transition.

L'action de transition permet de faire passer les objets qui seront écrits dans le compartiment à un état Archivé après une période définie. Les modifications apportées à la règle de cycle de vie d'un compartiment sont appliquées uniquement aux nouveaux objets qui sont écrits dans ce compartiment.

Les utilisateurs Cloud IAM doivent disposer au minimum du rôle Writer afin de pouvoir ajouter une règle de cycle de vie au compartiment.

Les utilisateurs d'infrastructure classique doivent disposer des droits d'accès Propriétaire et être en mesure de créer des compartiments dans le compte de stockage afin de pouvoir ajouter une règle de cycle de vie au compartiment.

Cette opération n'utilise pas d'autres paramètres de requête propres aux opérations.

En-tête Type Description
Content-MD5 chaîne Obligatoire : Hachage MD5 128 bits codé en base 64 du contenu, utilisé comme contrôle d'intégrité pour s'assurer que le contenu n'a pas été modifié alors qu'il était en transit.

Le corps de la demande doit contenir un bloc XML avec le schéma suivant :

Elément Type Enfants Ancêtre Contrainte
LifecycleConfiguration Conteneur Rule Aucun Limite 1.
Rule Conteneur ID, Status, Filter, Transition LifecycleConfiguration Limite 1.
ID Chaîne Aucun Rule Doit se composer de (a-z,A-Z, 0-9) et des symboles suivants: ! _ . * ' ( ) -
Filter Chaîne Prefix Rule Doit contenir un élément Prefix.
Prefix Chaîne Aucun Filter Doit être réglé sur <Prefix/>.
Transition Container Days, StorageClass Rule Règle de transition de limite 1 et un maximum de 1000 règles au total.
Days Entier non négatif Aucun Transition Doit être une valeur supérieure ou égale à 0.
Date Date Aucun Transistion Doit être au format ISO 8601 et la date doit être située dans le futur.
StorageClass Chaîne Aucun Transition GLACIER ou ACCELERATED

Syntaxe

PUT https://{endpoint}/{bucket}?lifecycle # path style
PUT https://{bucket}.{endpoint}?lifecycle # virtual host style
<LifecycleConfiguration>
	<Rule>
		<ID>{string}</ID>
		<Status>Enabled</Status>
		<Filter>
			<Prefix/>
		</Filter>
		<Transition>
			<Days>{integer}</Days>
			<StorageClass>{StorageClass}</StorageClass>
		</Transition>
	</Rule>
</LifecycleConfiguration>

Exemples

Exemple de requête

PUT /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
Content-Length: 305
<LifecycleConfiguration>
    <Rule>
        <ID>my-archive-policy</ID>
        <Filter>
			<Prefix/>
		</Filter>
        <Status>Enabled</Status>
        <Transition>
            <Days>20</Days>
            <StorageClass>ACCELERATED</StorageClass>
        </Transition>
    </Rule>
</LifecycleConfiguration>

Exemple de réponse

HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 17:51:00 GMT
Connection: close
var params = {
  Bucket: 'STRING_VALUE', /* required */
  LifecycleConfiguration: {
    Rules: [ /* required */
      {
        Status: 'Enabled', /* required */
        ID: 'STRING_VALUE',
        Filter: '', /* required */
        Prefix: '',
        Transitions: [
          {
            Date: DATE, /* required if Days not specified */
            Days: 0, /* required if Date not specified */
            StorageClass: 'STRING_VALUE' /* required */
          },
        ]
      },
    ]
  }
};

s3.putBucketLifecycleConfiguration(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
response = client.put_bucket_lifecycle_configuration(
    Bucket='string',
    LifecycleConfiguration={
        'Rules': [
            {
                'ID': 'string',
                'Status': 'Enabled',
                'Filter': '',
                'Prefix': '',
                'Transitions': [
                    {
                        'Date': datetime(2015, 1, 1),
                        'Days': 123,
                        'StorageClass': 'GLACIER'
                    },
                ]
            },
        ]
    }
)
public SetBucketLifecycleConfigurationRequest(String bucketName,
                                              BucketLifecycleConfiguration lifecycleConfiguration)

Récapitulatif des méthodes

Méthode Description
getBucketName() Extrait le nom du compartiment dont la configuration de cycle de vie est en cours de définition.
getLifecycleConfiguration() Extrait la nouvelle configuration de cycle de vie pour le compartiment spécifié.
setBucketName(String bucketName) Définit le nom du compartiment dont la configuration de cycle de vie est en cours de définition.
withBucketName(String bucketName) Définit le nom du compartiment dont la configuration de cycle de vie est en cours de définition et renvoie cet objet de sorte que d'autres appels de méthode puissent être enchaînés.

Extraction d'une configuration de cycle de vie de compartiment

Cette implémentation de l'opération GET utilise le paramètre de requête lifecycle pour extraire les paramètres de cycle de vie du compartiment.

Les utilisateurs Cloud IAM doivent disposer au minimum du rôle Reader afin de pouvoir extraire une règle de cycle de vie pour un compartiment.

Les utilisateurs d'infrastructure classique doivent disposer au minimum des droits d'accès Read sur le compartiment afin de pouvoir extraire une règle de cycle de vie pour un compartiment.

Cette opération n'utilise pas d'autres en-têtes, paramètres de requête ou contenu propres aux opérations.

Syntaxe

GET https://{endpoint}/{bucket}?lifecycle # path style
GET https://{bucket}.{endpoint}?lifecycle # virtual host style

Exemples

Exemple de requête

GET /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string

Exemple de réponse

HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 17:51:00 GMT
Connection: close
<LifecycleConfiguration>
    <Rule>
        <ID>my-archive-policy</ID>
        <Filter />
        <Status>Enabled</Status>
        <Transition>
            <Days>20</Days>
            <StorageClass>GLACIER</StorageClass>
        </Transition>
    </Rule>
</LifecycleConfiguration>
var params = {
  Bucket: 'STRING_VALUE' /* required */
};
s3.getBucketLifecycleConfiguration(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
response = client.get_bucket_lifecycle_configuration(Bucket='string')
public GetBucketLifecycleConfigurationRequest(String bucketName)

Suppression d'une configuration de cycle de vie de compartiment

Cette implémentation de l'opération DELETE utilise le paramètre de requête lifecycle pour retirer les paramètres de cycle de vie du compartiment. Les transitions définies par les règles ne seront plus effectuées pour les nouveaux objets.

Remarque : les règles de transition existantes seront conservées pour les objets qui avaient déjà été écrits dans le compartiment avant la suppression des règles.

Les utilisateurs Cloud IAM doivent disposer au minimum du rôle Writer afin de pouvoir retirer une règle de cycle de vie d'un compartiment.

Les utilisateurs d'infrastructure classique doivent disposer des droits d'accès Owner sur le compartiment afin de pouvoir retirer une règle de cycle de vie d'un compartiment.

Cette opération n'utilise pas d'autres en-têtes, paramètres de requête ou contenu propres aux opérations.

Syntaxe

DELETE https://{endpoint}/{bucket}?lifecycle # path style
DELETE https://{bucket}.{endpoint}?lifecycle # virtual host style

Exemples

Exemple de requête

DELETE /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 18:50:00 GMT
Authorization: authorization string

Exemple de réponse

HTTP/1.1 204 No Content
Date: Wed, 7 Feb 2018 18:51:00 GMT
Connection: close
var params = {
  Bucket: 'STRING_VALUE' /* required */
};
s3.deleteBucketLifecycle(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});
response = client.delete_bucket_lifecycle(Bucket='string')
public DeleteBucketLifecycleConfigurationRequest(String bucketName)

Restauration temporaire d'un objet archivé

Cette implémentation de l'opération POST utilise le paramètre de requête restore pour demander la restauration temporaire d'un objet archivé. L'utilisateur doit commencer par restaurer un objet archivé avant de le recevoir par téléchargement ou de le modifier. Lorsqu'il restaure un objet, l'utilisateur doit spécifier une période au terme de laquelle la copie temporaire de cet objet sera supprimée. L'objet conserve la classe de stockage du compartiment.

Un délai maximal de 12 heures peut s'écouler avant que la copie restaurée ne soit accessible. Une demande HEAD peut être utilisée pour vérifier si la copie restaurée est disponible.

Pour pouvoir restaurer définitivement l'objet, l'utilisateur doit copier l'objet restauré dans un compartiment qui ne possède pas de configuration de cycle de vie active.

Les utilisateurs Cloud IAM doivent disposer au minimum du rôle Writer afin de pouvoir restaurer un objet.

Les utilisateurs d'infrastructure classique doivent disposer au minimum des droits d'accès Write sur le compartiment et des droits d'accès Read sur l'objet afin de pouvoir restaurer celui-ci.

Cette opération n'utilise pas d'autres paramètres de requête propres aux opérations.

En-tête Type Description
Content-MD5 chaîne Obligatoire : Hachage MD5 128 bits codé en base 64 du contenu, utilisé comme contrôle d'intégrité pour s'assurer que le contenu n'a pas été modifié alors qu'il était en transit.

Le corps de la demande doit contenir un bloc XML avec le schéma suivant :

Elément Type Enfants Ancêtre Contrainte
RestoreRequest Conteneur Days, GlacierJobParameters Aucun Aucun
Days Entier Aucun RestoreRequest Spécifie la durée de vie de l'objet temporairement restauré. Le nombre minimal de jours pendant lesquels une copie restaurée de l'objet peut exister est 1. Une fois la période de restauration écoulée, la copie temporaire de l'objet est supprimée.
GlacierJobParameters Chaîne Tier RestoreRequest Aucun
Tier Chaîne Aucun GlacierJobParameters Facultatif. Si cette zone n'est pas renseignée, la valeur associée au niveau de stockage de la règle qui était en vigueur lors de l'écriture de l'objet est utilisée par défaut. Si cette valeur n'est pas laissée vide, elle doit être définie sur Bulk si la classe de stockage de transition pour la règle de cycle de vie du compartiment a été définie sur GLACIER, et doit être définie sur Accelerated si la classe de stockage de transition a été définie sur ACCELERATED.

Une réponse réussie renvoie une valeur 202 si l'objet est à l'état Archivé et une valeur 200 si l'objet est déjà à l'état Restauré. Si l'objet est déjà à l'état Restauré et qu'une nouvelle demande de restauration de l'objet est reçue, l'élément Days met à jour le délai d'expiration de l'objet restauré.

Syntaxe

POST https://{endpoint}/{bucket}/{object}?restore # path style
POST https://{bucket}.{endpoint}/{object}?restore # virtual host style
<RestoreRequest>
	<Days>{integer}</Days>
	<GlacierJobParameters>
		<Tier>Bulk</Tier>
	</GlacierJobParameters>
</RestoreRequest>

Exemples

Exemple de requête

POST /images/backup?restore HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 19:50:00 GMT
Authorization: {authorization string}
Content-Type: text/plain
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
Content-Length: 305
<RestoreRequest>
	<Days>3</Days>
	<GlacierJobParameters>
		<Tier>Bulk</Tier>
	</GlacierJobParameters>
</RestoreRequest>

Exemple de réponse

HTTP/1.1 202 Accepted
Date: Wed, 7 Feb 2018 19:51:00 GMT
Connection: close
var params = {
  Bucket: 'STRING_VALUE', /* required */
  Key: 'STRING_VALUE', /* required */
  ContentMD5: 'STRING_VALUE', /* required */
  RestoreRequest: {
   Days: 1, /* days until copy expires */
   GlacierJobParameters: {
     Tier: 'STRING_VALUE' /* required */
   },
  }
 };
 s3.restoreObject(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
});
response = client.restore_object(
    Bucket='string',
    Key='string',
    RestoreRequest={
        'Days': 123,
        'GlacierJobParameters': {
            'Tier': 'string'
        },
    }
)
public RestoreObjectRequest(String bucketName,
                            String key,
                            int expirationInDays)

Récapitulatif des méthodes

Méthode Description
clone() Crée un clone superficiel de cet objet pour toutes les zones à l'exception du contexte de gestionnaire.
getBucketName() Renvoie le nom du compartiment contenant la référence à l'objet qui doit être restauré.
getExpirationInDays() Renvoie la durée, exprimée en nombre de jours, entre la création d'un objet et son expiration.
setExpirationInDays(int expirationInDays) Définit la durée, exprimée en nombre de jours, entre l'envoi par téléchargement d'un objet dans le compartiment et son expiration.

Obtention des en-têtes d'un objet

Une demande HEAD avec un chemin d'accès à un objet permet d'extraire les en-têtes de cet objet. Cette opération n'utilise pas de paramètres de requête ou d'éléments de contenu propres aux opérations.

Syntaxe

HEAD https://{endpoint}/{bucket-name}/{object-name} # path style
HEAD https://{bucket-name}.{endpoint}/{object-name} # virtual host style

En-têtes de réponse pour les objets archivés

En-tête Type Description
x-amz-restore chaîne Inclus si l'objet a été restauré ou si une restauration est en cours. Si l'objet a été restauré, la date d'expiration de la copie temporaire est également renvoyée.
x-amz-storage-class chaîne Renvoie GLACIER ou ACCELERATED s'il est archivé ou temporairement restauré.
x-ibm-archive-transition-time date Renvoie la date et l'heure planifiées pour la transition de l'objet vers le niveau d'archivage.
x-ibm-transition chaîne Inclus si l'objet comporte des métadonnées de transition et renvoie le niveau et l'heure d'origine de la transition.
x-ibm-restored-copy-storage-class chaîne Inclus si un objet se trouve à l'état RestoreInProgress ou Restored et renvoie la classe de stockage du compartiment.

Exemple de demande

HEAD /images/backup HTTP/1.1
Authorization: {authorization-string}
x-amz-date: 20160825T183244Z
Host: s3.us.cloud-object-storage.appdomain.cloud

Exemple de réponse

HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 19:51:00 GMT
X-Clv-Request-Id: da214d69-1999-4461-a130-81ba33c484a6
Accept-Ranges: bytes
Server: 3.x
X-Clv-S3-Version: 2.5
ETag: "37d4c94839ee181a2224d6242176c4b5"
Content-Type: text/plain; charset=UTF-8
Last-Modified: Thu, 25 Aug 2017 17:49:06 GMT
Content-Length: 11
x-ibm-transition: transition="ARCHIVE", date="Mon, 03 Dec 2018 22:28:38 GMT"
x-amz-restore: ongoing-request="false", expiry-date="Thu, 06 Dec 2018 18:28:38 GMT"
x-amz-storage-class: "GLACIER"
x-ibm-restored-copy-storage-class: "Standard"
response = client.head_object(
    Bucket='string',
    Key='string'
)
var params = {
  Bucket: 'STRING_VALUE', /* required */
  Key: 'STRING_VALUE', /* required */
};
s3.headObject(params, function(err,data) {
  if (err) console.log(err, err.stack); // an error occurred
  else
    console.log(data);           // successful response
});
public ObjectMetadata()

Récapitulatif des méthodes

Méthode Description
clone() Renvoie un clone de cet élément ObjectMetadata .
getRestoreExpirationTime() Renvoie l'heure à laquelle un objet qui a été temporairement restauré à partir d'une archive expirera et devra être restauré à nouveau afin d'être accessible .
getStorageClass() Renvoie la classe de stockage d'origine du compartiment.
getIBMTransition() Renvoie la classe de stockage de transition et l'heure de la transition.

Etapes suivantes

Outre le stockage à froid, IBM Cloud propose actuellement plusieurs classes de stockage d'objets supplémentaires pour répondre aux différents besoins des utilisateurs, toutes accessibles par le biais de portails Web et d'API RESTful. Pour en savoir plus sur toutes les classes de stockage disponibles à l'adresse IBM Cloud Object Storage.