意図しない上書きから復元できるよう、複数のバージョンのコンテンツを保存できます。オブジェクトバージョニングが、バージョン管理を実現する簡単な方法です。これはあらゆる種類のコンテンツで使用できます。
注釈
ラージオブジェクトのマニフェストファイルはバージョニングできません。しかし、ラージオブジェクトのマニフェストファイルは、バージョニングされたセグメントを参照できます。
現在使用していないオブジェクトを、現在のバージョンのオブジェクトが置かれているコンテナーとは別のコンテナーに置くことを強く推奨します。
オブジェクトバージョニングを有効化するために、コンテナー設定ファイルで allow_versions
オプションを TRUE
に設定するよう、クラウドプロバイダーに依頼します。
古いバージョンのオブジェクトを保存するための 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
最新バージョンのオブジェクトを保存するための 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
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>
は、オブジェクトが初めて最新バージョンとして作成された時刻です。
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
バージョン付きオブジェクトに 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
リクエストは、オブジェクトのメタデータのみを更新し、オブジェクトの新しいバージョンを作成しません。オブジェクトの内容を変更する場合だけ、新しいバージョンが作成されます。
バージョン付きオブジェクトに 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
する必要があります。
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
を使用して、オブジェクトのバージョニングを有効化できます。
追加のコンテナーを作成して、前のバージョンを保持します。
$ swift post CONTAINER_versions
希望するコンテナーにオブジ¥ェクトのバージョニングを有効化します。
$ swift post CONTAINER -H "X-Versions-Location:CONTAINER-versions"
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.