Tous les produits
Search
Centre de documentation

Object Storage Service:Convertir les classes de stockage d'objets

Dernière mise à jour :Aug 08, 2026

Object Storage Service (OSS) prend en charge plusieurs classes de stockage : Standard, Infrequent Access (IA), Archive, Cold Archive et Deep Cold Archive. Utilisez des règles de cycle de vie pour convertir automatiquement la classe de stockage d'un objet. Vous pouvez également convertir manuellement la classe de stockage d'un objet en appelant l'opération CopyObject.

Avertissement
  • Pour les buckets avec OSS-HDFS activé, ne modifiez pas la classe de stockage des objets dans le répertoire de stockage de données .dlsdata/.

  • Si vous changez la classe de stockage d'un objet du répertoire .dlsdata/ vers IA, l'objet reste accessible via OSS-HDFS. Si vous changez la classe de stockage vers Archive, Cold Archive ou Deep Cold Archive, l'objet n'est plus accessible via OSS-HDFS. Pour accéder à l'objet, vous devez d'abord le restaurer.

Convertir automatiquement les classes de stockage d'objets à l'aide de règles de cycle de vie

Convertir les classes de stockage en fonction de la dernière date de modification

  • Stockage localement redondant (LRS)本地冗余

    Les règles de conversion pour les objets LRS sont les suivantes :

    • Les objets Standard LRS peuvent être convertis en IA LRS, Archive LRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets IA LRS peuvent être convertis en Archive LRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Archive LRS peuvent être convertis en Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Cold Archive LRS peuvent être convertis en Deep Cold Archive LRS.

    Si vous configurez des règles de cycle de vie pour convertir les objets vers IA, Archive, Cold Archive et Deep Cold Archive pour le même bucket, les périodes de transition spécifiées doivent respecter la condition suivante :

    Période de transition vers IA < Période de transition vers Archive < Période de transition vers Cold Archive < Période de transition vers Deep Cold Archive

  • Stockage redondant inter-zone (ZRS)同城

    Les règles de transformation pour les fichiers en stockage redondant inter-zone sont les suivantes :

    • Les objets Standard ZRS peuvent être convertis en IA ZRS, Archive ZRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets IA ZRS peuvent être convertis en Archive ZRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Archive ZRS peuvent être convertis en Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Cold Archive LRS peuvent être convertis en Deep Cold Archive LRS.

Pour plus d'informations, consultez Règles de cycle de vie basées sur la dernière date de modification.

Convertir les classes de stockage en fonction de la dernière date d'accès

Important
  • Pour convertir des objets de la classe de stockage Standard ou IA vers la classe de stockage Archive, Cold Archive ou Deep Cold Archive, vous devez soumettre un ticket afin de demander les autorisations requises. Une fois votre demande approuvée, vous pouvez spécifier la classe de stockage de destination.

  • Après approbation de votre demande, si vous utilisez une règle de cycle de vie basée sur la dernière date d'accès pour convertir un objet de Standard ou IA vers Archive, Cold Archive ou Deep Cold Archive, la dernière date d'accès de l'objet est considérée comme étant le moment où le suivi d'accès a été activé pour le bucket.

  • Stockage localement redondant (LRS)

    1.jpg

    Les règles de conversion pour les objets LRS sont les suivantes :

    • Les objets Standard LRS peuvent être convertis en IA LRS, Archive LRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Après la conversion d'un objet de Standard LRS vers IA LRS, vous pouvez également spécifier s'il doit être automatiquement reconverti en Standard LRS après accès.

    • Les objets IA LRS peuvent être convertis en Archive LRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Archive LRS peuvent être convertis en Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Cold Archive LRS peuvent être convertis en Deep Cold Archive LRS.

  • ZRS

    2.jpg

    Les règles de transformation pour les fichiers en stockage redondant inter-zone sont les suivantes :

    • Les objets Standard ZRS peuvent être convertis en IA ZRS, Archive ZRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Après la conversion d'un objet de Standard ZRS vers IA ZRS, vous pouvez également spécifier s'il doit être automatiquement reconverti en Standard ZRS après accès.

    • Les objets IA ZRS peuvent être convertis en Archive ZRS, Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Archive ZRS peuvent être convertis en Cold Archive LRS ou Deep Cold Archive LRS.

    • Les objets Cold Archive LRS peuvent être convertis en Deep Cold Archive LRS.

Pour plus d'informations, consultez Règles de cycle de vie basées sur la dernière date d'accès.

Méthodes de conversion des classes de stockage à l'aide de règles de cycle de vie

Plusieurs méthodes permettent de configurer des règles de cycle de vie. Ces règles peuvent faire passer les objets vers une classe de stockage spécifiée après une période donnée ou supprimer les objets et parties expirés. Les étapes suivantes décrivent comment utiliser une règle de cycle de vie pour faire passer les objets vers une classe de stockage spécifiée.

