

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

オブジェクトのバージョンは Amazon S3 バケットからいつでも削除できます。さらに、明確なライフサイクルが定義されているオブジェクトのライフサイクル設定ルールを定義することにより、最新のオブジェクトバージョンを有効期限切れにしたり、以前のオブジェクトバージョンを完全に削除したりするよう Amazon S3 にリクエストできます。バケットでバージョニングが有効であるか、バージョニングが停止されている場合、ライフサイクル設定アクションは次のように動作します。
+ `Expiration` アクションは、最新のオブジェクトバージョンに適用されます。Amazon S3 は、最新のオブジェクトバージョンを削除するのではなく、*削除マーカー*を追加してそれを最新バージョンにします。これにより、最新バージョンは以前のバージョンとして保持されます。
+ `NoncurrentVersionExpiration` アクションは、以前のオブジェクトバージョンに適用されます。Amazon S3 はこれらのオブジェクトバージョンを完全に削除します。完全に削除したオブジェクトは復元できません。

S3 ライフサイクルの詳細については、「[オブジェクトのライフサイクルの管理](object-lifecycle-mgmt.md)」および「[S3 ライフサイクル設定の例](lifecycle-configuration-examples.md)」を参照してください。

バケットにある現在のオブジェクトバージョンと最新でないオブジェクトバージョンの数を確認するには、Amazon S3 ストレージレンズメトリクスを使用できます。S3 ストレージレンズは、オブジェクトストレージの使用状況とアクティビティを組織全体で可視化するために使用できるクラウドストレージの分析機能です。詳細については、「[S3 Storage Lens を使用したストレージコストの最適化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-lens-optimize-storage.html?icmpid=docs_s3_user_guide_DeletingObjectVersions.html)」を参照してください。メトリクスの完全なリストについては、「[S3 Storage Lens のメトリクスに関する用語集](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage_lens_metrics_glossary.html?icmpid=docs_s3_user_guide_replication.html)」を参照してください。

**注記**  
 通常の Amazon S3 料金は、最新ではないオブジェクトのバージョンなど、保存または移行されるオブジェクトのバージョンごとに適用されます。詳細については、「[Amazon S3 の料金](https://aws.amazon.com/s3/pricing/)」を参照してください。

## リクエストのユースケースを削除する
<a name="delete-request-use-cases"></a>

`DELETE` リクエストには次のユースケースがあります。
+ バージョニングが有効になっている場合、単純な `DELETE` はオブジェクトを完全に削除することはできません (単純な `DELETE` リクエストとは、バージョン ID を指定しないリクエストです)。代わりに、Amazon S3 はバケットに削除マーカーを挿入します。このマーカーが新しい ID を持つオブジェクトの最新バージョンになります。

  最新バージョンが削除マーカーであるオブジェクトを `GET` しようとすると、Amazon S3 は、オブジェクトが (消去されていなくても) 削除されたものとして動作し、エラー 404 を返します。詳細については、「[削除マーカーの使用](DeleteMarker.md)」を参照してください。

  次の図は、シンプルな `DELETE` が、指定したオブジェクトを実際には削除しないことを示しています。代わりに、Amazon S3 は削除マーカーを挿入します。  
![\[削除マーカーの挿入を示す図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled.png)
+ バージョニングされたオブジェクトを完全に削除するときは、必ず `DELETE Object versionId` を使用します。

  次の図は、指定したオブジェクトバージョンを削除することによって、そのオブジェクトを完全に削除する方法を示しています。  
![\[特定のオブジェクトバージョンを DELETE Object versionId が完全に削除する方法を説明する図\]](http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/images/versioning_DELETE_versioningEnabled2.png)

## オブジェクトバージョンを削除するには
<a name="delete-object-version"></a>

Amazon S3 内のオブジェクトバージョンは、コンソール、AWS SDK、REST API、または AWS Command Line Interface を使用して削除できます。

### S3 コンソールの使用
<a name="deleting-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. **[削除]** を選択します。

1. [**オブジェクトを完全に削除しますか?**] に、**permanently delete** と入力します。
**警告**  
オブジェクトバージョンを完全に削除すると、アクションを元に戻すことができません。

1. [**オブジェクトの削除**] を選択します。

   Amazon S3 がオブジェクトのバージョンを削除します。

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

AWS SDK for Java、.NET、PHP を使用してオブジェクトを削除する例については、「[Amazon S3 オブジェクトの削除](DeletingObjects.md)」を参照してください。バージョニングが無効なバケットと有効なバケットでオブジェクトを削除する場合の例は、同一です。ただし、バージョニングが有効なバケットには、Amazon S3 がバージョン番号を割り当てます。それ以外の場合、バージョン番号は null になります。

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

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

次の Python コード例は、すべてのバージョンを削除することによってバージョニングされたオブジェクトを完全に削除する方法を示しています。

```
def permanently_delete_object(bucket, object_key):
    """
    Permanently deletes a versioned object by deleting all of its versions.

    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 delete.
    """
    try:
        bucket.object_versions.filter(Prefix=object_key).delete()
        logger.info("Permanently deleted all versions of object %s.", object_key)
    except ClientError:
        logger.exception("Couldn't delete all versions of %s.", object_key)
        raise
```

------

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

**オブジェクトの特定のバージョンを削除するには**
+ `DELETE` でバージョン ID を指定します。

**Example - 特定のバージョンの削除**  
次の例では、`UIORUnfnd89493jJFJ` のバージョン `photo.gif` を削除します。  

```
1. DELETE /photo.gif?versionId=UIORUnfnd89493jJFJ HTTP/1.1 
2. Host: bucket.s3.amazonaws.com
3. Date: Wed, 12 Oct 2009 17:50:00 GMT
4. Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=
5. Content-Type: text/plain
6. Content-Length: 0
```

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

次のコマンドは、`amzn-s3-demo-bucket1` という名前のバケットから test.txt という名前のオブジェクトを削除します。特定のバージョンのオブジェクトを削除するには、バケット所有者として、バージョン ID サブリソースを使用する必要があります。

```
aws s3api delete-object --bucket amzn-s3-demo-bucket1 --key test.txt --version-id versionID
```

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

オブジェクトバージョンの削除の詳細については、以下のトピックを参照してください。
+ [削除マーカーの使用](DeleteMarker.md)
+ [古いバージョンを現行バージョンにするための削除マーカーの削除](ManagingDelMarkers.md#RemDelMarker)
+ [MFA Delete が有効なバケットからのオブジェクトの削除](UsingMFADelete.md)