Changement de nom des objets de compartiments de répertoires - Amazon Simple Storage Service

Changement de nom des objets de compartiments de répertoires

À l’aide de l’opération RenameObject, vous pouvez renommer de manière atomique un objet d’un compartiment de répertoires qui utilise la classe de stockage S3 Express One Zone, sans aucun déplacement de données. Vous pouvez renommer un objet en spécifiant son nom initial comme source et son nouveau nom comme destination dans le même compartiment de répertoires. L’opération d’API RenameObject échoue sur les objets qui se terminent par une barre oblique (/). Pour plus d’informations, consultez Attribution d’un nom aux objets Amazon S3.

L’opération RenameObject est exécutée généralement en quelques millisecondes, quelle que soit la taille de l’objet. Cette fonctionnalité accélère les applications telles que la gestion des fichiers journaux, le traitement multimédia et l’analytique des données. En outre, RenameObject préserve toutes les propriétés des métadonnées des objets, notamment la classe de stockage, le type de chiffrement, la date de création, la date de dernière modification et les propriétés des sommes de contrôle.

Note

RenameObject n’est pris en charge que pour les objets stockés dans la classe de stockage S3 Express One Zone.

Pour autoriser l’accès à l’opération RenameObject, nous vous recommandons d’utiliser l’opération CreateSession pour accorder une autorisation basée sur la session. Plus précisément, vous accordez l’autorisation s3express:CreateSession au compartiment de répertoires dans le cadre d’une stratégie de compartiment ou d’une politique basée sur l’identité. Ensuite, vous effectuez l’appel d’API CreateSession sur le compartiment de répertoires pour obtenir un jeton de session. Avec le jeton de session dans l’en-tête de votre demande, vous pouvez envoyer des demandes d’API à cette opération. À l’expiration du jeton de session, vous effectuez un nouvel appel d’API CreateSession pour générer un nouveau jeton de session à utiliser. L’interface de ligne de commande AWS et les kits AWS SDK créeront et géreront votre session. Notamment, ils actualiseront automatiquement le jeton de session afin d’éviter les interruptions de service à l’expiration de la session. Pour plus d’information sur l’autorisation, consultez CreateSession dans la Référence des API Amazon S3. Pour plus d’informations sur les opérations d’API de point de terminaison zonal, consultez Autorisation des opérations d’API de point de terminaison zonal avec CreateSession.

Si vous ne souhaitez pas remplacer un objet existant, vous pouvez ajouter l’en-tête conditionnel If-None-Match avec la valeur ‘*’ dans la demande RenameObject. Amazon S3 renvoie une erreur 412 Precondition Failed si le nom de l’objet existe déjà. Pour plus d’informations, consultez RenameObject dans la Référence des API Amazon S3.

RenameObject est une opération d’API de point de terminaison zonal (niveau de l’objet ou plan de données) qui est journalisée dans AWS CloudTrail. Vous pouvez utiliser CloudTrail pour recueillir des informations sur l’opération RenameObject effectuée sur les objets de vos compartiments de répertoires. Pour plus d’informations, consultez Journalisation des compartiments de répertoires avec AWS CloudTrail et Exemples de fichiers journaux CloudTrail pour les compartiments de répertoires.

S3 Express One Zone est la seule classe de stockage qui prend en charge RenameObject, au même prix que les demandes PUT, COPY, POST et LIST (pour 1 000 demandes) dans S3 Express One Zone. Pour plus d’informations, consultez Tarification Amazon S3.

Changement de nom d’un objet

Pour renommer un objet de votre compartiment de répertoires, vous pouvez utiliser la console Amazon S3, l’interface de ligne de commande AWS, les kits AWS SDK, l’API REST ou Mountpoint pour Amazon S3 (version 1.19.0 ou supérieure).