Utiliser la console OSS

  1. Connectez-vous à la console OSS.

  2. Dans le volet de navigation de gauche, cliquez sur Buckets. Sur la page Buckets, recherchez et cliquez sur le bucket souhaité.

  3. Dans le volet de navigation de gauche, choisissez Data Management > Lifecycle.

  4. Facultatif : Pour créer une règle de cycle de vie basée sur la dernière date d'accès, activez le commutateur Enable Access Tracking sur la page Lifecycle.

  5. Sur la page Lifecycle, cliquez sur Create Rule.

  6. Dans le panneau Create Lifecycle Rule, définissez les paramètres de la règle comme décrit dans les tableaux suivants.

    • Si le versioning est désactivé pour le bucket :

      Section

      Paramètre

      Description

      Basic Settings

      Status

      État de la règle. Valeurs valides : Start et Disable.

      • Si activée, OSS fait passer ou supprime les objets selon la règle.

      • Si désactivée, la tâche de cycle de vie est suspendue.

      Applied To

      Portée de la règle. Sélectionnez Object Prefix ou Whole Bucket.

      Remarque

      Si vous sélectionnez By Prefix, vous devez saisir le préfixe complet. Par exemple, pour appliquer la règle à tous les objets du répertoire src/dir1/, définissez le préfixe sur src/dir1/. Un préfixe dir1 ne correspondrait pas à ces objets comme prévu.

      Allow Overlapped Prefixes

      Par défaut, OSS vérifie si les préfixes des règles de cycle de vie se chevauchent. Par exemple, vous configurez les deux règles suivantes avec des préfixes qui se chevauchent :

      • Règle 1

        Supprime tous les objets avec le préfixe dir1/ 180 jours après leur dernière modification.

      • Règle 2

        Fait passer tous les objets avec le préfixe dir1/dir2/ vers la classe de stockage Infrequent Access 30 jours après leur dernière modification, et les supprime 60 jours après leur dernière modification.

      Si vous ne sélectionnez pas cette option lors de la configuration de la Règle 2, OSS détecte que les objets du répertoire dir1/dir2/ correspondent à deux règles de suppression. Par conséquent, OSS rejette la Règle 2 et signale une erreur Overlap for same action type Expiration..

      Si vous sélectionnez cette option lors de la configuration de la Règle 2, les objets du répertoire dir1/dir2/ passent vers la classe de stockage Infrequent Access 30 jours après leur dernière modification et sont supprimés 60 jours après leur dernière modification. Les autres objets du répertoire dir1/ sont supprimés 180 jours après leur dernière modification.

      Remarque

      Si vous configurez plusieurs règles et que l'une d'elles s'applique à l'ensemble du bucket, cela est considéré comme un cas de préfixes qui se chevauchent.

      Correspondance de préfixe la plus longue : Lorsque les préfixes de plusieurs règles de cycle de vie ont une relation d'inclusion, OSS détermine quelle règle s'applique à un objet en fonction de la correspondance de préfixe la plus longue : seule la règle dont le préfixe correspond le plus longuement à la clé de l'objet prend effet. OSS n'applique pas plusieurs règles correspondantes simultanément au même objet, et ne revient pas à une règle avec un préfixe correspondant plus court. Par exemple, vous configurez les deux règles suivantes : la Règle A utilise le préfixe trace/ et fait passer les objets vers Infrequent Access (IA) après 30 jours ; la Règle B utilise le préfixe trace/archive/ et fait passer les objets vers Archive après 60 jours. Pour un objet avec la clé trace/archive/file.txt, seule la Règle B prend effet. Pour un objet avec la clé trace/file.txt, seule la Règle A prend effet.

      Les préfixes ne prennent pas en charge les variables dynamiques : Le préfixe d'une règle de cycle de vie prend uniquement en charge la correspondance exacte de chaîne et ne prend pas en charge les variables dynamiques. Par exemple, si vous définissez le préfixe sur log//, OSS le traite comme une chaîne littérale. Un objet avec la clé log/2024/ ne correspond pas à ce préfixe.

      Prefix

      Le préfixe d'objet auquel la règle s'applique.

      • Si vous définissez le préfixe sur img, la règle s'applique à tous les objets dont les noms commencent par img, tels que imgtest.png et img/example.jpg.

      • Si vous définissez le préfixe sur img/, la règle s'applique à tous les objets dont les noms commencent par img/, tels que img/example.jpg et img/test.jpg.

      Le préfixe prend uniquement en charge la correspondance exacte de chaîne et ne prend pas en charge les variables dynamiques ; voir Correspondance de préfixe la plus longue et Les préfixes ne prennent pas en charge les variables dynamiques dans la description de l'option Allow Overlapped Prefixes pour plus de détails.

      Tag

      Applique la règle uniquement aux objets portant le tag spécifié.

      • Si vous ne définissez pas de préfixe mais spécifiez un tag avec key=a et value=1, la règle s'applique à tous les objets du bucket ayant le tag a=1.

      • Si vous définissez le préfixe sur img et spécifiez un tag avec key=a et value=1, la règle s'applique à tous les objets du bucket dont les noms commencent par img et ayant le tag a=1.

      Tagging d'objets.

      NOT

      L'option NOT exclut les objets avec un préfixe et un tag spécifiques de la règle de cycle de vie.

      Important
      • Lorsque vous activez l'option NOT, vous devez spécifier au moins un préfixe ou un tag.

      • La clé d'un tag spécifié dans la condition NOT ne peut pas être identique à une clé définie dans la condition Tag.

      • Vous ne pouvez pas configurer une politique d'expiration de parties lorsque l'option NOT est activée.

      Object Size

      Applique la règle aux objets dans une plage de taille spécifiée.

      • Minimum Size : La règle de cycle de vie s'applique aux objets plus grands que cette valeur. La valeur doit être supérieure à 0 o et inférieure à 5 To.

      • Maximum Size : La règle de cycle de vie s'applique aux objets plus petits que cette valeur. La valeur doit être supérieure à 0 o et inférieure ou égale à 5 To.

      Important

      Si vous spécifiez à la fois une taille minimale et maximale d'objet dans la même règle de cycle de vie :

      • Assurez-vous que la taille maximale est supérieure à la taille minimale.

      • Une politique d'expiration de parties ne peut pas être configurée.

      • Vous ne pouvez pas configurer une politique de nettoyage des marqueurs de suppression.

      Policy for Objects

      Object Lifecycle

      Sélectionnez une politique d'expiration pour les objets. Choisissez By Days, By Date ou Disabled. Si vous sélectionnez Disabled, la politique d'expiration des objets ne prend pas effet.

      Lifecycle-based Rules

      Configurez des règles pour faire passer la classe de stockage des objets ou supprimer les objets expirés. Sélectionnez Infrequent Access, Archive, Cold Archive, Deep Cold Archive ou Data Deletion.

      Par exemple, si vous définissez Object Lifecycle sur By Date et spécifiez le 24 septembre 2023, les objets modifiés pour la dernière fois avant cette date sont automatiquement supprimés et ne peuvent pas être récupérés.

      Policy for Parts

      Part Lifecycle

      Configurez une politique d'expiration pour les parties. Cette option n'est pas disponible si vous avez sélectionné Tag. Définissez la politique d'expiration des parties sur By Days ou By Date, ou sélectionnez Disabled. Si vous sélectionnez Disabled, la politique d'expiration des parties ne prend pas effet.

      Important

      Une règle de cycle de vie doit inclure au moins une politique d'expiration d'objets ou une politique d'expiration de parties.

      Rules for Parts

      Spécifie quand les parties expirent en fonction du nombre de jours ou de la date sélectionnée dans la politique d'expiration des parties. Les parties expirées sont automatiquement supprimées et ne peuvent pas être récupérées.

    • Si le versioning est activé pour le bucket :

      Les paramètres des sections Basic Settings et Policy for Parts sont configurés de la même manière que pour les buckets sans versioning. Le tableau suivant décrit uniquement les paramètres différents.

      Important

      Avant de configurer une règle de cycle de vie, notez que si le versioning est activé sur un bucket servant de destination pour la réplication cross-region, les marqueurs de suppression synchronisés depuis le bucket source transforment les versions actuelles des objets portant le même nom dans le bucket de destination en versions non actuelles. Par conséquent, configurez soigneusement les règles de nettoyage pour les versions non actuelles afin d'éviter toute suppression involontaire de données.

      Section

      Paramètre

      Description

      Policy for Current Versions

      Clean up expired object delete marker

      Si le versioning est activé, l'option Clean Up Expired Object Delete Marker est ajoutée à la politique d'expiration. Les autres options sont identiques à celles des buckets pour lesquels le versioning est désactivé.

      Si vous sélectionnez cette option, OSS supprime le marqueur de suppression d'un objet expiré s'il s'agit de la seule version de l'objet. Si l'objet possède plusieurs versions et que la dernière version est un marqueur de suppression, OSS conserve le marqueur de suppression. Marqueurs de suppression.

      Important

      Cette règle ne nettoie pas les marqueurs de suppression si des versions non actuelles existent. Nous vous recommandons de nettoyer rapidement les marqueurs de suppression et les versions non actuelles inutiles. Sinon, un nombre excessif de marqueurs de suppression peut dégrader les performances des listes.

      Policy for Previous Versions

      Object Lifecycle

      Définissez la politique d'expiration pour les versions non actuelles. Sélectionnez By Days ou Disabled. Si vous sélectionnez Disabled, la politique d'expiration ne prend pas effet.

      Lifecycle-based Rules

      Spécifiez un nombre de jours (N). Une version non actuelle expire N jours après qu'elle soit devenue non actuelle, et l'action spécifiée est effectuée le jour suivant l'expiration. Par exemple, si vous définissez la valeur sur 30, un objet devenu une version non actuelle le 1er septembre 2023 passe vers la classe de stockage spécifiée ou est supprimé le 1er octobre 2023.

      Important

      Vous pouvez déterminer quand un objet est devenu une version non actuelle en vérifiant la dernière date de modification de la version suivante de l'objet.

  7. Cliquez sur OK.

    Une fois la règle de cycle de vie enregistrée, vous pouvez consulter la règle configurée dans la liste des règles.

