Sélectionner vos préférences de cookies

Nous utilisons des cookies essentiels et des outils similaires qui sont nécessaires au fonctionnement de notre site et à la fourniture de nos services. Nous utilisons des cookies de performance pour collecter des statistiques anonymes afin de comprendre comment les clients utilisent notre site et d’apporter des améliorations. Les cookies essentiels ne peuvent pas être désactivés, mais vous pouvez cliquer sur « Personnaliser » ou « Refuser » pour refuser les cookies de performance.

Si vous êtes d’accord, AWS et les tiers approuvés utiliseront également des cookies pour fournir des fonctionnalités utiles au site, mémoriser vos préférences et afficher du contenu pertinent, y compris des publicités pertinentes. Pour accepter ou refuser tous les cookies non essentiels, cliquez sur « Accepter » ou « Refuser ». Pour effectuer des choix plus détaillés, cliquez sur « Personnaliser ».

Comment empêcher le remplacement d’objets par des écritures conditionnelles

Mode de mise au point
Comment empêcher le remplacement d’objets par des écritures conditionnelles - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Avec les écritures conditionnelles, vous pouvez ajouter un en-tête supplémentaire à vos demandes WRITE afin de spécifier les conditions préalables à une opération Amazon S3. Pour écrire des objets de manière conditionnelle, ajoutez l’en-tête HTTP If-None-Match ou If-Match.

L’en-tête If-None-Match empêche le remplacement de données existantes en validant qu’aucun objet portant le même nom de clé ne se trouve déjà dans votre compartiment.

Vous pouvez également ajouter l'If-Matchen-tête pour vérifier la balise d'entité (ETag) d'un objet avant d'écrire un objet. Avec cet en-tête, Amazon S3 compare la ETag valeur fournie avec la ETag valeur de l'objet dans S3. Si les ETag valeurs ne correspondent pas, l'opération échoue.

Les propriétaires de compartiments peuvent utiliser des politiques de compartiment pour appliquer des écritures conditionnelles aux objets chargés. Pour de plus amples informations, veuillez consulter Application d’écritures conditionnelles sur des compartiments Amazon S3.

Note

Pour utiliser des écritures conditionnelles, vous devez effectuer les demandes via HTTPS (TLS) ou utiliser AWS Signature Version 4 afin de signer la demande.

Comment empêcher le remplacement d’objets en fonction des noms de clé

Avant de créer un objet, vous pouvez utiliser l’en-tête conditionnel HTTP If-None-Match pour vérifier si cet objet existe déjà dans le compartiment spécifié en fonction de son nom de clé. Lorsque vous chargez un objet sur Amazon S3, vous spécifiez le nom de la clé, qui est un identifiant unique, sensible à la casse, d’un objet dans un compartiment. Sans l’en-tête HTTP If-None-Match, si vous chargez un objet avec un nom de clé identique dans un compartiment pour lequel la gestion des versions est suspendue ou n’est pas activée, l’objet sera remplacé. Dans un compartiment pour lequel la gestion des versions est activée, l’objet le plus récemment chargé devient la version actuelle de l’objet. Les écritures conditionnelles avec l’en-tête HTTP If-None-Match vérifient l’existence d’un objet pendant l’opération WRITE. Si un nom de clé identique est trouvé dans le compartiment, l’opération échoue. Pour en savoir plus sur l’utilisation des noms de clé, consultez Attribution d’un nom aux objets Amazon S3.

Pour effectuer des écritures conditionnelles avec l’en-tête HTTP If-None-Match, vous devez avoir l’autorisation s3:PutObject. Cela permet à l’appelant de vérifier la présence d’objets dans le compartiment. L’en-tête If-None-Match s’attend à recevoir la valeur * (astérisque).

Vous pouvez utiliser l'If-None-Matchen-tête avec les éléments suivants APIs :

L’exemple de commande put-object suivant tente d’effectuer une écriture conditionnelle pour un objet portant le nom de clé dir-1/my_images.tar.bz2.

aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-none-match "*"

Pour plus d’informations, consultez .put-objectdans la référence de AWS CLI commande.

Pour plus d'informations sur le AWS CLI, voir Qu'est-ce que le AWS Command Line Interface ? dans le guide de AWS Command Line Interface l'utilisateur.

L’exemple de commande put-object suivant tente d’effectuer une écriture conditionnelle pour un objet portant le nom de clé dir-1/my_images.tar.bz2.

aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-none-match "*"

Pour plus d’informations, consultez .put-objectdans la référence de AWS CLI commande.

Pour plus d'informations sur le AWS CLI, voir Qu'est-ce que le AWS Command Line Interface ? dans le guide de AWS Command Line Interface l'utilisateur.

Comment empêcher les remplacements si l’objet a changé

Un objet ETag est une chaîne unique à l'objet qui reflète une modification du contenu de l'objet. Vous pouvez utiliser l'If-Matchen-tête pour comparer la ETag valeur d'un objet dans un compartiment Amazon S3 avec celle que vous avez fournie pendant l'WRITEopération. Si les ETag valeurs ne correspondent pas, l'opération échoue. Pour plus d'informations sur ETags, voirUtilisation du contenu MD5 et du ETag pour vérifier les objets téléchargés.

Pour effectuer des écritures conditionnelles avec un en-tête HTTP If-Match, vous devez disposer des autorisations s3:PutObject et s3:GetObject. Cela permet à l'appelant de vérifier ETag et de vérifier l'état des objets contenus dans le compartiment. L'If-Matchen-tête attend la ETag valeur sous forme de chaîne.

Vous pouvez utiliser l'If-Matchen-tête avec les éléments suivants APIs :

L'put-objectexemple de commande suivant tente d'effectuer une écriture conditionnelle avec la ETag valeur fournie6805f2cfc46c0f04559748bb039d69ae.

aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69ae"

Pour plus d’informations, consultez .put-objectdans la référence de AWS CLI commande.

Pour plus d'informations sur le AWS CLI, voir Qu'est-ce que le AWS Command Line Interface ? dans le guide de AWS Command Line Interface l'utilisateur.

L'put-objectexemple de commande suivant tente d'effectuer une écriture conditionnelle avec la ETag valeur fournie6805f2cfc46c0f04559748bb039d69ae.

aws s3api put-object --bucket amzn-s3-demo-bucket --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --if-match "6805f2cfc46c0f04559748bb039d69ae"

Pour plus d’informations, consultez .put-objectdans la référence de AWS CLI commande.

Pour plus d'informations sur le AWS CLI, voir Qu'est-ce que le AWS Command Line Interface ? dans le guide de AWS Command Line Interface l'utilisateur.

Comportement des écritures conditionnelles

Écritures conditionnelles avec l’en-tête If-None-Match

Les écritures conditionnelles avec l’en-tête If-None-Match sont évaluées par rapport aux objets existants dans un compartiment. S’il n’existe aucun objet portant le même nom de clé dans le compartiment, l’opération d’écriture réussit, ce qui entraîne une réponse 200 OK. S’il existe un objet, l’opération d’écriture échoue, ce qui entraîne une réponse 412 Precondition Failed.

Pour les compartiments pour lesquels la gestion des versions est activée, s’il n’existe aucune version d’objet portant le même nom, ou si la version actuelle de l’objet est un marqueur de suppression, l’opération d’écriture réussit. Dans le cas contraire, l’opération d’écriture échoue avec une réponse 412 Precondition Failed.

Si plusieurs écritures conditionnelles ont lieu pour le même nom d’objet, la première opération d’écriture à se terminer aboutit. Amazon S3 abandonne alors les écritures suivantes avec une réponse 412 Precondition Failed.

