以前のバージョンの復元 - Amazon Simple Storage Service

以前のバージョンの復元

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

  • オブジェクトの以前のバージョンを同じバケットにコピーします。

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

  • オブジェクトの最新バージョンを完全に削除します。

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

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

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

次の図では、オブジェクトの最新バージョン (121212) を削除して、以前のバージョン (111111) を最新のオブジェクトとして残す方法を示しています。オブジェクトの削除の詳細については、「1 つのオブジェクトの削除」を参照してください。

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

注記

オブジェクトバージョンをバッチで復元する場合は、CopyObject オペレーションを使用できます。CopyObject オペレーションは、マニフェストで指定した各オブジェクトをコピーします。ただし、オブジェクトは、必ずしもマニフェストに表示されている順序と同じ順序でコピーされるとは限らないため、注意してください。バージョン管理されたバケットでは、現在のバージョンまたは以前のバージョンの順序を維持することが重要な場合は、最初に以前のバージョンをすべてコピーする必要があります。次に、最初のジョブが完了したら、後続のジョブで現在のバージョンをコピーします。

以前のオブジェクトバージョンを復元する

  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

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

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

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

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

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

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

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

重要

最新 (現在) のバージョンとして削除された場合のみ、オブジェクトを復元できます。削除されたオブジェクトの以前のバージョンを復元することはできません。詳細については、「S3 バケットでのバージョニングの使用」を参照してください。

他の AWS SDK の使用の詳細については、「AWS デベロッパーセンター」を参照してください。

Python

作業サンプルを作成およびテストする方法については、AWS SDK for Python (Boto) の使用 を参照してください。

以下の 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}." )