Utiliser les SDK Alibaba Cloud

Le code suivant fournit des exemples de configuration de règles de cycle de vie à l'aide de SDK courants. Pour savoir comment configurer des règles de cycle de vie à l'aide d'autres SDK, consultez Vue d'ensemble.

Java

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.LifecycleRule;
import com.aliyun.oss.model.SetBucketLifecycleRequest;
import com.aliyun.oss.model.StorageClass;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo {

    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance. 
        // Call the shutdown method to release resources when the OSSClient is no longer in use.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Create a request by using SetBucketLifecycleRequest. 
            SetBucketLifecycleRequest request = new SetBucketLifecycleRequest(bucketName);

            // Specify the ID of the lifecycle rule. 
            String ruleId0 = "rule0";
            // Specify the prefix that you want the lifecycle rule to match. 
            String matchPrefix0 = "A0/";
            // Specify the tag that you want the lifecycle rule to match. 
            Map<String, String> matchTags0 = new HashMap<String, String>();
            // Specify the key and value of the tag. In the example, the key is set to owner and the value is set to John. 
            matchTags0.put("owner", "John");

            String ruleId1 = "rule1";
            String matchPrefix1 = "A1/";
            Map<String, String> matchTags1 = new HashMap<String, String>();
            matchTags1.put("type", "document");

            String ruleId2 = "rule2";
            String matchPrefix2 = "A2/";

            String ruleId3 = "rule3";
            String matchPrefix3 = "A3/";

            String ruleId4 = "rule4";
            String matchPrefix4 = "A4/";

            String ruleId5 = "rule5";
            String matchPrefix5 = "A5/";

            String ruleId6 = "rule6";
            String matchPrefix6 = "A6/";

            // Set the expiration time to three days after the last modified time. 
            LifecycleRule rule = new LifecycleRule(ruleId0, matchPrefix0, LifecycleRule.RuleStatus.Enabled, 3);
            rule.setTags(matchTags0);
            request.AddLifecycleRule(rule);

            // Specify that objects that are created before the specified date expire. 
            rule = new LifecycleRule(ruleId1, matchPrefix1, LifecycleRule.RuleStatus.Enabled);
            rule.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setTags(matchTags1);
            request.AddLifecycleRule(rule);

            // Specify that parts expire three days after they are last modified. 
            rule = new LifecycleRule(ruleId2, matchPrefix2, LifecycleRule.RuleStatus.Enabled);
            LifecycleRule.AbortMultipartUpload abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setExpirationDays(3);
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // Specify that parts that are created before the specific date expire. 
            rule = new LifecycleRule(ruleId3, matchPrefix3, LifecycleRule.RuleStatus.Enabled);
            abortMultipartUpload = new LifecycleRule.AbortMultipartUpload();
            abortMultipartUpload.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            rule.setAbortMultipartUpload(abortMultipartUpload);
            request.AddLifecycleRule(rule);

            // Specify that the storage classes of objects are changed to IA 10 days after they are last modified, and to Archive 30 days after they are last modified. 
            rule = new LifecycleRule(ruleId4, matchPrefix4, LifecycleRule.RuleStatus.Enabled);
            List<LifecycleRule.StorageTransition> storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            LifecycleRule.StorageTransition storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.IA);
            storageTransition.setExpirationDays(10);
            storageTransitions.add(storageTransition);
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(30);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // Specify that the storage classes of objects that are last modified before October 12, 2022 are changed to Archive. 
            rule = new LifecycleRule(ruleId5, matchPrefix5, LifecycleRule.RuleStatus.Enabled);
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();

            storageTransition.setCreatedBeforeDate(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));

            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            request.AddLifecycleRule(rule);

            // Specify that rule6 is configured for versioning-enabled buckets. 
            rule = new LifecycleRule(ruleId6, matchPrefix6, LifecycleRule.RuleStatus.Enabled);
            // Specify that the storage classes of objects are changed to Archive 365 days after the objects are last modified. 
            storageTransitions = new ArrayList<LifecycleRule.StorageTransition>();
            storageTransition = new LifecycleRule.StorageTransition();
            storageTransition.setStorageClass(StorageClass.Archive);
            storageTransition.setExpirationDays(365);
            storageTransitions.add(storageTransition);
            rule.setStorageTransition(storageTransitions);
            // Configure the lifecycle rule to automatically delete expired delete markers. 
            rule.setExpiredDeleteMarker(true);
            // Specify that the storage classes of the previous versions of objects are changed to IA 10 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(10).withStrorageClass(StorageClass.IA);
            // Specify that the storage classes of the previous versions of objects are changed to Archive 20 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionStorageTransition noncurrentVersionStorageTransition2 =
                    new LifecycleRule.NoncurrentVersionStorageTransition().withNoncurrentDays(20).withStrorageClass(StorageClass.Archive);
            // Specify that the previous versions of objects are deleted 30 days after the objects are last modified. 
            LifecycleRule.NoncurrentVersionExpiration noncurrentVersionExpiration = new LifecycleRule.NoncurrentVersionExpiration().withNoncurrentDays(30);
            List<LifecycleRule.NoncurrentVersionStorageTransition> noncurrentVersionStorageTransitions = new ArrayList<LifecycleRule.NoncurrentVersionStorageTransition>();
            noncurrentVersionStorageTransitions.add(noncurrentVersionStorageTransition2);
            rule.setStorageTransition(storageTransitions);
            rule.setNoncurrentVersionExpiration(noncurrentVersionExpiration);
            rule.setNoncurrentVersionStorageTransitions(noncurrentVersionStorageTransitions);
            request.AddLifecycleRule(rule);

            // Initiate a request to configure lifecycle rules. 
            ossClient.setBucketLifecycle(request);

            // Query the lifecycle rules that are configured for the bucket. 
            List<LifecycleRule> listRules = ossClient.getBucketLifecycle(bucketName);
            for(LifecycleRule rules : listRules){
                System.out.println("ruleId="+rules.getId()+", matchPrefix="+rules.getPrefix());
            }
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

PHP

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
use OSS\Model\LifecycleConfig;
use OSS\Model\LifecycleRule;
use OSS\Model\LifecycleAction;

// Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// The China (Hangzhou) endpoint is used as an example. Replace it with the actual endpoint for your region.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Enter the bucket name.
$bucket= "examplebucket";

// Set the rule ID and file prefix.
$ruleId0 = "rule0";
$matchPrefix0 = "A0/";
$ruleId1 = "rule1";
$matchPrefix1 = "A1/";