Vous pouvez également recevoir une réponse 409 Conflict en cas de demandes simultanées si une demande de suppression d’un objet aboutit avant la fin d’une opération d’écriture conditionnelle sur cet objet. Lorsque vous utilisez des écritures conditionnelles avec PutObject, les chargements peuvent faire l’objet d’une nouvelle tentative après réception d’une erreur 409 Conflict. Lors de l’utilisation de CompleteMultipartUpload, le chargement partitionné complet doit être relancé avec CreateMultipartUpload pour charger à nouveau l’objet après réception d’une erreur 409 Conflict.

Écritures conditionnelles avec l’en-tête If-Match

L’en-tête If-Match est évalué par rapport aux objets existants dans un compartiment. S'il existe un objet portant le même nom de clé et correspondant ETag, l'opération d'écriture réussit, ce qui entraîne une 200 OK réponse. Si ce ETag n'est pas le cas, l'opération d'écriture échoue avec une 412 Precondition Failed réponse.

Vous pouvez également recevoir une réponse 409 Conflict en cas de demandes simultanées.

Vous recevrez une réponse 404 Not Found si une demande de suppression simultanée d’un objet aboutit avant la fin d’une opération d’écriture conditionnelle sur cet objet, car la clé de l’objet n’existe plus. Lorsque vous recevez une réponse 404 Not Found, vous devez charger à nouveau l’objet.

S’il n’existe aucune version d’objet portant le même nom, ou si la version actuelle de l’objet est un marqueur de suppression, l’opération échoue avec une erreur 404 Not Found.

Scénarios d’écritures conditionnelles

Examinez les scénarios suivants dans lesquels deux clients exécutent des opérations sur le même compartiment.

Écritures conditionnelles lors des chargements partitionnés

Les écritures conditionnelles ne prennent pas en compte les demandes de chargement partitionné en cours, car il ne s’agit pas encore d’objets entièrement écrits. Prenons l’exemple suivant où le client 1 charge un objet à l’aide du chargement partitionné. Pendant le chargement partitionné, le client 2 est en mesure d’écrire avec succès ce même objet grâce à l’opération d’écriture conditionnelle. Par la suite, lorsque le client 1 essaie de finaliser le chargement partitionné à l’aide d’une écriture conditionnelle, le chargement échoue.

Note

Ce scénario entraîne une réponse 412 Precondition Failed à la fois pour les en-têtes en-têtes If-None-Match et If-Match.

Exemple de deux clients écrivant des éléments portant le même nom de clé. Un avec UploadPart pour MPU PutObject et un avec écriture conditionnelle. L' CompleteMultipartUpload opération, qui démarre après, échoue.
Suppressions simultanées lors de chargements partitionnés

Si une demande de suppression aboutit avant qu’une demande d’écriture conditionnelle ne se termine, Amazon S3 renvoie une réponse 409 Conflict ou 404 Not Found pour l’opération d’écriture. Cela est dû au fait que la demande de suppression initiée précédemment a priorité sur l’opération d’écriture conditionnelle. Dans ce cas, vous devrez lancer un nouveau chargement partitionné.

Note

Ce scénario génère une réponse 409 Conflict pour un en-tête If-None-Match et une réponse 404 Not Found pour un en-tête If-Match.

Exemple de deux clients, l’un utilisant le chargement partitionné et l’autre envoyant une demande de suppression après le démarrage du chargement partitionné. La demande de suppression se termine avant le début de l’écriture conditionnelle.
Note

Pour réduire vos coûts de stockage, nous vous recommandons de configurer une règle du cycle de vie pour supprimer les chargements partitionnés incomplets après un certain nombre de jours à l’aide de l’action AbortIncompleteMultipartUpload. Pour plus d’informations sur la création d’une règle de cycle de vie pour supprimer les chargements partitionnés incomplets, consultez Configuration d’une politique de cycle de vie de compartiment pour abandonner les chargements multiparties incomplets.

ConfidentialitéConditions d'utilisation du sitePréférences de cookies
© 2025, Amazon Web Services, Inc. ou ses affiliés. Tous droits réservés.