

# バージョニングが有効なバケットでのオブジェクトのリスト取得
<a name="list-obj-version-enabled-bucket"></a>

このセクションでは、バージョニングが有効なバケットの、オブジェクトバージョンをリスト化する例を説明します。Amazon S3 では、オブジェクトのバージョン情報は、バケットに関連付けられている*バージョン*のサブリソースに保存されます。詳細については、「[汎用バケットの設定オプション](UsingBucket.md#bucket-config-options-intro)」を参照してください。バージョニングが有効なバケット内のオブジェクトを一覧表示するには、`ListBucketVersions` アクセス許可が必要です。

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

以下の手順では、Amazon S3 コンソールを使用して、オブジェクトの異なるバージョンを表示する方法を説明します。

**オブジェクトの複数のバージョンを表示する方法**

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

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

1. バケット内のオブジェクトのバージョン一覧を表示するには、**[Show versions]** (バージョンのリスト) スイッチを選択します。

   各オブジェクトバージョンについて、一意のバージョン ID、そのバージョンが作成された日時、その他のプロパティがコンソールに表示されます。(バージョニング状態を設定する前にバケットに保存されているオブジェクトには、バージョン ID [**null**] が付けられています)。

   バージョンのないオブジェクトをリストするには、[**バージョンのリスト**] スイッチを選択します。

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

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

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

## AWS SDK の使用
<a name="list-obj-version-enabled-bucket-sdk-examples"></a>

このセクションの例では、バージョニングが有効なバケットのオブジェクトを一覧表示する方法を示します。各リクエストは最大 1,000 個のバージョンを返します (これ未満の数を指定した場合を除きます)。バケット内のバージョン数が、この上限数を超えている場合は、複数のリクエストを送信してすべてのバージョンを一覧表示します。このように「ページ」に分けて結果を返すプロセスは、*ページ分割*と呼ばれます。

ページ分割の仕組みを示すために、例ではレスポンスごとのオブジェクトバージョン数を 2 個に制限しています。各例では、最初のページの結果を取得すると、バージョンリストが切り詰められているかどうかを確認します。切り詰められている場合は、引き続きページの取得を繰り返し、すべてのバージョンを取得します。

**注記**  
以下の例は、バージョニングが有効になっていないバケットや、個別のバージョンを持たないオブジェクトにも使用できます。これらの場合、Amazon S3 で返される各オブジェクトのバージョン ID は `null` になります。

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

------
#### [ Java ]

作業サンプルの作成およびテストの手順については、「AWS SDK for Java のデベロッパーガイド」の「[使用開始](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html)」を参照してください。

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.ListVersionsRequest;
import com.amazonaws.services.s3.model.S3VersionSummary;
import com.amazonaws.services.s3.model.VersionListing;

public class ListKeysVersioningEnabledBucket {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withCredentials(new ProfileCredentialsProvider())
                    .withRegion(clientRegion)
                    .build();

            // Retrieve the list of versions. If the bucket contains more versions
            // than the specified maximum number of results, Amazon S3 returns
            // one page of results per request.
            ListVersionsRequest request = new ListVersionsRequest()
                    .withBucketName(bucketName)
                    .withMaxResults(2);
            VersionListing versionListing = s3Client.listVersions(request);
            int numVersions = 0, numPages = 0;
            while (true) {
                numPages++;
                for (S3VersionSummary objectSummary : versionListing.getVersionSummaries()) {
                    System.out.printf("Retrieved object %s, version %s\n",
                            objectSummary.getKey(),
                            objectSummary.getVersionId());
                    numVersions++;
                }
                // Check whether there are more pages of versions to retrieve. If
                // there are, retrieve them. Otherwise, exit the loop.
                if (versionListing.isTruncated()) {
                    versionListing = s3Client.listNextBatchOfVersions(versionListing);
                } else {
                    break;
                }
            }
            System.out.println(numVersions + " object versions retrieved in " + numPages + " pages");
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }
}
```

------
#### [ .NET ]

コード例を設定および実行する方法の詳細については、「*AWS SDK for .NET デベロッパーガイド*」の「[AWS SDK for .NET の開始方法](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)」 を参照してください。

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class ListObjectsVersioningEnabledBucketTest
    {
        static string bucketName = "*** bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main(string[] args)
        {
            s3Client = new AmazonS3Client(bucketRegion);
            GetObjectListWithAllVersionsAsync().Wait();
        }

        static async Task GetObjectListWithAllVersionsAsync()
        {
            try
            {
                ListVersionsRequest request = new ListVersionsRequest()
                {
                    BucketName = bucketName,
                    // You can optionally specify key name prefix in the request
                    // if you want list of object versions of a specific object.

                    // For this example we limit response to return list of 2 versions.
                    MaxKeys = 2
                };
                do
                {
                    ListVersionsResponse response = await s3Client.ListVersionsAsync(request); 
                    // Process response.
                    foreach (S3ObjectVersion entry in response.Versions)
                    {
                        Console.WriteLine("key = {0} size = {1}",
                            entry.Key, entry.Size);
                    }

                    // If response is truncated, set the marker to get the next 
                    // set of keys.
                    if (response.IsTruncated)
                    {
                        request.KeyMarker = response.NextKeyMarker;
                        request.VersionIdMarker = response.NextVersionIdMarker;
                    }
                    else
                    {
                        request = null;
                    }
                } while (request != null);
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------

## REST API の使用
<a name="ListingtheObjectsinaVersioningEnabledBucket"></a>

**Example - バケット内のすべてのオブジェクトバージョンをリスト化**  
バケット内の各オブジェクトのすべてのバージョンを一覧表示するには、`versions` リクエストで `GET Bucket` サブリソースを使用します。Amazon S3 で取得できるオブジェクトは最大 1,000 個です。各オブジェクトバージョンが 1 個のオブジェクトとしてフルにカウントされます。したがって、バケット内に 2 つのキー (例: `photo.gif` と `picture.jpg`) があり、最初のキーに 990 個のバージョン、2 番目のキーに 400 個のバージョンがある場合、1 つのリクエストで取得されるバージョンは、`photo.gif` の 990 個と、`picture.jpg` のうち最新の 10 個のみです。  
Amazon S3 は、最も新しく保存されたバージョンから開始して、保存された順序でオブジェクトバージョンを返します。  
`GET Bucket` リクエストに、`versions` サブリソースを含めます。  

```
1. GET /?versions HTTP/1.1
2. Host: bucketName.s3.amazonaws.com
3. Date: Wed, 28 Oct 2009 22:32:00 +0000
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=
```

**Example - キーのすべてのバージョンの取得**  
 オブジェクトバージョンのサブセットを取得するには、`GET Bucket` のリクエストパラメータを使用します。詳細については、[ を参照してください。GET Bucket](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html)  

1. `prefix` パラメータを、取得したいオブジェクトのキーに設定します。

1. `GET Bucket` サブリソースおよび `versions` を使用して、`prefix` リクエストを送信します。

   `GET /?versions&prefix=objectName HTTP/1.1`

**Example - プレフィックスを使用したオブジェクトの取得**  
次の例では、キーが `myObject` であるか、またはそれで始まるオブジェクトを取得します。  

```
1. GET /?versions&prefix=myObject 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=
```
オブジェクトのすべてのバージョンのサブセットを取得するには、他のリクエストパラメータを使用します。詳細については、「**Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html)」を参照してください。

**Example - レスポンスが切り詰められた後の残ったオブジェクトのリスト取得**  
`GET` リクエストで返すことができるオブジェクトの数が `max-keys` の値を超えた場合、レスポンスには `<isTruncated>true</isTruncated>` と、リクエストを満たすが返されなかった最初のキー (`NextKeyMarker` 内) および最初のバージョン ID (`NextVersionIdMarker` 内) が含まれます。`GET` リクエストを満たす追加のオブジェクトを取得する後続のリクエストで、これらの戻り値を開始位置として使用します。  
バケットの元の `GET Bucket versions` リクエストを満たす追加のオブジェクトを取得するには、以下の手順に従ってください。`key-marker`、`version-id-marker`、`NextKeyMarker`、および `NextVersionIdMarker` の詳細については、「*Amazon Simple Storage Service API リファレンス*」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGET.html)」を参照してください。  
以下は、元の `GET` リクエストを満たす追加のレスポンスです。  
+ `key-marker` の値を、前のレスポンスの `NextKeyMarker` で返されたキーに設定します。
+ `version-id-marker` の値を、前のレスポンスの `NextVersionIdMarker` で返されたバージョン ID に設定します。
+ `GET Bucket versions` および `key-marker` を使用して `version-id-marker` リクエストを送信します。

**Example - 指定したキーおよびバージョン ID を始点としたオブジェクトの取得**  

```
1. GET /?versions&key-marker=myObject&version-id-marker=298459348571 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=
```

## の使用AWS CLI
<a name="list-obj-version-enabled-bucket-cli"></a>

次のコマンドは、バケット内のオブジェクトのすべてのバージョンに関するメタデータを返します。

```
aws s3api list-object-versions --bucket amzn-s3-demo-bucket1
```

`list-object-versions` の使用に関する詳細は、「*AWS CLI コマンドリファレンス*」の「[https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html](https://docs.aws.amazon.com/cli/latest/reference/s3api/list-object-versions.html)」を参照してください。