$lifecycleConfig = new LifecycleConfig();
$actions = array();
// Expire objects 3 days after their last modification time.
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3);
$lifecycleRule = new LifecycleRule($ruleId0, $matchPrefix0, "Enabled", $actions);
$lifecycleConfig->addRule($lifecycleRule);
$actions = array();
// Expire objects created before the specified date.
$actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z');
$lifecycleRule = new LifecycleRule($ruleId1, $matchPrefix1, "Enabled", $actions);
$lifecycleConfig->addRule($lifecycleRule);
try {
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

    $ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");

Node.js

const OSS = require('ali-oss')

const client = new OSS({
  // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to oss-cn-hangzhou. 
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the name of the bucket. 
  bucket: 'yourbucketname'
});

async function getBucketLifecycle () {
  try {
    const result = await client.getBucketLifecycle('Yourbucketname');
    console.log(result.rules); // Query the lifecycle rules. 

    result.rules.forEach(rule => {
      console.log(rule.id) // Query the rule IDs.  
      console.log(rule.status) // Query the status of the rules. 
      console.log(rule.tags) // Query the tags configured in the lifecycle rules. 
      console.log(rule.expiration.days) // Query the validity period configurations. 
      console.log(rule.expiration.createdBeforeDate) // Query the expiration date configurations. 
      // Query the rule for expired parts. 
      console.log(rule.abortMultipartUpload.days || rule.abortMultipartUpload.createdBeforeDate)
      // Query the rule of storage class conversion. 
      console.log(rule.transition.days || rule.transition.createdBeforeDate) // Query the conversion date configurations. 
      console.log(rule.transition.storageClass) // Query the configurations used to convert storage classes. 
      // Query the lifecycle rule to check whether expired delete markers are automatically deleted. 
      console.log(rule.transition.expiredObjectDeleteMarker)
      // Query the configurations used to convert the storage class of previous versions of the objects. 
      console.log(rule.noncurrentVersionTransition.noncurrentDays) // Query the conversion date configurations for objects of previous versions. 
      console.log(rule.noncurrentVersionTransition.storageClass) // Query the configurations used to convert the storage classes of previous versions of objects. 
    })
  } catch (e) {
    console.log(e);
  }
}
getBucketLifecycle();

Python

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import datetime
from oss2.models import (LifecycleExpiration, LifecycleRule, 
                        BucketLifecycle,AbortMultipartUpload, 
                        TaggingRule, Tagging, StorageTransition,
                        NoncurrentVersionStorageTransition,
                        NoncurrentVersionExpiration)

# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"

# Specify the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Specify that objects expire three days after they are last modified. 
rule1 = LifecycleRule('rule1', 'tests/',
                      status=LifecycleRule.ENABLED,
                      expiration=LifecycleExpiration(days=3))

# Specify that objects created before the specified date expire. 
rule2 = LifecycleRule('rule2', 'tests2/',
                      status=LifecycleRule.ENABLED,
expiration = LifecycleExpiration(created_before_date=datetime.date(2023, 12, 12)))

# Specify that the parts expire three days after they are last modified. 
rule3 = LifecycleRule('rule3', 'tests3/',
                      status=LifecycleRule.ENABLED,
            abort_multipart_upload=AbortMultipartUpload(days=3))

# Specify that parts created before the specified date expire. 
rule4 = LifecycleRule('rule4', 'tests4/',
                      status=LifecycleRule.ENABLED,
                      abort_multipart_upload = AbortMultipartUpload(created_before_date=datetime.date(2022, 12, 12)))

# Specify that the storage classes of objects are changed to Infrequent Access (IA) 20 days after they are last modified, and to Archive 30 days after they are last modified. 
rule5 = LifecycleRule('rule5', 'tests5/',
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(days=20,storage_class=oss2.BUCKET_STORAGE_CLASS_IA),
                            StorageTransition(days=30,storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)])

# Specify the tag that you want the lifecycle rule to match. 
tagging_rule = TaggingRule()
tagging_rule.add('key1', 'value1')
tagging_rule.add('key2', 'value2')
tagging = Tagging(tagging_rule)

# Specify that the storage classes of objects are changed to Archive 365 days after they are last modified.  
# Compared with the preceding rules, rule6 includes the tag condition to match objects. The rule takes effect for objects whose tagging configurations are key1=value1 and key2=value2. 
rule6 = LifecycleRule('rule6', 'tests6/',
                      status=LifecycleRule.ENABLED,
                      storage_transitions=[StorageTransition(created_before_date=datetime.date(2022, 12, 12),storage_class=oss2.BUCKET_STORAGE_CLASS_IA)],
                      tagging = tagging)

# rule7 is a lifecycle rule that applies to a versioning-enabled bucket. 
# Specify that the storage classes of objects are changed to Archive 365 days after they are last modified. 
# Specify that delete markers are automatically removed when they expire. 
# Specify that the storage classes of objects are changed to IA 12 days after they become previous versions. 
# Specify that the storage classes of objects are changed to Archive 20 days after they become previous versions. 
# Specify that objects are deleted 30 days after they become previous versions. 
rule7 = LifecycleRule('rule7', 'tests7/',
              status=LifecycleRule.ENABLED,
              storage_transitions=[StorageTransition(days=365, storage_class=oss2.BUCKET_STORAGE_CLASS_ARCHIVE)], 
              expiration=LifecycleExpiration(expired_detete_marker=True),
              noncurrent_version_sotrage_transitions = 
                    [NoncurrentVersionStorageTransition(12, oss2.BUCKET_STORAGE_CLASS_IA),
                     NoncurrentVersionStorageTransition(20, oss2.BUCKET_STORAGE_CLASS_ARCHIVE)],
              noncurrent_version_expiration = NoncurrentVersionExpiration(30))

lifecycle = BucketLifecycle([rule1, rule2, rule3, rule4, rule5, rule6, rule7])

bucket.put_bucket_lifecycle(lifecycle)

C#

using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the bucket name. Example: examplebucket. 
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";

// Create a ClientConfiguration instance and modify the default parameters based on your requirements.
var conf = new ClientConfiguration();

// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;

// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    var setBucketLifecycleRequest = new SetBucketLifecycleRequest(bucketName);
    // Create the first lifecycle rule. 
    LifecycleRule lcr1 = new LifecycleRule()
    {
        ID = "delete obsoleted files",
        Prefix = "obsoleted/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 3,
        Tags = new Tag[1]
    };
    // Specify a tag for the rule. 
    var tag1 = new Tag
    {
        Key = "project",
        Value = "projectone"
    };

    lcr1.Tags[0] = tag1;

    // Create the second lifecycle rule. 
    LifecycleRule lcr2 = new LifecycleRule()
    {
        ID = "delete temporary files",
        Prefix = "temporary/",
        Status = RuleStatus.Enabled,
        ExpriationDays = 20,
        Tags = new Tag[1]         
    };
    // Specify a tag for the rule. 
    var tag2 = new Tag
    {
        Key = "user",
        Value = "jsmith"
    };
    lcr2.Tags[0] = tag2;

    // Specify that parts expire 30 days after they are last modified. 
    lcr2.AbortMultipartUpload = new LifecycleRule.LifeCycleExpiration()
    {
        Days = 30
    };

    LifecycleRule lcr3 = new LifecycleRule();
    lcr3.ID = "only NoncurrentVersionTransition";
    lcr3.Prefix = "test1";
    lcr3.Status = RuleStatus.Enabled;
    lcr3.NoncurrentVersionTransitions = new LifecycleRule.LifeCycleNoncurrentVersionTransition[2]
    {
        // Specify that the storage classes of the previous versions of objects are converted to IA 90 days after they are last modified. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.IA,
            NoncurrentDays = 90
        },
        // Specify that the storage classes of the previous versions of objects are converted to Archive 180 days after they are last modified. 
        new LifecycleRule.LifeCycleNoncurrentVersionTransition(){
            StorageClass = StorageClass.Archive,
            NoncurrentDays = 180
        }
    };
    setBucketLifecycleRequest.AddLifecycleRule(lcr1);
    setBucketLifecycleRequest.AddLifecycleRule(lcr2);
    setBucketLifecycleRequest.AddLifecycleRule(lcr3);

    // Configure lifecycle rules. 
    client.SetBucketLifecycle(setBucketLifecycleRequest);
    Console.WriteLine("Set bucket:{0} Lifecycle succeeded ", bucketName);
}
catch (OssException ex)
{
    Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}",
        ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
}
catch (Exception ex)
{
    Console.WriteLine("Failed with error info: {0}", ex.Message);
}

