Seleziona le tue preferenze relative ai cookie

Utilizziamo cookie essenziali e strumenti simili necessari per fornire il nostro sito e i nostri servizi. Utilizziamo i cookie prestazionali per raccogliere statistiche anonime in modo da poter capire come i clienti utilizzano il nostro sito e apportare miglioramenti. I cookie essenziali non possono essere disattivati, ma puoi fare clic su \"Personalizza\" o \"Rifiuta\" per rifiutare i cookie prestazionali.

Se sei d'accordo, AWS e le terze parti approvate utilizzeranno i cookie anche per fornire utili funzionalità del sito, ricordare le tue preferenze e visualizzare contenuti pertinenti, inclusa la pubblicità pertinente. Per continuare senza accettare questi cookie, fai clic su \"Continua\" o \"Rifiuta\". Per effettuare scelte più dettagliate o saperne di più, fai clic su \"Personalizza\".

Come prevenire la sovrascrittura degli oggetti con le scritture condizionali

Modalità Focus
Come prevenire la sovrascrittura degli oggetti con le scritture condizionali - Amazon Simple Storage Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzando le scritture condizionali, è possibile aggiungere un'ulteriore intestazione alle richieste WRITE per specificare le precondizioni per le operazioni su Amazon S3. Per scrivere oggetti in modo condizionato, aggiungi l'intestazione HTTP If-None-Match o If-Match.

L'intestazione If-None-Match impedisce la sovrascrittura dei dati esistenti, verificando che non vi sia già un oggetto con lo stesso nome di chiave nel bucket.

In alternativa, puoi aggiungere l'If-Matchintestazione per controllare il tag di entità di un oggetto (ETag) prima di scrivere un oggetto. Con questa intestazione, Amazon S3 confronta il valore ETag fornito con il valore ETag dell'oggetto in S3. Se i ETag valori non corrispondono, l'operazione fallisce.

I proprietari dei bucket possono usare le policy di bucket per imporre la scrittura condizionale degli oggetti caricati. Per ulteriori informazioni, consulta Applicazione delle scritture condizionali sui bucket Amazon S3.

Nota

Per utilizzare le scritture condizionali, è necessario effettuare le richieste tramite HTTPS (TLS) o utilizzare AWS Signature Version 4 per firmare la richiesta.

Come impedire la sovrascrittura degli oggetti in base ai nomi delle chiavi

È possibile utilizzare l'intestazione condizionale HTTP If-None-Match per verificare se un oggetto esiste già nel bucket specificato in base al nome della chiave prima di crearlo. Quando si carica un oggetto su Amazon S3, si specifica il nome della chiave: un identificatore univoco, sensibile alle maiuscole, di un oggetto in un bucket. Senza l'intestazione HTTP If-None-Match, se si carica un oggetto con un nome di chiave identico in un bucket non aggiornato o con versione sospesa, l'oggetto viene sovrascritto. In un bucket con controllo delle versioni, l'oggetto caricato più di recente diventa la versione corrente dell'oggetto. Le scritture condizionali con l'intestazione HTTP If-None-Match controllano l'esistenza di un oggetto durante l'operazione WRITE. Se nel bucket viene trovato un nome di chiave identico, l'operazione fallisce. Per ulteriori informazioni sull'uso dei nomi delle chiavi, consulta Denominazione di oggetti Amazon S3.

Per eseguire scritture condizionali con l'intestazione HTTP If-None-Match è necessario disporre dell'autorizzazione s3:PutObject. Ciò consente al chiamante di verificare la presenza di oggetti nel bucket. L'intestazione If-None-Match prevede il valore * (asterisco).

È possibile utilizzare l'If-None-Matchintestazione con quanto segue: APIs

Il seguente comando di esempio put-object tenta di eseguire una scrittura condizionale per un oggetto con il nome della chiave 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 "*"

Per ulteriori informazioni, consulta put-objectnel riferimento ai AWS CLI comandi.

Per informazioni su AWS CLI, vedi What is the AWS Command Line Interface? nella Guida AWS Command Line Interface per l'utente.

Il seguente comando di esempio put-object tenta di eseguire una scrittura condizionale per un oggetto con il nome della chiave 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 "*"

Per ulteriori informazioni, consulta put-objectnel riferimento ai AWS CLI comandi.

Per informazioni su AWS CLI, vedi What is the AWS Command Line Interface? nella Guida AWS Command Line Interface per l'utente.

Come impedire la sovrascrittura se l'oggetto è stato modificato

Un oggetto ETag è una stringa che è unica per l'oggetto e riflette una modifica al contenuto dell'oggetto. Puoi utilizzare l'If-Matchintestazione per confrontare il ETag valore di un oggetto in un bucket Amazon S3 con uno fornito durante l'operazione. WRITE Se i ETag valori non corrispondono, l'operazione fallisce. Per ulteriori informazioni su ETags, vedereUtilizzo di Content- MD5 and the ETag per verificare gli oggetti caricati.

Per eseguire scritture condizionali con l'intestazione HTTP If-Match è necessario disporre delle autorizzazioni s3:PutObject e s3:GetObject. Ciò consente al chiamante di controllare ETag e verificare lo stato degli oggetti nel bucket. L'If-Matchintestazione prevede che il ETag valore sia una stringa.

È possibile utilizzare l'If-Matchintestazione con quanto segue: APIs

Il comando di put-object esempio seguente tenta di eseguire una scrittura condizionale con il ETag valore 6805f2cfc46c0f04559748bb039d69ae fornito.

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

Per ulteriori informazioni, consulta put-objectnel AWS CLI Command Reference.