Pour renommer un objet d’un compartiment de répertoires
  1. Connectez-vous à la AWS Management Console et ouvrez la console Amazon S3 à l’adresse https://console.aws.amazon.com/s3/.

  2. Dans le volet de navigation, choisissez Compartiments, puis l’onglet Compartiments de répertoires. Accédez au compartiment de répertoires Amazon S3 contenant l’objet que vous souhaitez renommer.

  3. Cochez la case située à côté de l’objet que vous voulez renommer.

  4. Dans le menu Actions, sélectionnez Renommer l’objet.

  5. Dans la zone Nouveau nom d’objet, saisissez le nouveau nom de l’objet.

    Note

    Si vous spécifiez le nom d’un objet existant, l’opération échoue et Amazon S3 renvoie le message d’erreur 412 Precondition Failed. La longueur du nom de la clé de l’objet ne peut pas dépasser 1 024 octets. Les préfixes inclus dans le nom de l’objet sont pris en compte dans la longueur totale.

  6. Choisissez Renommer l’objet. Amazon S3 renommera votre objet.

Les exemples rename-object montrent comment utiliser l’interface de ligne de commande AWS pour renommer un objet. Pour exécuter ces commandes, remplacez les espaces réservés à la saisie utilisateur par vos propres informations.

L’exemple suivant montre comment renommer un objet avec une vérification conditionnelle de la balise d’entité de l’objet source.

aws s3api rename-object \ --bucket amzn-s3-demo-bucket--usw2-az1--x-s3 \ --key new-file.txt \ --rename-source original-file.txt \ --source-if-match "\"a1b7c3d2e5f6\""

Cette commande exécute les opérations suivantes :

  • Renomme l’objet original-file.txt en new-file.txt dans le compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3.

  • N’effectue le changement de nom que si la balise d’entité de l’objet source correspond à « a1b7c3d4e5f6 ».

Si elle ne correspond pas, l’opération échoue et renvoie la réponse 412 Precondition Failed.

L’exemple suivant montre comment renommer un objet avec une vérification conditionnelle du nouveau nom d’objet spécifié.

aws s3api rename-object \ --bucket amzn-s3-demo-bucket--usw2-az1--x-s3 \ --key new-file.txt \ --rename-source amzn-s3-demo-bucket--usw2-az1--x-s3/original-file.txt \ --destination-if-none-match "\"e5f3g7h8i9j0\""

Cette commande exécute les opérations suivantes :

  • Renomme l’objet original-file.txt en new-file.txt dans le compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3.

  • N’effectue le changement de nom que si l’objet existe et que sa balise d’entité ne correspond pas à « e5f3g7h8i9j0 ».

Si un objet existe déjà avec le nouveau nom spécifié et que balise d’entité correspond, l’opération échoue et renvoie l’erreur 412 Precondition Failed.

SDK for Java

Vous pouvez utiliser le kit AWS SDK pour Java pour renommer vos objets. Pour utiliser ces exemples, remplacez les espaces réservés à la saisie utilisateur par vos propres informations.

L’exemple suivant montre comment créer une RenameObjectRequest à l’aide du kit AWS SDK pour Java.

String key = "key"; String newKey = "new-key"; String expectedETag = "e5f3g7h8i9j0"; RenameObjectRequest renameRequest = RenameObjectRequest.builder() .bucket(amzn-s3-demo-bucket--usw2-az1--x-s3) .key(newKey) .renameSource(key) .destinationIfMatch(e5f3g7h8i9j0) .build();

Ce code effectue les opérations suivantes :

  • Créer une demande pour renommer l’objet « key » en « new-key » dans le compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3.

  • Inclure une condition selon laquelle le changement de nom n’a lieu que si la balise d’entité de l’objet correspond à « e5f3g7h8i9j0 ».

  • Si la balise d’entité ne correspond pas ou si l’objet n’existe pas, l’opération échoue.

L’exemple suivant montre comment créer une RenameObjectRequest avec une condition de non-correspondance à l’aide du kit AWS SDK pour Java.

String key = "key"; String newKey = "new-key"; String noneMatchETag = "e5f3g7h8i9j0"; RenameObjectRequest renameRequest = RenameObjectRequest.builder() .bucket(amzn-s3-demo-bucket--usw2-az1--x-s3) .key(newKey) .renameSource(key) .destinationIfNoneMatch(noneMatchETag) .build();