Android-Java

PutBucketLifecycleRequest request = new PutBucketLifecycleRequest();
request.setBucketName("examplebucket");

BucketLifecycleRule rule1 = new BucketLifecycleRule();
// Set the rule ID and file prefix.
rule1.setIdentifier("1");
rule1.setPrefix("A");
// Specify whether to execute the lifecycle rule. If the value is true, OSS periodically executes the rule. If the value is false, OSS ignores the rule.
rule1.setStatus(true);
// Expire objects 200 days after the last modified time.
rule1.setDays("200");
// Transition objects to the Archive storage class after 30 days.
rule1.setArchiveDays("30");
// Expire incomplete multipart uploads after 3 days.
rule1.setMultipartDays("3");
// Transition objects to the Infrequent Access (IA) storage class after 15 days.
rule1.setIADays("15");

BucketLifecycleRule rule2 = new BucketLifecycleRule();
rule2.setIdentifier("2");
rule2.setPrefix("B");
rule2.setStatus(true);
rule2.setDays("300");
rule2.setArchiveDays("30");
rule2.setMultipartDays("3");
rule2.setIADays("15");

ArrayList<BucketLifecycleRule> lifecycleRules = new ArrayList<BucketLifecycleRule>();
lifecycleRules.add(rule1);
lifecycleRules.add(rule2);
request.setLifecycleRules(lifecycleRules);
OSSAsyncTask task = oss.asyncPutBucketLifecycle(request, new OSSCompletedCallback<PutBucketLifecycleRequest, PutBucketLifecycleResult>() {
    @Override
    public void onSuccess(PutBucketLifecycleRequest request, PutBucketLifecycleResult result) {
        OSSLog.logInfo("code::"+result.getStatusCode());

    }

    @Override
    public void onFailure(PutBucketLifecycleRequest request, ClientException clientException, ServiceException serviceException) {
        OSSLog.logError("error: "+serviceException.getRawMessage());

    }
});

task.waitUntilFinished();

Go

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Create an OSSClient instance.
	// Set yourEndpoint to the Endpoint of the bucket. For example, for the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. For other regions, use the actual Endpoint.
	// Set yourRegion to the region where the bucket is located. For example, for the China (Hangzhou) region, set the region to cn-hangzhou. For other regions, use the actual region.
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Set the signature version.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
	// Specify the bucket name.
	bucketName := "examplebucket"
	// Specify lifecycle rule 1. This rule specifies that files with the prefix "foo/" expire 3 days after they are last modified.
	rule1 := oss.BuildLifecycleRuleByDays("rule1", "foo/", true, 3)

	// Automatically delete delete markers for objects in a versioning-enabled bucket when the objects have only delete markers.
	deleteMark := true
	expiration := oss.LifecycleExpiration{
		ExpiredObjectDeleteMarker: &deleteMark,
	}

	// Delete noncurrent versions of objects 30 days after they become noncurrent.
	versionExpiration := oss.LifecycleVersionExpiration{
		NoncurrentDays: 30,
	}

	// Transition noncurrent versions of objects to the Infrequent Access (IA) storage class 10 days after they become noncurrent.
	versionTransition := oss.LifecycleVersionTransition{
		NoncurrentDays: 10,
		StorageClass:   "IA",
	}

	// Specify lifecycle rule 2.
	rule2 := oss.LifecycleRule{
		ID:                   "rule2",
		Prefix:               "yourObjectPrefix",
		Status:               "Enabled",
		Expiration:           &expiration,
		NonVersionExpiration: &versionExpiration,
		NonVersionTransitions: []oss.LifecycleVersionTransition{
			versionTransition,
		},
	}

	// Specify lifecycle rule 3. This rule specifies that files with the tag key "tag1" and tag value "value1" expire 3 days after they are last modified.
	rule3 := oss.LifecycleRule{
		ID:     "rule3",
		Prefix: "",
		Status: "Enabled",
		Tags: []oss.Tag{
			{
				Key:   "tag1",
				Value: "value1",
			},
		},
		Expiration: &oss.LifecycleExpiration{Days: 3},
	}

	// Set the lifecycle rules.
	rules := []oss.LifecycleRule{rule1, rule2, rule3}
	err = client.SetBucketLifecycle(bucketName, rules)
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}
}

C++

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Initialize the OSS account information. */
    
    /* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Specify the bucket name. For example, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Initialize network resources. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    SetBucketLifecycleRequest request(BucketName);
    std::string date("2022-10-12T00:00:00.000Z");

    /* Set tags. */
    Tagging tagging;
    tagging.addTag(Tag("key1", "value1"));
    tagging.addTag(Tag("key2", "value2"));

    /* Specify a lifecycle rule. */
    auto rule1 = LifecycleRule();
    rule1.setID("rule1");
    rule1.setPrefix("test1/");
    rule1.setStatus(RuleStatus::Enabled);
    rule1.setExpiration(3);
    rule1.setTags(tagging.Tags());

    /* Specify the expiration time. */
    auto rule2 = LifecycleRule();
    rule2.setID("rule2");
    rule2.setPrefix("test2/");
    rule2.setStatus(RuleStatus::Disabled);
    rule2.setExpiration(date);

    /* rule3 is a lifecycle rule for a bucket with versioning enabled. */
    auto rule3 = LifecycleRule();
    rule3.setID("rule3");
    rule3.setPrefix("test3/");
    rule3.setStatus(RuleStatus::Disabled);

    /* Transition objects to the Archive storage class 365 days after they are last modified. */  
    auto transition = LifeCycleTransition();  
    transition.Expiration().setDays(365);
    transition.setStorageClass(StorageClass::Archive);
    rule3.addTransition(transition);

    /* Automatically remove expired delete markers. */
    rule3.setExpiredObjectDeleteMarker(true);

    /* Transition noncurrent versions of objects to the Infrequent Access storage class 10 days after they become noncurrent. */
    auto transition1 = LifeCycleTransition();  
    transition1.Expiration().setDays(10);
    transition1.setStorageClass(StorageClass::IA);

    /* Transition noncurrent versions of objects to the Archive storage class 20 days after they become noncurrent. */
    auto transition2 = LifeCycleTransition();  
    transition2.Expiration().setDays(20);
    transition2.setStorageClass(StorageClass::Archive);

    /* Delete objects 30 days after they become noncurrent versions. */
    auto expiration  = LifeCycleExpiration(30);
    rule3.setNoncurrentVersionExpiration(expiration);

    LifeCycleTransitionList noncurrentVersionStorageTransitions{transition1, transition2};
    rule3.setNoncurrentVersionTransitionList(noncurrentVersionStorageTransitions);

    /* Set the lifecycle rules. */
    LifecycleRuleList list{rule1, rule2, rule3};
    request.setLifecycleRules(list);
    auto outcome = client.SetBucketLifecycle(request);

    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "SetBucketLifecycle fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

