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-Match
en-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.
Rubriques
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-Match
en-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-object
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-Match
en-tête pour comparer la ETag valeur d'un objet dans un compartiment Amazon S3 avec celle que vous avez fournie pendant l'WRITE
opé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-Match
en-tête attend la ETag valeur sous forme de chaîne.
Vous pouvez utiliser l'If-Match
en-tête avec les éléments suivants APIs :
L'put-object
exemple 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-object
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éponse200 OK
. S’il existe un objet, l’opération d’écriture échoue, ce qui entraîne une réponse412 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 avecPutObject
, les chargements peuvent faire l’objet d’une nouvelle tentative après réception d’une erreur409 Conflict
. Lors de l’utilisation deCompleteMultipartUpload
, le chargement partitionné complet doit être relancé avecCreateMultipartUpload
pour charger à nouveau l’objet après réception d’une erreur409 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 une200 OK
réponse. Si ce ETag n'est pas le cas, l'opération d'écriture échoue avec une412 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éponse404 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
.

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
.

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.