

# Gerenciamento de marcadores de exclusão
<a name="ManagingDelMarkers"></a>

## Como configurar o ciclo de vida para limpar marcadores de exclusão expirados automaticamente
<a name="LifecycleDelMarker"></a>

Em um marcador de exclusão de objeto expirado, todas as versões de objeto são excluídas e resta apenas um único marcador de exclusão. Se a configuração de ciclo de vida estiver definida para excluir versões atuais ou a ação `ExpiredObjectDeleteMarker` estiver explicitamente definida, o Amazon S3 removerá o marcador de exclusão do objeto expirado. Para ver um exemplo, consulte [Remover marcadores de exclusão de objetos expirados em um bucket com versionamento habilitado](lifecycle-configuration-examples.md#lifecycle-config-conceptual-ex7). 

## Como remover marcadores de exclusão para tornar uma versão mais antiga atual
<a name="RemDelMarker"></a>

Quando você exclui um objeto em um bucket ativado para versionamento, todas as versões permanecem no bucket, e o Amazon S3 cria um marcador de exclusão para o objeto. Para cancelar a exclusão do objeto, você deve excluir esse marcador de exclusão. Para obter mais informações sobre versionamento e marcadores de exclusão, consulte [Reter várias versões de objetos com o Versionamento do S3](Versioning.md).

Para excluir permanentemente um marcador de exclusão, inclua seu respectivo ID de versão em uma solicitação `DeleteObject versionId`. A figura a seguir mostra como uma solicitação `DeleteObject versionId` simples remove, permanentemente, um marcador de exclusão.

![\[Ilustração da exclusão de um marcador de exclusão usando o respectivo ID da versão.\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarkerVersioned.png)


O efeito da remoção do marcador de exclusão é que uma simples solicitação `GET` não recuperará o ID da versão atual do objeto (121212). 

**nota**  
Se você usar uma solicitação `DeleteObject` em que a versão atual seja um marcador de exclusão (sem especificar o ID da versão do marcador de exclusão), o Amazon S3 não excluirá o marcador de exclusão, mas outro marcador de exclusão `PUTs`.

Para excluir um marcador de exclusão com um ID de versão `NULL`, você deve aprovar o `NULL` como o ID da versão na solicitação `DeleteObject`. A figura a seguir mostra como uma simples solicitação `DeleteObject` feita sem um ID de versão em que a versão atual é um marcador de exclusão não remove nada. Em vez disso, ela adiciona um marcador de exclusão extra com um ID de versão exclusivo (7498372).

![\[Ilustração da exclusão de um marcador de exclusão usando um ID de versão NULL.\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/images/versioning_DELETE_deleteMarker.png)


## Usar o console do S3
<a name="undelete-objects"></a>

Use as etapas a seguir para recuperar objetos excluídos que não são pastas do seu bucket do S3, incluindo objetos que estão dentro dessas pastas. 

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon S3 em [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/).

1. Na lista **Buckets**, escolha o nome do bucket desejado.

1. Para ver uma lista das **versões** dos objetos no bucket, escolha a opção **List versions (Listar versões)**. Você conseguirá ver os marcadores de exclusão dos objetos excluídos. 

   

1. Para cancelar a exclusão de um objeto, você deve excluir o marcador de exclusão. Marque a caixa de seleção ao lado do **delete marker (marcador de exclusão)** do objeto a ser recuperado e escolha **Delete (excluir)**.

1. Confirme a exclusão na página **Delete objects (Excluir objetos)**.

   1. Para a opção **Permanently delete objects?** (Excluir objetos permanentemente?), insira **permanently delete**.

   1. Escolha **Delete objects (Excluir objetos)**.

**nota**  
Você não pode usar o console do Amazon S3 para cancelar a exclusão de pastas. Você deve usar a AWS CLI ou o SDK. Para ver exemplos, consulte [Como faço para recuperar um objeto do Amazon S3 que foi excluído em um bucket habilitado para versionamento?](https://aws.amazon.com/premiumsupport/knowledge-center/s3-undelete-configuration/) na Central de Conhecimento da AWS.

## Uso dos REST API
<a name="delete-marker-rest-api"></a>

**Para remover permanentemente um marcador de exclusão**

1. Defina `versionId` como o ID da versão do marcador de exclusão que você deseja remover.

1. Envie uma solicitação `DELETE Object versionId`.

**Example — Remover um marcador de exclusão**  
O exemplo a seguir remove o marcador de exclusão de `photo.gif` com versão 4857693.  

```
1. DELETE /photo.gif?versionId=4857693 HTTP/1.1
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

Quando você exclui um marcador de exclusão, o Amazon S3 inclui o seguinte na resposta:

```
1. 204 NoContent 
2. x-amz-version-id: versionID 
3. x-amz-delete-marker: true
```

## Uso da SDKs AWS
<a name="remove-delete-marker-examples-sdk"></a>

Para obter informações sobre o uso de outros AWS SDKs, consulte o [Centro do Desenvolvedor da AWS](https://aws.amazon.com/code/).

------
#### [ Python ]

O exemplo de código Python a seguir demonstra como remover um marcador de exclusão de um objeto e, portanto, transforma a versão não atual mais recente na versão atual do objeto.

```
def revive_object(bucket, object_key):
    """
    Revives a versioned object that was deleted by removing the object's active
    delete marker.
    A versioned object presents as deleted when its latest version is a delete marker.
    By removing the delete marker, we make the previous version the latest version
    and the object then presents as *not* deleted.

    Usage is shown in the usage_demo_single_object function at the end of this module.

    :param bucket: The bucket that contains the object.
    :param object_key: The object to revive.
    """
    # Get the latest version for the object.
    response = s3.meta.client.list_object_versions(
        Bucket=bucket.name, Prefix=object_key, MaxKeys=1
    )

    if "DeleteMarkers" in response:
        latest_version = response["DeleteMarkers"][0]
        if latest_version["IsLatest"]:
            logger.info(
                "Object %s was indeed deleted on %s. Let's revive it.",
                object_key,
                latest_version["LastModified"],
            )
            obj = bucket.Object(object_key)
            obj.Version(latest_version["VersionId"]).delete()
            logger.info(
                "Revived %s, active version is now %s  with body '%s'",
                object_key,
                obj.version_id,
                obj.get()["Body"].read(),
            )
        else:
            logger.warning(
                "Delete marker is not the latest version for %s!", object_key
            )
    elif "Versions" in response:
        logger.warning("Got an active version for %s, nothing to do.", object_key)
    else:
        logger.error("Couldn't get any version info for %s.", object_key)
```

------