C

#include "oss_api.h"
#include "aos_http_io.h"
/* Replace yourEndpoint with the Endpoint of the region where your bucket is located. For example, for the China (Hangzhou) region, the Endpoint is https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Replace with your bucket name. For example, examplebucket. */
const char *bucket_name = "examplebucket";
/* Replace yourRegion with the ID of the region where your bucket is located. For example, for the China (Hangzhou) region, the region ID is cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Initialize an aos_string_t variable with a char* string. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // You must also configure the following two parameters.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Specify whether to use a CNAME to access OSS. A value of 0 means that a CNAME is not used. */
    options->config->is_cname = 0;
    /* Set network parameters, such as the timeout period. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Call the aos_http_io_initialize method at the program entry point to initialize global resources, such as the network and memory. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* The memory pool (pool) for memory management is equivalent to apr_pool_t. The implementation is in the apr library. */
    aos_pool_t *pool;
    /* Create a memory pool. The second parameter is NULL, which indicates that the new memory pool does not inherit from another memory pool. */
    aos_pool_create(&pool, NULL);
    /* Create and initialize options. This parameter includes global configurations, such as endpoint, access_key_id, access_key_secret, is_cname, and curl. */
    oss_request_options_t *oss_client_options;
    /* Allocate memory for options in the memory pool. */
    oss_client_options = oss_request_options_create(pool);
    /* Initialize the client options, oss_client_options. */
    init_options(oss_client_options);
    /* Initialize parameters. */
    aos_string_t bucket;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_list_t lifecycle_rule_list;   
    aos_str_set(&bucket, bucket_name);
    aos_list_init(&lifecycle_rule_list);
    /* Specify the expiration in days. */
    oss_lifecycle_rule_content_t *rule_content_days = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_days->id, "rule-1");
    /* Set the object prefix. */
    aos_str_set(&rule_content_days->prefix, "dir1");
    aos_str_set(&rule_content_days->status, "Enabled");
    rule_content_days->days = 3;
    aos_list_add_tail(&rule_content_days->node, &lifecycle_rule_list);
    /* Specify the expiration date. */
    oss_lifecycle_rule_content_t *rule_content_date = oss_create_lifecycle_rule_content(pool);
    aos_str_set(&rule_content_date->id, "rule-2");
    aos_str_set(&rule_content_date->prefix, "dir2");
    aos_str_set(&rule_content_date->status, "Enabled");
    /* The expiration date must be in UTC format.
    aos_str_set(&rule_content_date->date, "2023-10-11T00:00:00.000Z");
    aos_list_add_tail(&rule_content_date->node, &lifecycle_rule_list);
    /* Set the lifecycle rule. */
    resp_status = oss_put_bucket_lifecycle(oss_client_options, &bucket, &lifecycle_rule_list, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put bucket lifecycle succeeded\n");
    } else {
        printf("put bucket lifecycle failed, code:%d, error_code:%s, error_msg:%s, request_id:%s\n",
            resp_status->code, resp_status->error_code, resp_status->error_msg, resp_status->req_id);
    }
    /* Release the memory pool. This releases the memory allocated to resources during the request. */
    aos_pool_destroy(pool);
    /* Release the previously allocated global resources. */
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # The China (Hangzhou) Endpoint is used as an example. Replace it with the actual Endpoint.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Specify the bucket name.
bucket = client.get_bucket('examplebucket')
# Set the lifecycle rules.
bucket.lifecycle = [
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule1', :enable => true, :prefix => 'foo/', :expiry => 3),
  Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule2', :enable => false, :prefix => 'bar/', :expiry => Date.new(2016, 1, 1))
]

Utiliser ossutil

Pour plus d'informations sur la définition de règles de cycle de vie à l'aide d'ossutil, consultez put-bucket-lifecycle.

Utiliser l'API REST

Si votre application a des exigences spécifiques, vous pouvez envoyer directement des requêtes API REST. Pour ce faire, vous devez écrire manuellement le code pour calculer la signature. Pour plus d'informations, consultez PutBucketLifecycle.

Convertir manuellement les classes de stockage d'objets à l'aide de l'opération CopyObject

Appelez l'opération CopyObject pour convertir la classe de stockage d'un objet en écrasant l'objet.

  • Si vous convertissez la classe de stockage d'un objet vers IA, Archive, Cold Archive ou Deep Cold Archive, une taille facturée minimale de 64 Ko, une durée de stockage minimale et des frais de récupération de données peuvent s'appliquer. Pour plus d'informations, consultez Notes d'utilisation.

  • Les objets Archive, Cold Archive et Deep Cold Archive doivent être restaurés avant que leurs classes de stockage puissent être modifiées. Pour savoir comment restaurer des objets, consultez Restaurer des objets. Si l'accès en temps réel aux objets Archive est activé, vous pouvez modifier la classe de stockage des objets Archive sans les restaurer. Les lectures directes entraînent des frais de récupération de données pour l'accès en temps réel. Pour plus d'informations, consultez Accès en temps réel aux objets Archive.

Remarque
  • Dans un bucket pour lequel le versioning est activé, lorsque vous appelez l'opération CopyObject pour convertir la classe de stockage d'un objet, OSS génère automatiquement un ID de version unique pour la nouvelle version de l'objet. Cet ID de version est renvoyé dans l'en-tête de réponse x-oss-version-id.

  • Dans un bucket pour lequel le versioning est désactivé ou suspendu, lorsque vous appelez l'opération CopyObject pour convertir la classe de stockage d'un objet, OSS génère automatiquement une version avec un ID de version nul pour le nouvel objet et écrase la version existante avec un ID de version nul. Si l'objet écrasé appartient à la classe de stockage IA, Archive, Cold Archive ou Deep Cold Archive, des frais de stockage pour une durée inférieure à la durée minimale de stockage peuvent vous être facturés. Pour plus d'informations, consultez Comment suis-je facturé pour les objets stockés pendant une durée inférieure à la durée minimale de stockage ?.

Règles de conversion des classes de stockage à l'aide de CopyObject

  • LRS

    Vous pouvez convertir un objet LRS entre n'importe laquelle des classes de stockage suivantes : Standard LRS, IA LRS, Archive LRS, Cold Archive LRS et Deep Cold Archive LRS.

  • Stockage redondant inter-zone (ZRS)

    Vous pouvez convertir un objet ZRS entre n'importe laquelle des classes de stockage suivantes : Standard ZRS, IA ZRS et Archive ZRS.

    Lorsque vous convertissez un objet Archive ZRS en objet Standard ZRS ou IA ZRS, différentes opérations sont requises selon les paramètres du bucket :

    • Si l'accès en temps réel aux objets Archive est activé pour le bucket, vous pouvez convertir directement la classe de stockage de l'objet Archive sans le restaurer.

    • Si l'accès en temps réel aux objets Archive n'est pas activé pour le bucket, vous devez d'abord restaurer l'objet Archive avant de pouvoir convertir sa classe de stockage.

Méthodes de conversion des classes de stockage à l'aide de CopyObject

