

# レプリケーションステータス情報の取得
<a name="replication-status"></a>

レプリケーションステータスは、レプリケートされるオブジェクトの現在の状態を判断するのに役立ちます。レプリケート元オブジェクトのレプリケーションステータスは、 `PENDING`、`COMPLETED`または`FAILED`のいずれかを返します。レプリカのレプリケーションステータスが`REPLICA`に返されます。

S3 バッチレプリケーションジョブを作成するときにも、レプリケーションステータス値を使用することもできます。例えば、これらのステータス値を使用して、レプリケートされたことがない、またはレプリケーションに失敗したオブジェクトをレプリケートできます。バッチレプリケーションでこれらの値を使用する方法の詳細については、「[バッチレプリケーションジョブでのレプリケーションステータス情報の使用](#replication-status-batch-replication)」を参照してください。

**Topics**
+ [レプリケーションステータスの概要](#replication-status-overview)
+ [複数のレプリケート先バケットにレプリケートする場合のレプリケーションステータス](#replication-status-multiple-destinations)
+ [Amazon S3 レプリカ変更の同期が有効になっている場合のレプリケーションステータス](#replication-status-replica-mod-syn)
+ [バッチレプリケーションジョブでのレプリケーションステータス情報の使用](#replication-status-batch-replication)
+ [レプリケーションステータスの検索](#replication-status-usage)

## レプリケーションステータスの概要
<a name="replication-status-overview"></a>

レプリケーションには、レプリケーションを設定するレプリケート元バケットと、Amazon S3 がオブジェクトをレプリケートする 1 つ以上のレプリケート先バケットがあります。これらのバケットからオブジェクト (`GetObject` を使用) またはオブジェクトメタデータ (`HeadObject` を使用) をリクエストすると、Amazon S3 はレスポンスとして `x-amz-replication-status` ヘッダーを返します。
+ レプリケート元バケットのオブジェクトをリクエストする場合、リクエストしたオブジェクトがレプリケーション対象であると、Amazon S3 は `x-amz-replication-status` ヘッダーを返します。

  たとえば、レプリケーション設定でオブジェクトプレフィックス `TaxDocs` を指定して、キー名のプレフィックス `TaxDocs` が付いたオブジェクトのみをレプリケートするように Amazon S3 に指示しているとします。このキー名のプレフィックスを持つ、アップロードしたすべてのオブジェクト (`TaxDocs/document1.pdf` など) がレプリケートされます。このキー名のプレフィックスが付いたオブジェクトのリクエストでは、Amazon S3 が、オブジェクトのレプリケーション状態が `x-amz-replication-status`、`PENDING`、または `COMPLETED` の値のいずれかの `FAILED` ヘッダーを返します。
**注記**  
オブジェクトをアップロードした後で、オブジェクトのレプリケーションに失敗した場合、レプリケーションを再試行できません。オブジェクトを再度アップロードするか、S3 バッチレプリケーションを使用して失敗したオブジェクトをレプリケートする必要があります。バッチレプリケーションの使用の詳細については、「[バッチレプリケーションを使用した既存のオブジェクトのレプリケーション](s3-batch-replication-batch.md)」を参照してください。  
レプリケーションロールの許可、AWS Key Management Service (AWS KMS) 許可、またはバケットの許可がないなどの問題がある場合、オブジェクトは `FAILED` ステータスに移行します。バケットやリージョンが使用できないなどの一時的な障害が発生した場合、レプリケーションのステータスは `FAILED` にはならず、`PENDING` のままになります。リソースがオンラインに戻ると、Amazon S3 はこれらのオブジェクトのレプリケーションを再開します。
+ レプリケート先バケットからオブジェクトをリクエストした場合、リクエストされたオブジェクトが Amazon S3 によって作成されたレプリカであるときに、Amazon S3 は値が`x-amz-replication-status`である`REPLICA`ヘッダーを返します。

**注記**  
レプリケーションが有効になっているレプリケート元バケットからオブジェクトを削除する前に、削除する前にオブジェクトのレプリケーションステータスをチェックして、そのオブジェクトがレプリケートされていることを確認します。  
レプリケート元バケットで S3 ライフサイクル設定が有効である場合、Amazon S3 は、オブジェクトのステータスが `COMPLETED` または `FAILED` になるまでライフサイクルアクションを停止します。

## 複数のレプリケート先バケットにレプリケートする場合のレプリケーションステータス
<a name="replication-status-multiple-destinations"></a>

オブジェクトを複数のレプリケート先バケットにレプリケートした場合、`x-amz-replication-status`ヘッダーの動作はそれぞれ異なります。レプリケート元オブジェクトのヘッダーは、すべてのレプリケート先へのレプリケーションが成功した場合のみ、`COMPLETED` の値を返します。すべてのレプリケート先に対してレプリケーションが完了するまで、ヘッダーは`PENDING`の値のままになります。1 つ以上のレプリケート先がレプリケーションに失敗すると、ヘッダーは`FAILED`を返します。

## Amazon S3 レプリカ変更の同期が有効になっている場合のレプリケーションステータス
<a name="replication-status-replica-mod-syn"></a>

レプリケーションルールが Amazon S3 レプリカの変更を有効にすると、レプリカは `REPLICA` 以外のステータスをレポートできます。メタデータの変更がレプリケート中の場合は、`x-amz-replication-status` ヘッダーは `PENDING` を返します。レプリカ変更の同期がメタデータのレプリケートに失敗した場合、ヘッダーは `FAILED` を返します。メタデータが正しくレプリケートされると、レプリカはヘッダー `REPLICA` を返します。

## バッチレプリケーションジョブでのレプリケーションステータス情報の使用
<a name="replication-status-batch-replication"></a>

バッチレプリケーションジョブを作成するときに、オプションで、オブジェクトの作成日やレプリケーションステータスなどの追加のフィルターを指定して、ジョブのスコープを縮小できます。

オブジェクトのレプリケーションは、`ObjectReplicationStatuses` 値を基に、以下の値を 1 つ以上指定することでフィルターできます。
+ `"NONE"` - Simple Storage Service (Amazon S3) がこれまでオブジェクトのレプリケートを試みたことがないことを示します。
+ `"FAILED"` - Amazon S3 が以前にオブジェクトのレプリケートを試みたがオブジェクトのレプリケーションに失敗したことを示します。
+ `"COMPLETED"` - Simple Storage Service (Amazon S3) が以前にオブジェクトを正常にレプリケートしたことを示します。
+ `"REPLICA"` - Amazon S3 が別のソースからレプリケートしたレプリカオブジェクトであることを示します。

バッチレプリケーションでこれらのレプリケーションステータス値を使用する方法の詳細については、「[バッチレプリケーションジョブのフィルター](s3-batch-replication-batch.md#batch-replication-filters)」を参照してください。

## レプリケーションステータスの検索
<a name="replication-status-usage"></a>

バケット内のオブジェクトのレプリケーションステータスを取得するには、Amazon S3 インベントリツールを使用できます。Amazon S3 は、インベントリ設定で指定したレプリケート先バケットに CSV ファイルを送信します。Amazon Athena を使用して、インベントリレポートのレプリケーションステータスをクエリすることもできます。Amazon S3 インベントリのさらなる詳細については、[S3 インベントリを使用したデータのカタログ化と分析](storage-inventory.md) を参照してください。

オブジェクトのレプリケーションステータスは、Amazon S3 コンソール、AWS Command Line Interface (AWS CLI)、または AWS SDK で確認できます。

### S3 コンソールの使用
<a name="replication-status-console"></a>

S3 コンソールでは、オブジェクトの詳細ページで、オブジェクトのレプリケーションステータスを確認できます。

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

1. 左側のナビゲーションペインで、**[バケット]** を選択します。

1. **[汎用バケット]** リストで、レプリケーションソースバケットの名前を選択します。

1. [**オブジェクト**] リストで、オブジェクト名を選択します。オブジェクトの詳細ページが表示されます。

1. **[プロパティ]** タブで、**[オブジェクト管理の概要]** セクションまでスクロールします。**[管理設定]** で、**[レプリケーションステータス]** の [値] を確認します。

### の使用AWS CLI
<a name="replication-status-cli"></a>

次の例に示すように、AWS Command Line Interface (AWS CLI) `head-object` コマンドを使用して、オブジェクトのメタデータを取得します。`amzn-s3-demo-source-bucket1` をレプリケーションソースバケットの名前に置き換え、その他の `user input placeholders` を独自の情報に置き換えます。

```
aws s3api head-object --bucket amzn-s3-demo-source-bucket1 --key object-key --version-id object-version-id           
```

このコマンドは、以下のレスポンス例に示すように、`ReplicationStatus` を含むオブジェクトメタデータを返します。

```
{
   "AcceptRanges":"bytes",
   "ContentType":"image/jpeg",
   "LastModified":"Mon, 23 Mar 2015 21:02:29 GMT",
   "ContentLength":3191,
   "ReplicationStatus":"COMPLETED",
   "VersionId":"jfnW.HIMOfYiD_9rGbSkmroXsFj3fqZ.",
   "ETag":"\"6805f2cfc46c0f04559748bb039d69ae\"",
   "Metadata":{

   }
}
```

### AWS SDK の使用
<a name="replication-status-sdk"></a>

次のコードフラグメントは、それぞれ AWS SDK for Java および AWS SDK for .NET を使用してレプリケーションステータスを取得します。

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

```
GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest(bucketName, key);
ObjectMetadata metadata = s3Client.getObjectMetadata(metadataRequest);

System.out.println("Replication Status : " + metadata.getRawMetadataValue(Headers.OBJECT_REPLICATION_STATUS));
```

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

```
GetObjectMetadataRequest getmetadataRequest = new GetObjectMetadataRequest
    {
         BucketName = sourceBucket,
         Key        = objectKey
    };

GetObjectMetadataResponse getmetadataResponse = client.GetObjectMetadata(getmetadataRequest);
Console.WriteLine("Object replication status: {0}", getmetadataResponse.ReplicationStatus);
```

------