Ce code effectue les opérations suivantes :

  • Créer une demande pour renommer l’objet « key » en « new-key » dans le compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3.

  • Inclure une condition garantissant que .destinationIfNoneMatch(noneMatchETag) n’effectue le changement de nom que si la balise d’entité de l’objet correspond à « e5f3g7h8i9j0 ».

L’opération échoue et renvoie l’erreur 412 Precondition Failed si un objet porte déjà le nouveau nom spécifié et possède la balise d’entité spécifiée.

SDK for Python

Vous pouvez utiliser le kit SDK pour Python pour renommer vos objets. Pour utiliser ces exemples, remplacez les espaces réservés à la saisie utilisateur par vos propres informations.

L’exemple suivant montre comment renommer un objet à l’aide du kit AWS SDK for Python (Boto3).

def basic_rename(bucket, source_key, destination_key): try: s3.rename_object( Bucket=amzn-s3-demo-bucket--usw2-az1--x-s3, Key=destination_key, RenameSource=f"{source_key}" ) print(f"Successfully renamed {source_key} to {destination_key}") except ClientError as e: print(f"Error renaming object: {e}")

Ce code effectue les opérations suivantes :

  • Renommer l’objet source_key en destination_key dans le compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3.

  • Imprimer un message de réussite si le changement de nom de votre objet aboutit ou un message d’erreur s’il échoue.

L’exemple suivant montre comment renommer un objet avec les conditions SourceIfMatch et DestinationIfNoneMatch à l’aide du kit AWS SDK pour Python (Boto3).

def rename_with_conditions(bucket, source_key, destination_key, source_etag, dest_etag): try: s3.rename_object( Bucket=amzn-s3-demo-bucket--usw2-az1--x-s3, Key=destination_key, RenameSource=f"{amzn-s3-demo-bucket--usw2-az1--x-s3}/{source_key}", SourceIfMatch=source_ETag, DestinationIfNoneMatch=dest_ETag ) print(f"Successfully renamed {source_key} to {destination_key} with conditions") except ClientError as e: print(f"Error renaming object: {e}")

Ce code effectue les opérations suivantes :

  • Effectuer une opération de changement de nom conditionnel et appliquer deux conditions, SourceIfMatch et DestinationIfNoneMatch. La combinaison de ces conditions garantit que l’objet n’a pas été modifié et qu’aucun objet n’existe déjà avec le nouveau nom spécifié.

  • Renommer l’objet source_key en destination_key dans le compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3.

  • Imprimer un message de réussite si le changement de nom de votre objet aboutit ou un message d’erreur s’il échoue ou si les conditions ne sont pas remplies.

SDK for Rust

Vous pouvez utiliser le kit SDK pour Rust pour renommer vos objets. Pour utiliser ces exemples, remplacez les espaces réservés à la saisie utilisateur par vos propres informations.

L’exemple suivant montre comment renommer un objet du compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3 à l’aide du kit SDK pour Rust.

async fn basic_rename_example(client: &Client) -> Result<(), Box<dyn Error>> { let response = client .rename_object() .bucket(" amzn-s3-demo-bucket--usw2-az1--x-s3") .key("new-name.txt") // New name/path for the object .rename_source("old-name.txt") // Original object name/path .send() .await?; Ok(()) }

Ce code effectue les opérations suivantes :

  • Créer une demande pour renommer l’objet « old-name.txt » en « new-name.txt » dans le compartiment de répertoires amzn-s3-demo-bucket--usw2-az1--x-s3.

  • Renvoyer un type Result pour gérer les erreurs potentielles.

Vous pouvez envoyer des demandes REST pour renommer un objet. Pour plus d’informations, consultez RenameObject dans la Référence des API Amazon S3.

À partir de la version 1.19.0 ou supérieure, Mountpoint pour Amazon S3 prend en charge le changement de nom des objets dans S3 Express One Zone. Pour plus d’informations sur Mountpoint, consultez Utilisation de Mountpoint.