Après avoir activé Prevent Object Overwrites, vous ne pouvez pas appeler l'opération CopyObject pour convertir les classes de stockage d'objets à l'aide de clients tels que la console OSS, les SDK ou ossutil. Pour convertir les classes de stockage, vous devez utiliser des règles de cycle de vie pour une conversion automatique.

Utiliser la console OSS

Lorsque vous modifiez la classe de stockage d'un objet dans la console, la taille de l'objet ne peut pas dépasser 1 Go. Pour les objets de plus de 1 Go, nous vous recommandons d'utiliser un SDK ou ossutil.

  1. Connectez-vous à la console OSS.

  2. Cliquez sur Buckets, puis cliquez sur le nom du bucket de destination.

  3. Dans le volet de navigation de gauche, choisissez Object Management > Objects.

  4. Sur la page Objects, localisez l'objet de destination et choisissez more > Change Storage Class.

  5. Nous vous recommandons d'activer le commutateur Retain User Metadata pour conserver les métadonnées personnalisées de l'objet lors du changement de sa classe de stockage.

  6. Sélectionnez une nouvelle classe de stockage, puis cliquez sur OK.

Utiliser les SDK Alibaba Cloud

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.CopyObjectRequest;
import com.aliyun.oss.model.CopyObjectResult;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.StorageClass;

public class Demo {
    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // In this example, a bucket and a Standard or IA object are created. 
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";
        // Specify the full path of the object. Do not include the bucket name in the full path. Example: exampleobject.txt. 
        String objectName = "exampleobject.txt";
        // Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
        String region = "cn-hangzhou";

        // Create an OSSClient instance.
        // Call the shutdown method to release resources when the OSSClient is no longer in use. 
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Create a CopyObjectRequest object. 
            CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;

            // Create an ObjectMetadata object. 
            ObjectMetadata objectMetadata = new ObjectMetadata();

            // Convert the storage class of the object to Archive. 
            objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
            // Convert the storage class of the object to Cold Archive. 
            // objectMetadata.setHeader("x-oss-storage-class", StorageClass.ColdArchive);
            // Convert the storage class of the object to Deep Cold Archive. 
            // objectMetadata.setHeader("x-oss-storage-class", StorageClass.DeepColdArchive);
            request.setNewObjectMetadata(objectMetadata);

            // Convert the storage class of the object. 
            CopyObjectResult result = ossClient.copyObject(request);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
$provider = new EnvironmentVariableCredentialsProvider();
// The endpoint of the China (Hangzhou) region is used in this example. Specify the actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the bucket name.
$bucket= "<yourBucketName>";
// Specify the full path of the object. Do not include the bucket name. Example: destfolder/exampleobject.txt.
$object = "<yourObjectName>";

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

try {

    // Specify the storage class for the object after the change. For example, set the storage class to Archive.
    $copyOptions = array(
        OssClient::OSS_HEADERS => array(            
            'x-oss-storage-class' => 'Archive',
            'x-oss-metadata-directive' => 'REPLACE',
        ),
    );
    
    $ossClient->copyObject($bucket, $object, $bucket, $object, $copyOptions);

} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss');

const client = new OSS({
  // Set region to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set region to oss-cn-hangzhou.
  region: 'yourregion',
  // Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Set bucket to the name of your bucket.
  bucket: 'yourbucketname'
})
const options = {
    headers:{'x-oss-storage-class':'Archive'}
}
client.copy('Objectname','Objectname',options).then((res) => {
    console.log(res);
}).catch(err => {
    console.log(err)
})
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
import os
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Specify the endpoint of the bucket region (for example: https://oss-cn-hangzhou.aliyuncs.com). 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"

# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt. 
# Make sure that the storage class of the object is Standard or IA. 
object_name = 'exampledir/exampleobject.txt'

# Convert the storage class of the object to Archive by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_ARCHIVE. 
headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_ARCHIVE}
# Convert the storage class of the object to Cold Archive by setting the x-oss-storage-class header to oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE. 
# headers = {'x-oss-storage-class': oss2.BUCKET_STORAGE_CLASS_COLD_ARCHIVE}
# Convert the storage class of the object to Deep Cold Archive by setting the x-oss-storage-class header to BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE 
# headers = {'x-oss-storage-class': oss2.models.BUCKET_STORAGE_CLASS_DEEP_COLD_ARCHIVE}
# Convert the storage class of the object. 
bucket.copy_object(bucket.bucket_name, object_name, object_name, headers)                    
package main

import (
	"log"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// Create an OSSClient instance. 
	// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
	// Specify the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.  
	clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	clientOptions = append(clientOptions, oss.Region("yourRegion"))
	// Specify the signature version.
	clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", clientOptions...)
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// Specify the name of the bucket. 
	bucketName := "yourBucketName" // Replace yourBucketName with the actual bucket name.
	// Specify the full path of the object. Do not include the bucket name in the full path. 
	objectName := "yourObjectName" // Replace yourObjectName with the actual object path.

	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket: %v", err)
	}

	// Convert the storage class of the object to Archive. 
	_, err = bucket.CopyObject(objectName, objectName, oss.ObjectStorageClass(oss.StorageArchive))
	if err != nil {
		log.Fatalf("Failed to change storage class of object: %v", err)
	}

	log.Println("Storage class changed successfully.")
}
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
copy.sourceBucketName = @"examplebucket";
copy.sourceObjectKey = @"exampleobject.txt";
copy.bucketName = @"examplebucket";
copy.objectKey = @"exampleobject.txt";
// Set the storage class of the exampleobject.txt object to Archive. 
copy.objectMeta = @{@"x-oss-storage-class" : @"Archive"};

OSSTask * task = [client copyObject:copy];
[task continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"copy object success!");
    } else {
        NSLog(@"copy object failed, error: %@" , task.error);
    }
    return nil;
}];
// Implement synchronous blocking to wait for the task to complete. 
// [task waitUntilFinished];  
#include <iostream>
#include <alibabacloud/oss/OssClient.h>

using namespace AlibabaCloud::OSS;

