

# Como executar exclusões condicionais
<a name="conditional-deletes"></a>

É possível usar as exclusões condicionais para avaliar se o objeto existe ou não foi alterado antes de excluí-lo. Você pode realizar exclusões condicionais usando as operações de API `DeleteObject` ou `DeleteObjects` em buckets de diretório e de uso geral do S3. Para começar, ao fazer uma solicitação de exclusão condicional, você pode usar o cabeçalho `HTTP If-Match` com o valor da pré-condição `*` para verificar se o objeto existe ou o cabeçalho `If-Match` com a `ETag` fornecida para verificar se o objeto foi modificado.

É possível aplicar exclusões condicionais em nível de bucket de uso geral usando as políticas de bucket do S3 ou do Identity and Access Management (IAM). Para obter mais informações, consulte [Impor exclusões condicionais em buckets do Amazon S3](conditional-delete-enforce.md). 

**nota**  
As avaliações de exclusão condicional só se aplicam à versão atual do objeto. 

**Topics**
+ [Como verificar se o objeto foi modificado antes de excluí-lo](#conditional-deletes-etags)
+ [Como verificar se o objeto existe antes de excluí-lo](#conditional-delete)
+ [Impor exclusões condicionais em buckets do Amazon S3](conditional-delete-enforce.md)

## Como verificar se o objeto foi modificado antes de excluí-lo
<a name="conditional-deletes-etags"></a>

 Com as exclusões condicionais, você pode proteger sua aplicação contra exclusões acidentais de objetos. Você pode usar o cabeçalho `HTTP If-Match` com o valor `ETag` para verificar se um objeto foi modificado. Se o valor `ETag` de um objeto em um bucket do S3 não corresponder à `ETag` que você fornece durante a operação de exclusão, a operação falhará. Para excluir condicionalmente vários objetos usando a operação `DeleteObjects`, você deve fornecer o valor `ETag` no elemento `ETag` do objeto no corpo da solicitação XML. Para obter mais informações, consulte [Usar Content-MD5 e a ETag para verificar objetos carregados](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5). 

**nota**  
Para realizar exclusões condicionais com o cabeçalho `If-Match` com o valor `ETag`, você deve ter as permissões `s3:DeleteObject` e `s3:GetObject`. 

O cabeçalho `If-Match` com o valor `ETag` é avaliado em relação aos objetos existentes em um bucket. Se já houver um objeto com o mesmo nome de chave e a `ETag` correspondente, as solicitações `DeleteObject` terão êxito e exibirão a resposta `204 No content`. Se não houver correspondência com a `ETag`, a operação de gravação falhará, exibindo a resposta `412 Precondition Failed`. Para excluir condicionalmente vários objetos usando a operação `DeleteObjects`, você pode fornecer o valor `ETag` no elemento `ETag` do objeto no corpo da solicitação XML. Se a solicitação tiver êxito, a operação `DeleteObjects` responderá com um `200 OK` e fornecerá o status de cada objeto no corpo da resposta. Se a pré-condição for satisfeita, a resposta desse objeto será capturada no elemento `<Deleted>` do corpo da resposta. Se a pré-condição não for satisfeita, a resposta desse objeto será capturada no elemento `<Error>` do corpo da resposta.

 Também é possível receber uma resposta de erro `409 Conflict` no caso de solicitações simultâneas se uma solicitação `DELETE` ou `PUT` de um objeto tiver êxito antes que uma operação de gravação condicional nesse objeto seja concluída. Você receberá uma resposta `404 Not Found` se uma solicitação simultânea de exclusão de um objeto for bem-sucedida antes que uma operação de gravação condicional nesse objeto seja concluída, já que a chave do objeto não existe mais. 

Você pode usar o cabeçalho `If-Match` com o valor `ETag` para as seguintes APIs:
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### Como usar o AWS CLI
<a name="conditional-deletes-deleteobject-CLI-etags"></a>

O exemplo de comando `delete-object` a seguir tenta realizar uma exclusão condicional com o valor de ETag `6805f2cfc46c0f04559748bb039d69al` fornecido.

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

Para ter mais informações, consulte [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) na *Referência de comandos da AWS CLI*. 

O exemplo de comando `delete-objects` a seguir tenta realizar uma exclusão condicional com o valor de ETag `6805f2cfc46c0f04559748bb039d69al` fornecido.

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

Para ter mais informações, consulte [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) na *Referência de comandos da AWS CLI*. 

Para obter informações sobre o AWS CLI, consulte [O que é AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) no *Guia do usuário do AWS Command Line Interface*. 

## Como verificar se o objeto existe antes de excluí-lo
<a name="conditional-delete"></a>

 Você pode usar o cabeçalho `If-Match` com o valor `*` para verificar se o objeto existe antes de tentar excluí-lo. O valor `*` significa que a operação só deve continuar se o objeto existir, independentemente de ter sido modificado ou não. 

Os marcadores de exclusão são objetos especiais em buckets de uso geral versionados do S3 que indicam que um objeto foi excluído. Eles são espaços reservados que fazem o objeto parecer excluído, preservando as versões anteriores. Portanto, quando você usar `If-Match:*` com uma API `DeleteObject`, a operação só terá êxito com um `204 No Content` se o objeto existir. Quando a versão mais recente do objeto é um marcador de exclusão, o objeto não existe e a API `DeleteObject` falha, exibindo a resposta `412 Precondition Failed`. Para obter mais informações sobre marcadores de exclusão, consulte [Trabalhar com marcadores de exclusão](DeleteMarker.md).

Para excluir condicionalmente vários objetos usando a operação `DeleteObjects`, você pode fornecer `*` no elemento `ETag` do objeto no corpo da solicitação XML. Se a pré-condição for satisfeita, a operação `DeleteObjects` responderá com um `200 OK` e fornecerá o status de cada objeto no corpo da resposta. Se a pré-condição for satisfeita, a resposta desse objeto será capturada no elemento `<Deleted>` do corpo da resposta. Se a pré-condição não for satisfeita, a resposta desse objeto será capturada no elemento `<Error>` do corpo da resposta. Se o objeto não existir ao avaliar qualquer uma das pré-condições, o S3 rejeitará a solicitação e exibirá a resposta de erro `Not Found`. 

**nota**  
 Para realizar exclusões condicionais com `If-Match:*`, você deve ter permissões `s3:DeleteObject`. 

Você pode usar o cabeçalho `If-Match` com o valor `*` para as seguintes APIs:
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)

### Como usar o AWS CLI
<a name="conditional-deleteobject-CLI-etags"></a>

O exemplo de comando `delete-object` a seguir tenta executar uma exclusão condicional de um objeto com um nome de chave `my_images.tar.bz2` que tem o valor `*`, que representa qualquer ETag. 

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

Para ter mais informações, consulte [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-object.html) na *Referência de comandos da AWS CLI*.

O exemplo de comando `delete-objects` a seguir tenta executar uma exclusão condicional de um objeto com um nome de chave `my_images.tar.bz2` que tem o valor `*`, que representa qualquer ETag. 

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

Para ter mais informações, consulte [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/delete-objects.html) na *Referência de comandos da AWS CLI*.

Para obter informações sobre o AWS CLI, consulte [O que é AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) no *Guia do usuário do AWS Command Line Interface*. 