Come eseguire le eliminazioni condizionali
È possibile utilizzare le eliminazioni condizionali per valutare se l’oggetto esiste o è immutato prima di eliminarlo. È possibile eseguire le eliminazioni condizionali utilizzando le operazioni API DeleteObject o DeleteObjects nei bucket di directory e per uso generico S3. Per effettuare una richiesta di eliminazione condizionale, è possibile utilizzare l’intestazione HTTP If-Match con il valore di precondizione * per verificare se l’oggetto esiste o l’intestazione If-Match con il valore fornito ETag per verificare se l’oggetto è stato modificato.
Puoi applicare le eliminazioni condizionali a livello di bucket per uso generico utilizzando i bucket S3 o le policy Identity and Access Management (IAM). Per ulteriori informazioni, consulta Applicazione delle eliminazioni condizionali sui bucket Amazon S3.
Nota
Le valutazioni delle eliminazioni condizionali si applicano solo alla versione corrente dell’oggetto.
Argomenti
Come verificare se l’oggetto è stato modificato prima di eliminarlo
Con le eliminazioni condizionali, è possibile proteggere l’applicazione dall’eliminazione accidentale di oggetti. È possibile utilizzare l’intestazione HTTP If-Match con il valore ETag per verificare se un oggetto è stato modificato. Se il valore ETag di un oggetto in un bucket S3 non corrisponde al valore ETag fornito durante l’operazione di eliminazione, l’operazione non riesce. Per eliminare in modo condizionale più oggetti utilizzando l’operazione DeleteObjects, è necessario fornire il valore ETag nell’elemento ETag dell’oggetto nel corpo della richiesta XML. Per ulteriori informazioni, consulta Utilizzo di Content-MD5 e di ETag per verificare gli oggetti caricati.
Nota
Per eseguire eliminazioni condizionali con l’intestazione If-Match con il valore ETag, è necessario disporre delle autorizzazioni s3:DeleteObject e s3:GetObject.
L’intestazione If-Match con il valore ETag viene valutata rispetto agli oggetti esistenti in un bucket. Se non è presente un oggetto con lo stesso nome di chiave ed ETag corrispondente, la richiesta DeleteObject ha esito positivo e restituisce una risposta 204 No content. Se ETag non corrisponde, l’operazione di eliminazione non riesce con una risposta 412 Precondition Failed. In caso di esito positivo, l’API DeleteObjects risponde con un messaggio 200 OK e fornisce lo stato di ogni oggetto nel corpo della risposta della richiesta di eliminazione in batch. Se le condizioni preliminari per una richiesta DeleteObjects non sono soddisfatte, Amazon S3 elimina gli oggetti e restituisce una risposta di errore di Pre-condition non riuscita.
È inoltre possibile ricevere una risposta di errore 409 Conflict nel caso di richieste concorrenti, se una richiesta DELETE o PUT per un oggetto ha esito positivo prima che un’operazione di eliminazione condizionale sia stata completata su quell’oggetto. 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ù.
È possibile utilizzare l’intestazione If-Match con il valore ETag per le seguenti API:
Il seguente comando di esempio delete-object tenta di eseguire un’eliminazione condizionale per un oggetto con il valore ETag 6805f2cfc46c0f04559748bb039d69al fornito.
aws s3api delete-object --bucketamzn-s3-demo-bucket--key dir-1/my_images.tar.bz2--if-match "6805f2cfc46c0f04559748bb039d69al"
Per ulteriori informazioni, consulta delete-object
Il seguente comando di esempio delete-objects tenta di eseguire un’eliminazione condizionale per un oggetto con il valore ETag 6805f2cfc46c0f04559748bb039d69al fornito.
aws s3api delete-objects --bucketamzn-s3-demo-bucket--delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "6805f2cfc46c0f04559748bb039d69al"}]}'
Per ulteriori informazioni, consulta delete-objects
Per ulteriori informazioni su AWS CLI, consulta Che cos'è la AWS Command Line Interface? nella Guida per l'utente di AWS Command Line Interface.
Come verificare se l’oggetto esiste prima di eliminarlo
È possibile utilizzare l’intestazione If-Match con il valore * per verificare se l’oggetto esiste prima di tentare di eliminarlo. Il valore * indica che l’operazione deve procedere solo se l’oggetto esiste, indipendentemente dal fatto che sia stato modificato o meno.
Gli indicatori di eliminazione sono oggetti speciali contenuti nei bucket per uso generico S3 con controllo delle versioni che indicano che un oggetto è stato eliminato. Sono segnaposto che fanno apparire l’oggetto eliminato, conservando le versioni precedenti. Pertanto, quando si utilizza If-Match:* con un’API DeleteObject, l’operazione avrà esito positivo con 204 No Content solo se l’oggetto esiste. Se l’ultima versione dell’oggetto è un indicatore di eliminazione, l’oggetto non esiste e l’API DeleteObject non riesce e restituisce una risposta 412 Precondition Failed. Per ulteriori informazioni sui contrassegni di eliminazione, consulta Utilizzo dei contrassegni di eliminazione.
Per eliminare in modo condizionale più oggetti utilizzando l’operazione DeleteObjects, è possibile fornire * nell’elemento ETag dell’oggetto nel corpo della richiesta XML. Se la precondizione ha esito positivo, l’operazione DeleteObjects risponde con 200 OK e fornisce lo stato di ogni oggetto nel corpo della risposta. Se la precondizione ha esito positivo, la risposta per l’oggetto verrà acquisita nell’elemento <Deleted> del corpo della risposta. Se la precondizione non riesce, la risposta per l’oggetto verrà acquisita nell’elemento <Error> del corpo della risposta. Se l’oggetto non esiste durante la valutazione delle precondizioni, S3 rifiuta la richiesta e restituisce una risposta di errore Not Found.
Nota
Per eseguire eliminazioni condizionali con If-Match:*, è necessario disporre delle autorizzazioni s3:DeleteObject.
È possibile utilizzare l’intestazione If-Match con il valore * per le seguenti API:
Il comando di esempio delete-object seguente tenta di eseguire un’eliminazione condizionale per un oggetto con il nome della chiave con il valore my_images.tar.bz2* che rappresenta qualsiasi ETag.
aws s3api delete-object --bucketamzn-s3-demo-bucket--key dir-1/my_images.tar.bz2--if-match "*"
Per ulteriori informazioni, consulta delete-object
Il comando di esempio delete-objects seguente tenta di eseguire un’eliminazione condizionale per un oggetto con il nome della chiave con il valore my_images.tar.bz2* che rappresenta qualsiasi ETag.
aws s3api delete-objects --bucketamzn-s3-demo-bucket--delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "*"}]}'
Per ulteriori informazioni, consulta delete-objects
Per ulteriori informazioni su AWS CLI, consulta Che cos'è la AWS Command Line Interface? nella Guida per l'utente di AWS Command Line Interface.