int main(void)
{  
            
    /* Set yourEndpoint to the Endpoint of the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Endpoint to https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Set yourRegion to the region where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the Region to cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Specify the bucket name. Example: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Specify the full path of the object. The full path cannot contain the bucket name. Example: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";
  
    /* Initialize network resources. */
    InitializeSdk();
    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Obtain access credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
    
    /* Set the storage class for the object. For example, set the storage class to Archive. */
    ObjectMetaData objectMeta;
    objectMeta.addHeader("x-oss-storage-class", "Archive");
    
    std::string SourceBucketName = BucketName;
    std::string SourceObjectName = ObjectName;
    
    CopyObjectRequest request(SourceBucketName, ObjectName, objectMeta);
    request.setCopySource(SourceBucketName, SourceObjectName);
    
    /* Change the storage class to the specified one. */
    auto outcome = client.CopyObject(request);
    if (!outcome.isSuccess()) {
        /* Handle exceptions. */
        std::cout << "CopyObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }
    
    /* Release network resources. */
    ShutdownSdk();
    return 0;
}

Utiliser ossutil

Pour plus d'informations sur la conversion de la classe de stockage d'un objet à l'aide d'ossutil, consultez copy-object.

Utiliser l'API REST

Si votre application a des exigences spécifiques, vous pouvez envoyer directement des requêtes API REST. Pour ce faire, vous devez écrire manuellement le code pour calculer la signature. Pour plus d'informations, consultez CopyObject.

Notes d'utilisation

Lorsque vous convertissez la classe de stockage d'un objet vers IA, Archive, Cold Archive ou Deep Cold Archive, tenez compte des points suivants :

Taille facturée minimale

La taille facturée minimale d'un objet est de 64 Ko. Si un objet est inférieur à 64 Ko, vous êtes facturé pour 64 Ko de stockage.

Durée minimale de stockage

La durée minimale de stockage est de 30 jours pour les objets IA, de 60 jours pour les objets Archive, de 180 jours pour les objets Cold Archive et de 180 jours pour les objets Deep Cold Archive. Si un objet est stocké pendant une période inférieure à la durée minimale de stockage, des frais de stockage pour une durée inférieure à la durée minimale de stockage vous seront facturés. Pour plus d'informations, consultez Frais de stockage.

  • Conversion automatique des classes de stockage d'objets à l'aide de règles de cycle de vie

    • Lorsque vous convertissez la classe de stockage d'un objet vers IA ou Archive, la durée de stockage de l'objet n'est pas recalculée.

      Par exemple, un objet nommé a.txt est stocké en tant qu'objet Standard dans OSS pendant 10 jours. Après que sa classe de stockage ait été convertie en IA par une règle de cycle de vie, il ne doit être stocké que 20 jours supplémentaires pour satisfaire à l'exigence de durée minimale de stockage de 30 jours.

    • Lorsque vous convertissez la classe de stockage d'un objet vers Cold Archive ou Deep Cold Archive, la durée de stockage de l'objet est recalculée.

      • Exemple 1 : Un objet nommé a.txt est stocké en tant qu'objet Standard ou IA dans OSS pendant 10 jours. Après que sa classe de stockage ait été convertie en Cold Archive ou Deep Cold Archive par une règle de cycle de vie, il doit être stocké pendant 180 jours supplémentaires pour satisfaire à l'exigence de durée minimale de stockage de 180 jours.

      • Exemple 2 : Un objet nommé a.txt est stocké en tant qu'objet Cold Archive dans OSS pendant 30 jours. Lorsque sa classe de stockage est convertie en Deep Cold Archive par une règle de cycle de vie, des frais de stockage pour un objet Cold Archive pendant une durée inférieure à la durée minimale de 180 jours vous sont facturés. De plus, après avoir été converti en Deep Cold Archive, il doit être stocké pendant 180 jours supplémentaires pour satisfaire à l'exigence de durée minimale de stockage de 180 jours.

  • Conversion manuelle des classes de stockage d'objets à l'aide de l'opération CopyObject

    Lorsque vous convertissez manuellement un objet vers n'importe quelle classe de stockage à l'aide de l'opération CopyObject, la durée de stockage de l'objet est recalculée.

    Par exemple, un objet nommé a.txt est stocké en tant qu'objet Standard dans OSS pendant 10 jours. Après avoir converti manuellement l'objet vers la classe de stockage IA à l'aide de l'opération CopyObject, il doit être stocké pendant 30 jours supplémentaires pour satisfaire à l'exigence de durée minimale de stockage de 30 jours.

Remarque

Si vous renommez un objet IA, Archive, Cold Archive ou Deep Cold Archive ou si vous l'écrasez en téléchargeant un objet portant le même nom avant que la durée minimale de stockage ne soit écoulée, des frais de stockage pour une durée inférieure à la durée minimale de stockage vous seront facturés. Par exemple, si vous renommez un objet IA après qu'il ait été stocké pendant 29 jours, OSS traite l'objet renommé comme un nouvel objet et réinitialise sa durée de stockage. Cela signifie que l'objet doit être stocké pendant 30 jours supplémentaires pour satisfaire à l'exigence de durée minimale de stockage pour la classe de stockage IA.

Temps de restauration

La restauration d'un objet Archive, Cold Archive ou Deep Cold Archive prend du temps. Si votre scénario métier nécessite un accès en temps réel aux objets, nous vous recommandons de ne pas convertir la classe de stockage des objets vers Archive, Cold Archive ou Deep Cold Archive.

Frais de requête

Méthode de conversion

Classe de stockage source de l'objet

Frais de requête

Règle de cycle de vie

Standard, IA, Archive, Cold Archive

Des frais de requêtes PUT vous sont facturés en fonction de la classe de stockage source de l'objet. Les frais sont facturés au bucket actuel.

CopyObject

Stockage Archive

  • L'accès en temps réel aux objets Archive est activé

    • Des frais de requêtes GET vous sont facturés en fonction de la classe de stockage source de l'objet. Les frais sont facturés au bucket source.

    • Des frais de requêtes PUT vous sont facturés en fonction de la classe de stockage de destination de l'objet. Les frais sont facturés au bucket de destination.

  • L'accès en temps réel aux objets Archive n'est pas activé

    Des frais de requêtes PUT vous sont facturés en fonction de la classe de stockage source de l'objet. Les frais sont facturés au bucket de destination.

Standard, IA, Cold Archive, Deep Cold Archive

Des frais de requêtes PUT vous sont facturés en fonction de la classe de stockage source de l'objet. Les frais sont facturés au bucket de destination.

Si l'accès en temps réel aux objets Archive est activé, lorsque vous utilisez l'opération CopyObject pour convertir la classe de stockage d'un objet Archive source, vous n'avez pas besoin de le restaurer au préalable. Aucun frais de restauration de données depuis le Stockage Archive ne vous est facturé, mais des frais de récupération de données pour l'accès en temps réel vous sont facturés.

Si l'accès en temps réel aux objets Archive n'est pas activé, lorsque vous utilisez l'opération CopyObject pour convertir la classe de stockage d'un objet Archive source, vous devez d'abord le restaurer. Des frais de restauration de données depuis le Stockage Archive vous sont facturés, mais aucun frais de récupération de données pour l'accès en temps réel ne vous est facturé.

Pour plus d'informations, consultez Frais de traitement des données.

Frais de récupération de données

Lorsque vous accédez à des objets IA, des frais supplémentaires de récupération de données vous sont facturés en fonction du volume réel de données consulté. Lorsque vous restaurez des objets Archive, Cold Archive et Deep Cold Archive, des frais supplémentaires de restauration de données vous sont facturés. Après avoir activé l'accès en temps réel aux objets Archive, des frais supplémentaires pour l'accès en temps réel vous sont facturés lorsque vous accédez directement aux objets Archive. Ces frais sont facturés séparément des frais de trafic sortant. Si un objet est consulté en moyenne plus d'une fois par mois, le coût d'utilisation des classes de stockage IA, Archive, Cold Archive ou Deep Cold Archive peut être supérieur à celui de la classe de stockage Standard.

Frais de stockage temporaire

Lorsqu'un objet Cold Archive ou Deep Cold Archive est restauré, une réplique Standard de l'objet est créée pour l'accès. Des frais de stockage temporaire vous sont facturés pour cette réplique au tarif de stockage de la classe de stockage Standard pendant la durée de la période de restauration.

FAQ

Puis-je utiliser une règle de cycle de vie basée sur la dernière date de modification pour convertir la classe de stockage d'un objet d'Infrequent Access vers Standard ?

Non, ce n'est pas possible. Vous pouvez utiliser l'une des méthodes suivantes pour convertir la classe de stockage d'un objet d'IA vers Standard :