

# Recuperando versões de objeto de um bucket habilitado para versionamento
<a name="RetrievingObjectVersions"></a>

O versionamento no Amazon S3 é uma maneira de manter várias variantes de um objeto no mesmo bucket. Uma solicitação `GET` simples recupera a versão atual de um objeto. A figura a seguir mostra como o `GET` retorna a versão atual do objeto, `photo.gif`.

![\[Ilustração de como GET retorna a versão atual do objeto.\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png)


Para recuperar uma versão específica, você tem que especificar seu ID de versão. A figura a seguir mostra que a solicitação `GET versionId` recupera a versão especificada do objeto (não necessariamente a versão atual).

![\[Ilustração de como a solicitação GET versionId recupera a versão especificada do objeto.\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png)


Você pode recuperar versões de objeto no Amazon S3 usando o console, os AWS SDKs ou a API REST.

**nota**  
 Para acessar versões de objetos anteriores a 300 versões, use a AWS CLI ou o URL do objeto.

## Usar o console do S3
<a name="retrieving-object-versions"></a>

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 que contém o objeto.

1. Na lista **Objetos** , escolha o nome do objeto.

1. Escolha **Versões**.

   O Amazon S3 mostra todas as versões do objeto.

1. Marque a caixa de seleção ao lado **do ID da versão** para as versões que deseja recuperar.

1. Escolha **Ações**, escolha **Download**e salve o objeto.

Você também pode visualizar, fazer download e excluir versões do objeto no painel de visão geral do objeto. Para obter mais informações, consulte [Exibir propriedades do objeto no console do Amazon S3](view-object-properties.md).

**Importante**  
Você pode cancelar a exclusão de um objeto somente se ele foi excluído como a versão mais recente (atual). Não é possível cancelar a exclusão de uma versão anterior de um objeto que foi excluído. Para obter mais informações, consulte [Reter várias versões de objetos com o Versionamento do S3](Versioning.md).

## Uso da SDKs AWS
<a name="retrieve-obj-version-sdks"></a>

Os exemplos para carregar objetos em buckets não versionados e habilitados para versionamento são os mesmos. No entanto, para buckets habilitados para versionamento, o Amazon S3 atribui um número de versão. Caso contrário, o número de versão é nulo.

Para obter exemplos de download de objetos usando AWS SDKs for Java, .NET e PHP, consulte [Download de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html).

Para obter exemplos de como listar a versão de objetos usando AWS SDKs para.NET e Rust, consulte [Listar a versão dos objetos em um bucket do Amazon S3](https://docs.aws.amazon.com/code-library/latest/ug/s3_example_s3_ListObjectVersions_section.html).

## Uso da API REST
<a name="retrieve-obj-version-rest"></a>

**Para recuperar uma versão específica do objeto**

1. Defina `versionId` como o ID da versão do objeto que você deseja recuperar.

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

**Example — Recuperar um objeto versionado**  
A seguinte solicitação recupera a versão `L4kqtJlcpXroDTDmpUMLUo` do `my-image.jpg`.  

```
1. GET /my-image.jpg?versionId=L4kqtJlcpXroDTDmpUMLUo 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=
```

Você pode recuperar apenas os metadados de um objeto (não o conteúdo). Para obter mais informações, consulte [Recuperar metadados de uma versão de objeto](RetMetaOfObjVersion.md).

Para obter informações sobre como restaurar uma versão de objeto anterior, consulte [Restaurar versões anteriores](RestoringPreviousVersions.md).

# Recuperar metadados de uma versão de objeto
<a name="RetMetaOfObjVersion"></a>

Se você quiser recuperar apenas os metadados (e não o conteúdo) de um objeto, use a operação `HEAD`. Por padrão, você obtém os metadados da versão mais recente. Para recuperar os metadados de um objeto específico, você especifica seu ID de versão.

**Para recuperar os metadados de uma versão do objeto**

1. Defina `versionId` como o ID da versão do objeto cujos metadados você deseja recuperar.

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

**Example — Recuperar metadados de um objeto versionado**  
A solicitação a seguir recupera os metadados da versão `3HL4kqCxf3vjVBH40Nrjfkd` de `my-image.jpg`.  

```
1. HEAD /my-image.jpg?versionId=3HL4kqCxf3vjVBH40Nrjfkd 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=
```

A seguir, um exemplo de resposta.

```
 1. HTTP/1.1 200 OK
 2. x-amz-id-2: ef8yU9AS1ed4OpIszj7UDNEHGran
 3. x-amz-request-id: 318BC8BC143432E5
 4. x-amz-version-id: 3HL4kqtJlcpXroDTDmjVBH40Nrjfkd
 5. Date: Wed, 28 Oct 2009 22:32:00 GMT
 6. Last-Modified: Sun, 1 Jan 2006 12:00:00 GMT
 7. ETag: "fba9dede5f27731c9771645a39863328"
 8. Content-Length: 434234
 9. Content-Type: text/plain
10. Connection: close
11. Server: AmazonS3
```

# Restaurar versões anteriores
<a name="RestoringPreviousVersions"></a>

Você pode usar o versionamento para recuperar versões anteriores de um objeto. Existem duas abordagens para se fazer isso:
+ Copie uma versão anterior do objeto para o mesmo bucket.

  O objeto copiado torna-se a versão atual desse objeto e todas as versões são preservadas.
+ Exclua permanentemente a versão atual do objeto.

  Quando você exclui a versão atual do objeto, torna a versão anterior a versão atual desse objeto.

Como todas as versões do objeto são preservadas, você pode fazer de qualquer versão anterior a versão atual copiando uma versão específica do objeto para o mesmo bucket. Na figura a seguir, o objeto de origem (ID = 111111) é copiado para o mesmo bucket. O Amazon S3 fornece um novo ID (88778877) e ele se torna a versão atual do objeto. Assim, o bucket tem tanto a versão original (111111) quanto a cópia (88778877) do objeto. Para obter mais informações sobre como obter uma versão anterior e carregá-la para torná-la a versão atual, consulte [Recuperação de versões de objeto de um bucket habilitado para versionamento](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RetrievingObjectVersions.html) e [Upload de objetos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html).

![\[Ilustração da cópia de uma versão específica de um objeto no mesmo bucket para torná-la a versão atual.\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/images/versioning_COPY2.png)


Um subsequente `GET` recupera a versão 88778877.

A figura a seguir mostra como excluir a versão atual (121212) de um objeto deixa a versão anterior (111111) como a atual do objeto. Para obter mais informações sobre como excluir um objeto, consulte [Excluir um único objeto](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html).

![\[Ilustração que mostra que a exclusão da versão atual de um objeto torna a versão anterior a atual.\]](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/userguide/images/versioning_COPY_delete2.png)


Um subsequente `GET` recupera a versão 111111.

**nota**  
Para restaurar versões de objetos em lotes, [use a operação `CopyObject`](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html). A operação `CopyObject` copia cada objeto especificado no manifesto. No entanto, esteja ciente de que os objetos não são necessariamente copiados na mesma ordem em que estão listados no manifesto. Para buckets versionados, se preservar a ordem de versão atual/não atual for importante, você deve copiar todas as versões não atuais primeiro. Em seguida, após a conclusão do primeiro trabalho, copie as versões atuais em um trabalho subsequente.

## Para restaurar versões anteriores de objetos
<a name="restoring-obj-version-version-enabled-bucket-examples"></a>

Para ter mais informações sobre como restaurar objetos, consulte [How can I retrieve an Amazon S3 object that was deleted in a versioning-enabled bucket?](https://repost.aws/knowledge-center/s3-undelete-configuration) no Centro de Conhecimento do AWS re:Post.

### Usar o console do S3
<a name="retrieving-object-versions"></a>

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 que contém o objeto.

1. Na lista **Objetos** , escolha o nome do objeto.

1. Escolha **Versões**.

   O Amazon S3 mostra todas as versões do objeto.

1. Marque a caixa de seleção ao lado **do ID da versão** para as versões que deseja recuperar.

1. Escolha **Ações**, escolha **Download**e salve o objeto.

Você também pode visualizar, fazer download e excluir versões do objeto no painel de visão geral do objeto. Para obter mais informações, consulte [Exibir propriedades do objeto no console do Amazon S3](view-object-properties.md).

**Importante**  
Você pode cancelar a exclusão de um objeto somente se ele foi excluído como a versão mais recente (atual). Não é possível cancelar a exclusão de uma versão anterior de um objeto que foi excluído. Para obter mais informações, consulte [Reter várias versões de objetos com o Versionamento do S3](Versioning.md).

### Uso da SDKs AWS
<a name="restoring-obj-version-version-enabled-bucket-sdks"></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 restaura a versão anterior de um objeto versionado excluindo todas as versões criadas após a versão de reversão especificada.

```
def rollback_object(bucket, object_key, version_id):
    """
    Rolls back an object to an earlier version by deleting all versions that
    occurred after the specified rollback version.

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

    :param bucket: The bucket that holds the object to roll back.
    :param object_key: The object to roll back.
    :param version_id: The version ID to roll back to.
    """
    # Versions must be sorted by last_modified date because delete markers are
    # at the end of the list even when they are interspersed in time.
    versions = sorted(
        bucket.object_versions.filter(Prefix=object_key),
        key=attrgetter("last_modified"),
        reverse=True,
    )

    logger.debug(
        "Got versions:\n%s",
        "\n".join(
            [
                f"\t{version.version_id}, last modified {version.last_modified}"
                for version in versions
            ]
        ),
    )

    if version_id in [ver.version_id for ver in versions]:
        print(f"Rolling back to version {version_id}")
        for version in versions:
            if version.version_id != version_id:
                version.delete()
                print(f"Deleted version {version.version_id}")
            else:
                break

        print(f"Active version is now {bucket.Object(object_key).version_id}")
    else:
        raise KeyError(
            f"{version_id} was not found in the list of versions for " f"{object_key}."
        )
```

------