tencent cloud

フィードバック

バージョン管理の概要

最終更新日:2022-05-20 11:57:11

    概要

    バージョン管理は同一のバケット内に同一のオブジェクトの複数のバージョンを保存する場合に使用します。例えば、1つのバケット内に、オブジェクトキーは同じpicture.jpgでも、バージョンIDが100000、100101、120002のように異なる複数のオブジェクトを保存することができます。ユーザーがあるバケットでバージョン管理機能を有効にすると、バケット内に保存したオブジェクトをバージョンIDに基づいて照会、削除または復元できるようになります。ユーザーが誤って削除したデータや、アプリケーションプログラムの障害によって消失したデータの回復に役立ちます。例えば、ユーザーがバージョン管理されたオブジェクトの削除操作を行う場合は、次のようになります。

    • オブジェクトを削除したい(完全削除ではない)場合、COSは削除されるオブジェクトに削除タグを挿入し、このタグが現在のオブジェクトのバージョンとなります。この削除タグに基づいて以前のバージョンを復元することができます。
    • オブジェクトを置き換えたい場合、COSは新たにアップロードされたオブジェクトに新しいバージョンIDを挿入します。バージョンIDに基づいて、置き換える前のオブジェクトを復元することも引き続き可能です。

    バージョン管理の状態

    バケットには3種類のバージョン管理状態があります。バージョン管理を有効にしていない状態、バージョン管理を有効にしている状態、バージョン管理の一時停止状態です。

    • バージョン管理を有効にしていない状態:バケットのデフォルトの初期状態であり、このときバージョン管理機能はオフになっています。
    • バージョン管理を有効にしている状態:バケットのバージョン管理機能をオンにすることを指し、このときバージョン管理は有効な状態になっています。バージョン管理状態はこのバケット内のすべてのオブジェクトに適用されます。バケットのバージョン管理を最初に有効にした時点から、このバケットに新たにアップロードされるオブジェクトには一意のバージョンIDが付与されます。
    • バージョン管理の一時停止状態:バケットのバージョン管理をオンにした状態から一時停止状態に変更することを指します(バージョン管理を有効にしていない状態に戻すことはできません)。この後にバケットにアップロードされるオブジェクトについては、バージョン管理されたオブジェクトが保存されなくなります。
    注意:

    1. 一度バージョン管理を有効にしたバケットは、バージョン管理を有効にしていない状態(初期状態)に戻すことはできません。ただし、このバケットのバージョン管理を一時停止することはでき、その後に新たにアップロードされるオブジェクトでは複数のバージョンが生成されなくなります。
    2. バージョン管理を有効にする前にバケット内に保存されたオブジェクトのバージョンIDは、すべてnullとなっています。
    3. バージョン管理を有効にする、または一時停止すると、COSがこれらのオブジェクトを処理する際のリクエスト方式が変更されます。オブジェクト自体は変更されません。
    4. バケットのバージョン管理を一時停止できるのはルートアカウントと権限を持つサブアカウントのみです。

    バージョン管理状態下のオブジェクトの管理

    バケットがどのバージョン管理状態にある場合でも、その状態のバケット内のオブジェクトに対し、アップロード、照会および削除操作を行うことができます。バージョン管理を有効にしていない状態を除き、バージョン管理を有効にしている状態およびバージョン管理の一時停止状態であれば、バケット内のオブジェクトの照会および削除操作は、バージョンIDを指定してもしなくても行うことができます。

    • バージョン管理を有効にしていない状態:オブジェクトのアップロード、照会および削除などの操作方法に変更はありません。詳細については、オブジェクト管理ディレクトリ下のドキュメントをご参照ください。
    • バージョン管理を有効にしている状態およびバージョン管理の一時停止状態:オブジェクトのアップロード、照会および削除などの操作方法が従来の方法と異なる点は、バージョンIDが導入されている点です。オブジェクトの削除操作の実行には「削除タグ」の概念も加わっています。

    バージョン管理を有効にしている状態のオブジェクトの管理

    バケットバージョン管理を有効にする前にすでにバケット内に保存されていたオブジェクトについては、そのバージョンIDはnullとなります。バージョン管理を有効にした後も、バケット内の既存のオブジェクトは変更されず、既存オブジェクトに対するCOSの処理方式(リクエスト方式など)だけが変更されます。この時点で、新たにアップロードされた同名のオブジェクトは異なるバージョンとして同一のバケット内に存在することになります。バージョン管理を有効にしたバケット内でオブジェクトがどのように管理されるかについて、次にご説明します。

    注意:

    バージョン管理を有効にしていないバケットと、有効にしているバケットでは、ユーザーのオブジェクトのアップロード方法は同じですが、バージョンIDが異なります。バージョン管理を有効にしている場合、COSはオブジェクトに特定のバージョンIDを割り当てますが、バージョン管理を有効にしていない場合、バージョンIDは常にnullとなります。

    オブジェクトのアップロード

    バケットのバージョン管理を有効にすると、ユーザーがPUT、POSTまたはCOPY操作を実行した際、COSがこのバケットに保存するオブジェクトには一意のバージョンIDが自動的に追加されます。
    下図のように、バージョン管理を有効にしたバケットにオブジェクトをアップロードすると、COSはそのオブジェクトに一意のバージョンIDを追加します。

    バージョン管理オブジェクトのリストアップ

    COSはバケットにバインドしたversionsパラメータにオブジェクトのバージョン情報を保存します。COSは保存時刻の順序に従ってオブジェクトのバージョンを返します。その際、直近のバージョンが最初に返されます。

    特定のオブジェクトの全バージョン照会

    次のプロセスによって、versionsパラメータおよびprefixリクエストパラメータを使用して、あるオブジェクトの全バージョンを照会できます。prefixに関するその他の情報については、GET Bucket Object versionsのドキュメントをご参照ください。
    あるオブジェクトの全バージョンを照会する場合の、リクエストの例は次のとおりです。

    GET /?versions&prefix=ObjectKey HTTP/1.1
    

    データのメタバージョンの照会

    ユーザーがGETリクエストを使用する際にバージョンIDを指定しなければ、オブジェクトの現在のバージョンを照会します。下図のように、GETリクエストには123.txtオブジェクトの現在のバージョン(直近のバージョン)が返されます。

    ユーザーがGETリクエストを使用する際にバージョンIDを指定した場合は、指定したバージョンIDのオブジェクトを照会します。下図のように、GET versionIdリクエストによって指定したバージョン(現在のバージョンでも可)のオブジェクトを照会します。

    オブジェクトバージョンのメタデータの照会

    オブジェクトの内容ではなく、メタデータのみを照会したい場合は、HEAD操作を使用することができます。デフォルトでは最新バージョンのメタデータを取得します。指定したオブジェクトのバージョンのメタデータを照会したい場合は、リクエストの送信時にバージョンIDを指定します。
    指定したバージョンのオブジェクトのメタデータを照会する手順は次のとおりです。

    • versionIdを照会するオブジェクトメタデータのバージョンIDに設定します。
    • 指定したversionIdのHEAD操作リクエストを送信します。

    オブジェクトの削除

    必要に応じて、不要なオブジェクトのバージョンを随時削除することができます。ユーザーがバージョン管理を有効にしている状態でDELETEリクエストを使用するケースには次の2つがあります。

    1. ユーザーがバージョンIDを指定せず、通常のDELETE操作を実行する場合。
      この操作のケースは削除されたオブジェクトを「ごみ箱」に入れる場合に似ていますが、オブジェクトを完全に消去してはおらず、その後ユーザーが必要とする場合はデータを復元できます。
      下図のように、ユーザーがDELETE操作の際にバージョンIDを指定しなかった場合、実際にはKey=123.txtのオブジェクトは削除されず、新しい削除タグが挿入され、新しいバージョンIDが追加されます。

      注意:

      COSはバケット内で、削除されるオブジェクトに新しいバージョンIDを持つ削除タグを挿入し、この削除タグが削除されるオブジェクトの現在のバージョンとなります。この削除タグのあるオブジェクトに対しGET操作の実行を試すと、COSはこのオブジェクトが存在しないと認識し、404エラーを返します。

    2. ユーザーがバージョンIDを指定して、オブジェクトバージョンの削除操作を実行した場合、このケースではバージョン管理されたオブジェクトを永久に削除することができます。

    初期バージョンの復元

    バージョン管理によってオブジェクトの初期バージョンを復元することができます。この操作を実行するには2つの方法があります。

    1. オブジェクトの初期バージョンを同一のバケットにコピーする
      コピーしたオブジェクトはそのオブジェクトの現在のバージョンとなり、なおかつオブジェクトのすべてのバージョンが維持されます。
    2. オブジェクトの現在のバージョンを永久に削除する
      オブジェクトの現在のバージョンを削除すると、実際には1つ前のバージョンがオブジェクトの現在のバージョンに置き換わります。

    バージョン管理が一時停止状態にあるオブジェクトの管理

    バージョン管理を一時停止した場合、バケット内の既存のオブジェクトは変更されません。変更されるのはCOSがそれ以降のリクエストにおいてオブジェクトを処理する方式です。バージョン管理を一時停止しているバケット内でオブジェクトがどのように管理されるかについて、次にご説明します。

    オブジェクトのアップロード

    バケット上でバージョン管理を一時停止すると、ユーザーがPUT、POSTまたはCOPY操作を実行した際、COSはこのバケット内に保存されるオブジェクトに、バージョンIDをnullとして自動的に追加します。下図に示します。

    バケット内にバージョン管理を行っているオブジェクトが存在する場合、バケットにアップロードされたオブジェクトが現在のバージョンとなり、バージョンIDはnullとなります。下図に示します。

    バケット内に空のバージョンがすでに存在する場合、この空のバージョンは上書きされ、それまでのオブジェクトの内容もそれに応じて置き換えられます。下図に示します。

    データのメタバージョンの照会

    バージョン管理を一時停止したバケットで、ユーザーがGET Objectリクエストを送信すると、オブジェクトの現在のバージョンが返されます。

    オブジェクトの削除

    バージョン管理を一時停止した状態でDELETEリクエストを実行すると、次のようになります。

    • バケット内に空のバージョンのオブジェクトが存在する場合は、バージョンIDがnullのオブジェクトを削除します。
      下図のように、ユーザーが通常のDELETE操作を実行した際、COSは空のバージョンのオブジェクトに削除タグを挿入します。

      注意:

      削除タグには内容が存在しません。削除タグが空のバージョンに置き換わった時点で、空のバージョンの元の内容は失われます。

    • バケット内に空のバージョンのオブジェクトが存在しない場合は、バケット内に新たに削除タグが追加されます。
      下図のように、バケットに空のバージョンが存在しない場合、ユーザーがDELETE操作を実行してもいかなる内容も削除されず、COSが削除タグを挿入するだけとなります。

    • バージョン管理を一時停止しているバケットであっても、ルートアカウントであれば指定したバージョンを永久に削除することができます。
      下図のように、指定したオブジェクトのバージョンを削除すると、そのオブジェクトは永久に削除されます。

    注意:

    指定したオブジェクトのバージョンを削除できるのは、ルートアカウントまたはルートアカウントから権限を付与されたアカウントのみです。

    お問い合わせ

    カスタマーサービスをご提供できるため、ぜひお気軽にお問い合わせくださいませ。

    テクニカルサポート

    さらにサポートが必要な場合は、サポートチケットを送信して弊社サポートチームにお問い合わせください。24時間365日のサポートをご提供します。

    電話サポート(24 時間365日対応)