オブジェクトバージョニング

オブジェクトバージョニング

意図しない上書きから復元できるよう、複数のバージョンのコンテンツを保存できます。オブジェクトバージョニングが、バージョン管理を実現する簡単な方法です。これはあらゆる種類のコンテンツで使用できます。

注釈

ラージオブジェクトのマニフェストファイルはバージョニングできません。しかし、ラージオブジェクトのマニフェストファイルは、バージョニングされたセグメントを参照できます。

現在使用していないオブジェクトを、現在のバージョンのオブジェクトが置かれているコンテナーとは別のコンテナーに置くことを強く推奨します。

オブジェクトバージョニングの有効化および使用法

  1. オブジェクトバージョニングを有効化するために、コンテナー設定ファイルで allow_versions オプションを TRUE に設定するよう、クラウドプロバイダーに依頼します。

  2. 古いバージョンのオブジェクトを保存するための archive コンテナーを作成します。

    $ curl -i $publicURL/archive -X PUT -H "Content-Length: 0" -H "X-Auth-Token: $token"
    
    HTTP/1.1 201 Created
    Content-Length: 0
    Content-Type: text/html; charset=UTF-8
    X-Trans-Id: tx46f8c29050834d88b8d7e-0052e1859d
    Date: Thu, 23 Jan 2014 21:11:57 GMT
    
  3. 最新バージョンのオブジェクトを保存するための current コンテナーを作成します。

    X-Versions-Location ヘッダーを取り込みます。このヘッダーは、最新以外のバージョンのオブジェクトを保持するコンテナーを定義します。UTF-8 エンコードする必要があります。また、X-Versions-Location に含める前に、コンテナーを URL エンコードする必要があります。このヘッダーにより、current にある全オブジェクトに対するオブジェクトバージョニングを有効化できます。current コンテナーにあるオブジェクトを変更すると、自動的に archive コンテナーに古いバージョンが作成されます。

    $ curl -i $publicURL/current -X PUT -H "Content-Length: 0" -H \
      ”X-Auth-Token: $token" -H "X-Versions-Location: archive"
    
    HTTP/1.1 201 Created
    Content-Length: 0
    Content-Type: text/html; charset=UTF-8
    X-Trans-Id: txb91810fb717347d09eec8-0052e18997
    Date: Thu, 23 Jan 2014 21:28:55 GMT
    
  4. current コンテナーに最初のバージョンのオブジェクトを作成します。

    $ curl -i $publicURL/current/my_object --data-binary 1 -X PUT -H \
      ”Content-Length: 0" -H "X-Auth-Token: $token"
    
    HTTP/1.1 201 Created
    Last-Modified: Thu, 23 Jan 2014 21:31:22 GMT
    Content-Length: 0
    Etag: d41d8cd98f00b204e9800998ecf8427e
    Content-Type: text/html; charset=UTF-8
    X-Trans-Id: tx5992d536a4bd4fec973aa-0052e18a2a
    Date: Thu, 23 Jan 2014 21:31:22 GMT
    

    初めて current コンテナーにオブジェクトを PUT するとき、最新バージョンのコンテナー以外には何も書き込まれません。しかしながら、オブジェクトの編集する、後続の PUT リクエストにより、archive コンテナーにあるオブジェクトにバージョンを作成する引き金になります。

    これらの最新以外のバージョンは、以下のように命名されます。

    <length><object_name><timestamp>
    

    ここで length は、0 埋めされた 16 進 3 文字で表現される、オブジェクトの長さです。<object_name> はオブジェクトの名前です。また、<timestamp> は、オブジェクトが初めて最新バージョンとして作成された時刻です。

  5. current コンテナーに 2 番目のバージョンのオブジェクトを作成します。

    $ curl -i $publicURL/current/my_object --data-binary 2 -X PUT -H \
      “Content-Length: 0" -H "X-Auth-Token: $token"
    
    HTTP/1.1 201 Created
    Last-Modified: Thu, 23 Jan 2014 21:41:32 GMT
    Content-Length: 0
    Etag: d41d8cd98f00b204e9800998ecf8427e
    Content-Type: text/html; charset=UTF-8
    X-Trans-Id: tx468287ce4fc94eada96ec-0052e18c8c
    Date: Thu, 23 Jan 2014 21:41:32 GMT
    
  6. バージョン付きオブジェクトに GET リクエストを発行して、最新バージョンのオブジェクトを取得します。リクエストのリダイレクトやメタデータの検索を実行する必要はありません。

    archive コンテナーにある旧バージョンのオブジェクトを一覧表示します。

    $ curl -i $publicURL/archive?prefix=009my_object -X GET -H \
      "X-Auth-Token: $token"
    
    HTTP/1.1 200 OK
    Content-Length: 30
    X-Container-Object-Count: 1
    Accept-Ranges: bytes
    X-Timestamp: 1390513280.79684
    X-Container-Bytes-Used: 0
    Content-Type: text/plain; charset=utf-8
    X-Trans-Id: tx9a441884997542d3a5868-0052e18d8e
    Date: Thu, 23 Jan 2014 21:45:50 GMT
    
      009my_object/1390512682.92052
    

    注釈

    バージョン付きオブジェクトへの POST リクエストは、オブジェクトのメタデータのみを更新し、オブジェクトの新しいバージョンを作成しません。オブジェクトの内容を変更する場合だけ、新しいバージョンが作成されます。

  7. バージョン付きオブジェクトに DELETE リクエストを発行して、最新バージョンのオブジェクトを削除し、最新以外のコンテナーにある、次に新しいバージョンで置き換えます。

    $ curl -i $publicURL/current/my_object -X DELETE -H \
      "X-Auth-Token: $token"
    
    HTTP/1.1 204 No Content
    Content-Length: 0
    Content-Type: text/html; charset=UTF-8
    X-Trans-Id: tx006d944e02494e229b8ee-0052e18edd
    Date: Thu, 23 Jan 2014 21:51:25 GMT
    

    archive コンテナーにあるオブジェクトを一覧表示して、アーカイブされたオブジェクトが current コンテナーに戻されたことを確認します。

    $ curl -i $publicURL/archive?prefix=009my_object -X GET -H \
      "X-Auth-Token: $token"
    
    HTTP/1.1 204 No Content
    Content-Length: 0
    X-Container-Object-Count: 0
    Accept-Ranges: bytes
    X-Timestamp: 1390513280.79684
    X-Container-Bytes-Used: 0
    Content-Type: text/html; charset=UTF-8
    X-Trans-Id: tx044f2a05f56f4997af737-0052e18eed
    Date: Thu, 23 Jan 2014 21:51:41 GMT
    

    この次に新しいバージョンは、何らかのメタデータが最後に設定されたものです。オブジェクトを完全に削除したく、5 個のバージョンを持つ場合、5 回 DELETE する必要があります。

  8. current コンテナーのオブジェクトバージョニングを無効化する場合、X-Versions-Location メタデータヘッダーに空の値を送信して、これを削除します。

    $ curl -i $publicURL/current -X PUT -H "Content-Length: 0" -H \
      "X-Auth-Token: $token" -H "X-Versions-Location: "
    
      HTTP/1.1 202 Accepted
      Content-Length: 76
      Content-Type: text/html; charset=UTF-8
      X-Trans-Id: txe2476de217134549996d0-0052e19038
      Date: Thu, 23 Jan 2014 21:57:12 GMT
    
    <html><h1>Accepted</h1><p>The request is accepted for processing.</p></html>
    

python-swiftclient を用いたバージョニング

python-swiftclient を使用して、オブジェクトのバージョニングを有効化できます。

  • 追加のコンテナーを作成して、前のバージョンを保持します。

    $ swift post CONTAINER_versions
    
  • 希望するコンテナーにオブジ¥ェクトのバージョニングを有効化します。

    $ swift post CONTAINER -H "X-Versions-Location:CONTAINER-versions"
    
Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.