

# バージョニングが有効なバケットからのオブジェクトバージョンの取得
<a name="RetrievingObjectVersions"></a>

Amazon S3 のバージョニングとは、同じバケット内に、オブジェクトの複数のバリアントを保持する手段のことです。シンプルな `GET` リクエストは、オブジェクトの最新バージョンを取得します。次の図は、`GET` がオブジェクト (`photo.gif`) の最新バージョンを返す方法を示しています。

![\[GET がオブジェクトの最新バージョンを返す方法を説明する図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/versioning_GET_NoVersionID.png)


特定のバージョンを取得するには、そのバージョン ID を指定する必要があります。次の図は、`GET versionId` リクエストがオブジェクトの指定したバージョン (最新とは限らない) を取得する方法を示しています。

![\[GET versionId リクエストがオブジェクトの指定されたバージョンを取得する方法を説明する図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/versioning_GET_Versioned.png)


コンソール、AWS SDK、または REST API を使用して、Amazon S3 にオブジェクトバージョンを取得できます。

**注記**  
 300 バージョンより前のオブジェクトバージョンにアクセスするには、AWS CLI またはオブジェクトの URL を使用する必要があります。

## S3 コンソールの使用
<a name="retrieving-object-versions"></a>

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. [**Buckets**] (バケット) リストで、オブジェクトが含まれるバケットの名前を選択します。

1. **オブジェクト**一覧から、オブジェクトの名前を選択します。

1. [**バージョン**] を選択します。

   Amazon S3 にオブジェクトのバージョンがすべて表示されます。

1. 取得するバージョンの**バージョン ID** の、横のチェックボックスをオンにします。

1. [**アクション**] を選択し、[**ダウンロード**] を選択して、オブジェクトを保存します。

オブジェクトの概要パネルでも、オブジェクトのバージョンの確認、ダウンロード、および削除ができます。詳細については、「[Amazon S3 コンソールでのオブジェクトのプロパティの表示](view-object-properties.md)」を参照してください。

**重要**  
最新 (現在) のバージョンとして削除された場合のみ、オブジェクトを復元できます。削除されたオブジェクトの以前のバージョンを復元することはできません。詳細については、「[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md)」を参照してください。

## AWS SDK の使用
<a name="retrieve-obj-version-sdks"></a>

バージョニングが無効なバケットと有効なバケットにオブジェクトをアップロードする場合の例は、同一です。ただし、バージョニングが有効なバケットには、Amazon S3 がバージョン番号を割り当てます。それ以外の場合、バージョン番号は null になります。

AWS SDKs for Java、.NET、および PHP を使用してオブジェクトをダウンロードする例については、[オブジェクトのダウンロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html)を参照してください。

.NET と Rust のAWS SDK を使用してオブジェクトのバージョンを一覧表示する例については、「[Amazon S3 バケット内のオブジェクトのバージョンを一覧表示する](https://docs.aws.amazon.com/code-library/latest/ug/s3_example_s3_ListObjectVersions_section.html)」を参照してください。

## REST API の使用
<a name="retrieve-obj-version-rest"></a>

**特定のオブジェクトバージョンを取得するには**

1. `versionId` を、取得するオブジェクトのバージョン ID に設定します。

1. `GET Object versionId` リクエストを送信します。

**Example - バージョニングされたオブジェクトの取得**  
次のリクエストは、`L4kqtJlcpXroDTDmpUMLUo` のバージョン `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=
```

オブジェクトの (コンテンツではなく) メタデータのみを取得できます。詳細については、「[オブジェクトバージョンのメタデータの取得](RetMetaOfObjVersion.md)」を参照してください。

以前のオブジェクトバージョンを復元する方法については、「[以前のバージョンの復元](RestoringPreviousVersions.md)」を参照してください。

# オブジェクトバージョンのメタデータの取得
<a name="RetMetaOfObjVersion"></a>

オブジェクトのメタデータのみを取得するには (コンテンツを除く)、`HEAD` オペレーションを使用します。デフォルトでは、最新バージョンのメタデータが取得されます。特定のオブジェクトバージョンのメタデータを取得するには、そのバージョン ID を指定します。

**オブジェクトバージョンのメタデータを取得するには**

1. `versionId` を、メタデータを取得するオブジェクトのバージョン ID に設定します。

1. `HEAD Object versionId` リクエストを送信します。

**Example - バージョニングされたオブジェクトのメタデータの取得**  
次のリクエストは、`my-image.jpg` のバージョン `3HL4kqCxf3vjVBH40Nrjfkd` のメタデータを取得します。  

```
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=
```

以下に、サンプルレスポンスを示します。

```
 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
```

# 以前のバージョンの復元
<a name="RestoringPreviousVersions"></a>

バージョニングを使用すると、オブジェクトの以前のバージョンを取得できます。この機能を実行するには 2 つの方法があります。
+ オブジェクトの以前のバージョンを同じバケットにコピーします。

  コピーされたオブジェクトはそのオブジェクトの最新バージョンになり、すべてのオブジェクトバージョンが維持されます。
+ オブジェクトの最新バージョンを完全に削除します。

  最新のオブジェクトバージョンを削除すると、結果として、以前のバージョンがそのオブジェクトの最新バージョンになります。

すべてのオブジェクトバージョンが維持されるため、オブジェクトの特定のバージョンをバケットにコピーすることにより、以前の任意のバージョンを最新バージョンにすることができます。次の図では、ソースオブジェクト (ID = 111111) が同じバケットにコピーされます。Amazon S3 が新しい ID（88778877）を指定し、それがオブジェクトの最新バージョンになります。したがって、バケットには元のオブジェクトバージョン (111111) とそのコピー (88778877) の両方が存在します。以前のバージョンを取得してからアップロードして最新のバージョンにする方法の詳細については、[バージョニングが有効なバケットからのオブジェクトバージョンの取得](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RetrievingObjectVersions.html)および[オブジェクトのアップロード](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html)を参照してください。

![\[オブジェクトの特定のバージョンを同じバケットにコピーして現在のバージョンにする方法を説明する図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/versioning_COPY2.png)


後続の `GET` が、バージョン 88778877 を取得します。

次の図では、オブジェクトの最新バージョン (121212) を削除して、以前のバージョン (111111) を最新のオブジェクトとして残す方法を示しています。オブジェクトの削除の詳細については、「[1 つのオブジェクトの削除](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html)」を参照してください。

![\[オブジェクトの最新バージョンを削除して、以前のバージョンを最新のオブジェクトとして残す方法を説明する図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/versioning_COPY_delete2.png)


後続の `GET` が、バージョン 111111 を取得します。

**注記**  
オブジェクトバージョンをバッチで復元する場合は、[`CopyObject` オペレーションを使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/batch-ops-copy-object.html)できます。`CopyObject` オペレーションは、マニフェストで指定した各オブジェクトをコピーします。ただし、オブジェクトは、必ずしもマニフェストに表示されている順序と同じ順序でコピーされるとは限らないため、注意してください。バージョン管理されたバケットでは、現在のバージョンまたは以前のバージョンの順序を維持することが重要な場合は、最初に以前のバージョンをすべてコピーする必要があります。次に、最初のジョブが完了したら、後続のジョブで現在のバージョンをコピーします。

## 以前のオブジェクトバージョンを復元する
<a name="restoring-obj-version-version-enabled-bucket-examples"></a>

削除されたオブジェクトを復元する方法の詳細については、AWS re:Post ナレッジセンターで「[バージョニングが有効になっているバケットで削除された Amazon S3 オブジェクトを取得するにはどうすればよいですか?](https://repost.aws/knowledge-center/s3-undelete-configuration)」を参照してください。

### S3 コンソールの使用
<a name="retrieving-object-versions"></a>

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール ([https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)) を開きます。

1. [**Buckets**] (バケット) リストで、オブジェクトが含まれるバケットの名前を選択します。

1. **オブジェクト**一覧から、オブジェクトの名前を選択します。

1. [**バージョン**] を選択します。

   Amazon S3 にオブジェクトのバージョンがすべて表示されます。

1. 取得するバージョンの**バージョン ID** の、横のチェックボックスをオンにします。

1. [**アクション**] を選択し、[**ダウンロード**] を選択して、オブジェクトを保存します。

オブジェクトの概要パネルでも、オブジェクトのバージョンの確認、ダウンロード、および削除ができます。詳細については、「[Amazon S3 コンソールでのオブジェクトのプロパティの表示](view-object-properties.md)」を参照してください。

**重要**  
最新 (現在) のバージョンとして削除された場合のみ、オブジェクトを復元できます。削除されたオブジェクトの以前のバージョンを復元することはできません。詳細については、「[S3 バージョニングによる複数のバージョンのオブジェクトの保持](Versioning.md)」を参照してください。

### AWS SDK の使用
<a name="restoring-obj-version-version-enabled-bucket-sdks"></a>

他の AWS SDK の使用の詳細については、「[AWS デベロッパーセンター](https://aws.amazon.com/code/)」を参照してください。

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

以下の Python コード例は、指定されたロールバックバージョンの後で生成されたすべてのバージョンを削除することによって、バージョン管理されたオブジェクトの以前のバージョンを復元します。

```
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}."
        )
```

------