第 4 章 オブジェクトストレージ操作

2. コンテナサービス

2-2. コンテナの作成

コンテナのパスを指定して PUT リクエストを送信することでコンテナを作成できます。既存のコンテナに対して PUT リクエストを送信することも可能です。
その場合、POST リクエストを送信した場合と同じように動作し、コンテナの ACL 情報 (およびメタデータ) のみが更新されます (第4章 2. コンテナサービス 2-4. コンテナのACL設定を参照)。

リクエストヘッダに X-Container-Meta- から始まる名前の拡張ヘッダを付けることで、任意のメタデータをコンテナに与えることができます。同様の手順でコンテナに ACL 情報も付与できます。詳しくは、「第 6 章. アクセス制御」で解説します。

オブジェクトの世代管理 (バージョニング) 機能はコンテナ単位で実現します。コンテナ作成時に、旧バージョンのオブジェクトを管理するためのコンテナを X-Versions-Location ヘッダで登録します。Swift の設定ファイル container-server.conf でバージョニング機能を有効にしておく必要があります (v1.7.4 Folsomリリース以降)。

異なる Swift システムとの間で、コンテナ単位で同期させることが可能です。X-Container-Sync-To ヘッダにリモートの Swift のコンテナ、X-Container-Sync-Key ヘッダに双方のコンテナで共有する鍵を指定することにより利用することができます。
Swift の設定ファイル container-server.conf にコンテナ同期先として利用できるリモートの Swift システムをあらかじめ登録しておく必要があります (v1.4.3 Diabloリリース以降)。

【リクエスト】

コンテナ名の制限

  • コンテナ名にはスラッシュ “/” が使えません。
  • コンテナ名を URL エンコードしたとき、その長さが 256 バイトに納まっていなければなりません。

【リクエスト】

【実行例】

コンテナ test を作成します。これから作成するコンテナ名を指定して、PUT リクエストを送信します。コンテナ作成に成功するとレスポンスとして「201 Created」が戻ってきます。

PUT /v1/AUTH_orion-cabinet/test HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
Host: objstore.example.jp
Accept: */*
X-Auth-Token: AUTH_tkcbd0b108401245a3acf1b550aa4862bb
HTTP/1.1 201 Created
Content-Length: 18
Content-Type: text/html; charset=UTF-8
Date: Thu, 07 Jul 2011 02:51:22 GMT

201 Created

2-3. コンテナの削除

コンテナのパスを指定して DELETE リクエストを送信することで、そのコンテナを削除できます。ただし、コンテナ配下にオブジェクトが置かれている場合は削除はできません。

【リクエスト】

 

【レスポンス】

 

【実行例】

コンテナ test を削除します。コンテナ test を指定して、DELETE リクエストを送付します。

DELETE /v1/AUTH_orion-cabinet/test HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
Host: objstore.example.jp
Accept: */*
X-Auth-Token: AUTH_tkcbd0b108401245a3acf1b550aa4862bb
HTTP/1.1 204 No Content
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Thu, 07 Jul 2011 02:52:15 GMT

2-4. コンテナの ACL 設定

既存のコンテナに対して POST リクエストを送信することにより、コンテナの ACL 情報 (およびメタデータ) を更新することができます (既存のコンテナに対する PUT リクエスト送信でも同様のことが可能です)。
リクエストヘッダに X-Container-Read または X-Container-Write を含めることで、コンテナに ACL 情報を付与できます。詳しくは、「第 6 章 アクセス制御」で解説します。
また、リクエストヘッダに “X-Container-Meta-” から始まる名前の拡張ヘッダを含めることで、任意のメタデータをコンテナに与えることができます。このメタデータは、Swift の動作に影響しませんので、ユーザが自由に利用することができます。詳しくは、「第 7 章 メタデータ」で解説します。

【リクエスト】

 

【レスポンス】

【メタデータの削除】

リクエストヘッダに、”X-Remove-Container-Meta-” から始まる名前の拡張ヘッダを付けることで、任意のメタデータをコンテナから削除することができます。
拡張ヘッダ “X-Remove-Container-Meta-” には適当な値を指定しましょう。これは、値が空の拡張ヘッダを指定することができないためであり、値は無視されます (v1.4.8 Essexリリース以降で利用可能)。

【実施例】

ACL の設定例、メタデータの設定例については、「第 6 章 アクセス制御」および「第 7 章 メタデータ」で解説します。ここでは、コンテナからのメタデータを削除する例を紹介します。
コンテナに、ヘッダ「X-Remove-Container-Meta-Fruits: x」を設定した POST リクエストを送ります。

POST /v1/AUTH_orion-cabinet/test HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
Host: objstore.example.jp
Accept: */*
X-Auth-Token: AUTH_tkcbd0b108401245a3acf1b550aa4862bb
X-Remove-Container-Meta-Fruits: x
HTTP/1.1 204 No Content
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Mon, 26 Nov 2012 10:23:47 GMT

2-5. コンテナメタデータの取得

コンテナ内に保存されているオブジェクトの総数と、オブジェクトサイズの合計を返します。設定されている場合は ACL 情報と、メタデータも返します。これらの情報はレスポンスのヘッダで返されます。

【リクエスト】

 

【レスポンス】

 

【実行例】

コンテナ src を指定して HEAD リクエストを送り、コンテナ src の情報を取り出します。コンテナ src 配下にオブジェクトが 217 個あり (X-Container-Object-Count: 217)、それらオブジェクトサイズの合計が 2387310 バイト (X-Container-Bytes-Used:2387310) であることが分かります。

HEAD /v1/AUTH_orion-cabinet/src HTTP/1.1
User-Agent: curl/7.21.0 (x86_64-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
Host: objstore.example.jp
Accept: */*
X-Auth-Token: AUTH_tkcbd0b108401245a3acf1b550aa4862bb
HTTP/1.1 204 No Content
X-Container-Object-Count: 217
X-Container-Bytes-Used: 2387310
Content-Length: 0
Date: Thu, 07 Jul 2011 02:52:59 GMT