Per informazioni su AWS CLI, vedi What is the AWS Command Line Interface? nella Guida AWS Command Line Interface per l'utente.

Il comando di put-object esempio seguente tenta di eseguire una scrittura condizionale con il ETag valore 6805f2cfc46c0f04559748bb039d69ae fornito.

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

Per ulteriori informazioni, consulta put-objectnel AWS CLI Command Reference.

Per informazioni su AWS CLI, vedi What is the AWS Command Line Interface? nella Guida AWS Command Line Interface per l'utente.

Comportamento di scrittura condizionale

Scritture condizionali con intestazione If-None-Match

Le scritture condizionali con l'intestazione If-None-Match vengono valutate rispetto agli oggetti esistenti in un bucket. Se non c'è nessun oggetto esistente con lo stesso nome di chiave nel bucket, l'operazione di scrittura ha successo, con una risposta 200 OK. Se c'è un oggetto esistente, l'operazione di scrittura fallisce e la risposta è 412 Precondition Failed.

Per i bucket con controllo delle versioni abilitato, se non esiste una versione corrente dell'oggetto con lo stesso nome o se la versione corrente dell'oggetto è un marcatore di cancellazione, l'operazione di scrittura va a buon fine. Altrimenti, si ottiene un'operazione di scrittura fallita con una risposta 412 Precondition Failed.

Se si verificano più scritture condizionali per lo stesso nome di oggetto, la prima operazione di scrittura che termina ha successo. Amazon S3 quindi non riesce a eseguire le scritture successive con una risposta 412 Precondition Failed.

È inoltre possibile ricevere una risposta 409 Conflict nel caso di richieste concorrenti, se una richiesta di cancellazione di un oggetto ha successo prima che un'operazione di scrittura condizionale su quell'oggetto sia completata. Quando si usano le scritture condizionali con PutObject, i caricamenti possono essere ritentati dopo aver ricevuto un errore 409 Conflict. Quando si usa CompleteMultipartUpload, l'intero caricamento multiparte deve essere riavviato con CreateMultipartUpload per caricare nuovamente l'oggetto dopo aver ricevuto un errore 409 Conflict.

Scritture condizionali con intestazione If-Match

L'intestazione If-Match viene valutata rispetto agli oggetti esistenti in un bucket. Se esiste un oggetto esistente con lo stesso nome di chiave e la stessa corrispondenza ETag, l'operazione di scrittura ha esito positivo e restituisce una 200 OK risposta. Se ETag non corrisponde, l'operazione di scrittura ha esito negativo e viene restituita una 412 Precondition Failed risposta.

È anche possibile ricevere una risposta 409 Conflict in caso di richieste simultanee.

Si riceverà una risposta 404 Not Found se una richiesta di cancellazione concorrente di un oggetto riesce prima che un'operazione di scrittura condizionale su quell'oggetto sia completata, poiché la chiave dell'oggetto non esiste più. È necessario ricaricare l'oggetto quando si riceve una risposta 404 Not Found.

Se non esiste una versione corrente dell'oggetto con lo stesso nome o se la versione corrente dell'oggetto è un marcatore di cancellazione, l'operazione fallisce con un errore 404 Not Found.

Scenari di scrittura condizionati

Si considerino i seguenti scenari in cui due client eseguono operazioni sullo stesso bucket.

Scrittura condizionale durante il caricamento multiparte

Le scritture condizionali non considerano le richieste di caricamento multiparte in corso, poiché non sono ancora oggetti completamente scritti. Si consideri il seguente esempio in cui il client 1 sta caricando un oggetto utilizzando il caricamento multiparte. Durante il caricamento multiparte, il client 2 è in grado di scrivere con successo lo stesso oggetto con l'operazione di scrittura condizionale. Successivamente, quando il client 1 tenta di completare il caricamento multiparte utilizzando una scrittura condizionale, il caricamento non riesce.

Nota

In questo caso si otterrà una risposta 412 Precondition Failed per entrambe le intestazioni If-None-Match e If-Match.

Un esempio di due client che scrivono elementi con lo stesso nome di chiave. Uno con UploadPart MPU e uno con PutObject scrittura condizionale. L' CompleteMultipartUpload operazione, che inizia dopo, fallisce.
Cancellazioni simultanee durante il caricamento di più parti

Se una richiesta di cancellazione riesce prima che una richiesta di scrittura condizionale possa essere completata, Amazon S3 restituisce una risposta 409 Conflict o 404 Not Found per l'operazione di scrittura. Questo perché la richiesta di cancellazione avviata in precedenza ha la precedenza sull'operazione di scrittura condizionale. In questi casi, è necessario avviare un nuovo caricamento multiparte.

Nota

In questo caso si otterrà una risposta 409 Conflict per un'intestazione If-None-Match e una risposta 404 Not Found per un'intestazione If-Match.

Un esempio di due client, uno che utilizza il caricamento multiparte e l'altro che invia una richiesta di cancellazione dopo l'avvio dell'MPU. La richiesta di cancellazione termina prima dell'inizio della scrittura condizionale.
Nota

Per ridurre al minimo i costi di archiviazione, ti consigliamo di configurare una regola del ciclo di vita per eliminare i caricamenti in più parti incompleti dopo un numero di giorni specificato utilizzando l'operazione AbortIncompleteMultipartUpload. Per ulteriori informazioni sulla creazione di una regola del ciclo di vita per eliminare i caricamenti in più parti incompleti, consulta Configurazione del ciclo di vita del bucket per l'eliminazione dei caricamenti in più parti incompleti.

PrivacyCondizioni del sitoPreferenze cookie
© 2025, Amazon Web Services, Inc. o società affiliate. Tutti i diritti riservati.