

# Cómo realizar eliminaciones condicionales
<a name="conditional-deletes"></a>

Puede usar las eliminaciones condicionales para evaluar si el objeto existe o no ha cambiado antes de eliminarlo. Puede realizar eliminaciones condicionales mediante las operaciones de la API `DeleteObject` o `DeleteObjects` en los buckets de directorio y de uso general de S3. Para empezar, al realizar una solicitud de eliminación condicional, puede usar el encabezado `HTTP If-Match` con el valor de condición previa `*` para comprobar si el objeto existe o el encabezado `If-Match` con la `ETag` proporcionada para comprobar si el objeto se ha modificado.

Puede aplicar las eliminaciones condicionales por bucket de uso general mediante el bucket de S3 o las políticas de Identity and Access Management (IAM). Para obtener más información, consulte [Aplicación de eliminaciones condicionales en buckets de Amazon S3](conditional-delete-enforce.md). 

**nota**  
Las evaluaciones de eliminación condicional solo se aplican a la versión actual del objeto. 

**Topics**
+ [Cómo comprobar si el objeto se ha modificado antes de eliminarlo](#conditional-deletes-etags)
+ [Cómo comprobar si el objeto existe antes de eliminarlo](#conditional-delete)
+ [Aplicación de eliminaciones condicionales en buckets de Amazon S3](conditional-delete-enforce.md)

## Cómo comprobar si el objeto se ha modificado antes de eliminarlo
<a name="conditional-deletes-etags"></a>

 Con las eliminaciones condicionales, puede proteger la aplicación de las eliminaciones accidentales de objetos. Puede utilizar el encabezado `HTTP If-Match` con el valor `ETag` para comprobar si un objeto se ha modificado. Si el valor `ETag` de un objeto de un bucket de S3 no coincide con la `ETag` que proporcionó durante la operación de eliminación, la operación produce un error. Para eliminar varios objetos de forma condicional mediante la operación `DeleteObjects`, debe proporcionar el valor `ETag` del elemento `ETag` del objeto en el cuerpo de la solicitud de XML. Para obtener más información, consulte [Uso de Content-MD5 y ETag para verificar los objetos cargados](checking-object-integrity-upload.md#checking-object-integrity-etag-and-md5). 

**nota**  
Para realizar eliminaciones condicionales con el encabezado `If-Match` con el valor `ETag`, debe tener los permisos `s3:DeleteObject` y `s3:GetObject`. 

El encabezado `If-Match` con el valor `ETag` se compara con los objetos existentes en un bucket. Si existe un objeto con el mismo nombre de clave y coincidente con `ETag`, las solicitudes de `DeleteObject` se realizan correctamente y devuelve una respuesta `204 No content`. Si `ETag` no coincide, se produce un error en la operación de eliminación con una respuesta `412 Precondition Failed`. Para eliminar varios objetos de forma condicional mediante la operación `DeleteObjects`, puede proporcionar el valor `ETag` en el elemento `ETag` del objeto en el cuerpo de la solicitud de XML. Si la solicitud tiene éxito, la operación `DeleteObjects` responde con un `200 OK` y proporciona el estado de cada objeto en el cuerpo de la respuesta. Si la condición previa se cumple, la respuesta de ese objeto se capturará en el elemento `<Deleted>` del cuerpo de la respuesta. Si la condición previa produce un error, la respuesta de ese objeto se capturará en el elemento `<Error>` del cuerpo de la respuesta.

 También puede recibir una respuesta de error `409 Conflict` en caso de solicitudes simultáneas si una solicitud de `DELETE` o `PUT` a un objeto se realiza correctamente antes de que se complete una operación de eliminación condicional en ese objeto. Recibirá una respuesta `404 Not Found` si una solicitud simultánea de eliminación de un objeto se realiza correctamente antes de que finalice una operación de escritura condicional en ese objeto, porque la clave del objeto ya no existe. 

Puede utilizar el encabezado `If-Match` con el valor `ETag` para las API siguientes:
+ [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)

### Uso de AWS CLI
<a name="conditional-deletes-deleteobject-CLI-etags"></a>

El siguiente comando `delete-object` de ejemplo intenta realizar una eliminación condicional con el valor de ETag proporcionado `6805f2cfc46c0f04559748bb039d69al`.

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

Para obtener más información, 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) en la *Referencia de comandos de la AWS CLI*. 

El siguiente comando `delete-objects` de ejemplo intenta realizar una eliminación condicional con el valor de ETag proporcionado `6805f2cfc46c0f04559748bb039d69al`.

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

Para obtener más información, 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) en la *Referencia de comandos de la AWS CLI*. 

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 

## Cómo comprobar si el objeto existe antes de eliminarlo
<a name="conditional-delete"></a>

 Puede utilizar el encabezado `If-Match` con el valor `*` para comprobar si el objeto existe antes de intentar eliminarlo. El valor `*` significa que la operación solo debe continuar si el objeto existe, independientemente de si se ha modificado o no. 

Los marcadores de eliminación son objetos especiales en los buckets de uso general versionados de S3 que indican que se ha eliminado un objeto. Son marcadores de posición que hacen que el objeto parezca eliminado y, al mismo tiempo, conservan las versiones anteriores. Por lo tanto, cuando se utiliza `If-Match:*` con una API `DeleteObject`, la operación solo se realizará correctamente con `204 No Content` si el objeto existe. Si la versión más reciente del objeto es un marcador de eliminación, el objeto no existe y la API `DeleteObject` producirá un error y devolverá una respuesta `412 Precondition Failed`. Para obtener más información acerca de los marcadores de eliminación, consulte [Trabajar con marcadores de eliminación](DeleteMarker.md).

Para eliminar varios objetos de forma condicional mediante la operación `DeleteObjects`, puede proporcionar `*` en el elemento `ETag` del objeto en el cuerpo de la solicitud de XML. Si la condición previa se cumple, la operación `DeleteObjects` responde con un `200 OK` y proporciona el estado de cada objeto en el cuerpo de la respuesta. Si la condición previa se cumple, la respuesta de ese objeto se capturará en el elemento `<Deleted>` del cuerpo de la respuesta. Si la condición previa produce un error, la respuesta de ese objeto se capturará en el elemento `<Error>` del cuerpo de la respuesta. Si el objeto no existe al evaluar cualquiera de las condiciones previas, S3 rechaza la solicitud y devuelve una respuesta de error `Not Found`. 

**nota**  
 Para realizar eliminaciones condicionales con `If-Match:*`, debe tener permisos `s3:DeleteObject`. 

Puede utilizar el encabezado `If-Match` con el valor `*` para las API siguientes:
+ [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)

### Uso de AWS CLI
<a name="conditional-deleteobject-CLI-etags"></a>

El comando de ejemplo `delete-object` siguiente intenta realizar una eliminación condicional de un objeto con el nombre de clave `my_images.tar.bz2` que tiene un valor de `*` que representa cualquier ETag. 

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

Para obtener más información, 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) en la *Referencia de comandos de la AWS CLI*.

El comando de ejemplo `delete-objects` siguiente intenta realizar una eliminación condicional de un objeto con el nombre de clave `my_images.tar.bz2` que tiene un valor de `*` que representa cualquier ETag. 

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

Para obtener más información, 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) en la *Referencia de comandos de la AWS CLI*.

Para obtener información sobre AWS CLI, consulte [¿Qué es AWS Command Line Interface?](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) en la *Guía del usuario de AWS Command Line Interface*. 