Come eseguire eliminazioni 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à.

Come eseguire eliminazioni condizionali

È possibile utilizzare le eliminazioni condizionali per valutare se l'oggetto esiste o è immutato prima di eliminarlo. Puoi eseguire eliminazioni condizionali utilizzando le operazioni DeleteObject o DeleteObjects API nei bucket di directory e di uso generico di S3. Per iniziare, quando si effettua una richiesta di eliminazione condizionale, è possibile utilizzare l'HTTP If-Matchintestazione con il valore di precondizione * per verificare se l'oggetto esiste o l'If-Matchintestazione con il valore fornito ETag per verificare se l'oggetto è stato modificato.

Puoi applicare le eliminazioni condizionali a livello di bucket per scopi generici utilizzando il bucket S3 o le policy di Identity and Access Management (IAM). Per ulteriori informazioni, consulta Applica le eliminazioni condizionali sui bucket Amazon S3.

Nota

Le valutazioni di eliminazione condizionale si applicano solo alla versione corrente dell'oggetto.

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'HTTP If-Matchintestazione con il ETag valore per verificare se un oggetto è stato modificato. Se il ETag valore di un oggetto in un bucket S3 non corrisponde a ETag quello fornito durante l'operazione di eliminazione, l'operazione fallisce. Per eliminare in modo condizionale più oggetti utilizzando l'DeleteObjectsoperazione, è necessario fornire il ETag valore nell'ETagelemento dell'oggetto nel corpo della richiesta XML. Per ulteriori informazioni, consulta Utilizzo di Content- MD5 and the ETag per verificare gli oggetti caricati.

Nota

Per eseguire eliminazioni condizionali con l'If-Matchintestazione con il ETag valore, è necessario disporre delle autorizzazioni and. s3:DeleteObject s3:GetObject

L'If-Matchintestazione con il ETag valore viene valutata in base agli oggetti esistenti in un bucket. Se esiste un oggetto esistente con lo stesso nome di chiave e la stessa corrispondenzaETag, la DeleteObject richiesta ha esito positivo e restituisce una risposta. 204 No content Se ETag non corrisponde, l'operazione di eliminazione ha esito negativo e viene generata una 412 Precondition Failed risposta. In caso di successo, l'DeleteObjectsAPI 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 DeleteObjects richiesta non sono soddisfatte, Amazon S3 elimina gli oggetti e restituisce Pre-condition una risposta di errore non riuscita.

Puoi anche ricevere una risposta di 409 Conflict errore in caso di richieste simultanee se una PUT richiesta DELETE or a un oggetto ha esito positivo prima del completamento di un'operazione di eliminazione condizionale 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'If-Matchintestazione con il valore per quanto segueETag: APIs

Il comando di delete-object esempio seguente tenta di eseguire un'eliminazione condizionale con il ETag valore 6805f2cfc46c0f04559748bb039d69al fornito.

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

Per ulteriori informazioni, consulta la sezione delete-object nella Documentazione di riferimento della AWS CLI .

Il comando di delete-objects esempio seguente tenta di eseguire un'eliminazione condizionale con il valore fornito ETag . 6805f2cfc46c0f04559748bb039d69al

aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "6805f2cfc46c0f04559748bb039d69al"}]}'

Per ulteriori informazioni, consulta la sezione delete-objects nella Documentazione di riferimento della AWS CLI .

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

Come verificare se l'oggetto esiste prima di eliminarlo

È possibile utilizzare l'If-Matchintestazione 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.

I marker di eliminazione sono oggetti speciali contenuti nei bucket generici S3 con versione aggiornata che indicano che un oggetto è stato eliminato. Sono segnaposto che fanno apparire l'oggetto eliminato preservando le versioni precedenti. Pertanto, quando si utilizza If-Match:* con un'DeleteObjectAPI, l'operazione avrà esito positivo solo con a 204 No Content se l'oggetto esiste. Se l'ultima versione dell'oggetto è un marker di eliminazione, l'oggetto non esiste e l'DeleteObjectAPI avrà esito negativo e restituirà una 412 Precondition Failed risposta. Per ulteriori informazioni sui contrassegni di eliminazione, consulta Utilizzo dei contrassegni di eliminazione.

Per eliminare in modo condizionale più oggetti utilizzando l'DeleteObjectsoperazione, è possibile fornire l'ETagelemento * in nell'oggetto nel corpo della richiesta XML. Se la precondizione ha esito positivo, l'DeleteObjectsoperazione risponde con a 200 OK e fornisce lo stato di ogni oggetto nel corpo della risposta. Se la precondizione ha esito positivo, la risposta per quell'oggetto verrà acquisita nell'<Deleted>elemento del corpo della risposta. Se la precondizione fallisce, la risposta per quell'oggetto verrà catturata nell'<Error>elemento del corpo della risposta. Se l'oggetto non esiste durante la valutazione di nessuna delle precondizioni, S3 rifiuta la richiesta e restituisce una risposta di errore. Not Found

Nota

Per eseguire eliminazioni condizionali conIf-Match:*, devi disporre delle autorizzazioni. s3:DeleteObject

È possibile utilizzare l'If-Matchintestazione con il * valore per quanto segue: APIs

Il comando di delete-object esempio seguente tenta di eseguire un'eliminazione condizionale per un oggetto il cui nome my_images.tar.bz2 chiave ha un valore * che rappresenta qualsiasi ETag.

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

Per ulteriori informazioni, consulta la sezione delete-object nella Documentazione di riferimento della AWS CLI .

Il comando di delete-objects esempio seguente tenta di eseguire un'eliminazione condizionale per un oggetto il cui nome my_images.tar.bz2 chiave ha un valore * che rappresenta qualsiasi. ETag

aws s3api delete-objects --bucket amzn-s3-demo-bucket --delete '{"Objects":[{"Key":"my_images.tar.bz2", "ETag": "*"}]}'

Per ulteriori informazioni, consulta la sezione delete-objects nella Documentazione di riferimento della AWS CLI .

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