7.1. バケットの作成・更新

PUT /1/(tenantId)/buckets/(bucketType)/(bucketName)

バケットを作成・更新する。

Request Headers:
 
  • X-Application-Id -- アプリケーションID(必須)
  • X-Application-Key -- アプリケーションキー(必須)
  • X-Session-Token -- セッショントークン(オプション)
  • Content-Type -- "application/json"
Parameters:
  • bucketType (string) -- バケット種別。オブジェクトストレージの場合は "object"、ファイルストレージの場合は "file"。
  • bucketName (string) -- バケット名
Request JSON Object:
 
  • description (string) -- バケットの説明 (作成時:オプション、更新時:必須)
  • ACL (object) -- バケットACL (作成時:オプション、更新時:必須)
  • contentACL (object) -- コンテンツACL (作成時:オプション、更新時:必須)
  • noAcl (boolean) -- ACLレス指定。オブジェクトACL制御無しの場合はtrue(デフォルト: false)。bucketType が "object" の場合のみ有効。
Status Codes:
Response JSON Object:
 
  • owner (string) -- オーナのユーザID
  • description (string) -- バケットの説明
  • ACL (object) -- バケットACL
  • contentACL (object) -- コンテンツACL
  • noAcl (boolean) -- ACLレス指定

リクエスト

リクエストボディには、バケットの情報を JSON で指定する。以下に例を示す。

{
    "description": "バケットの説明文",
    "ACL": {
        "r": [ "g:authenticated" ],
        "admin": [],
    },
    "contentACL": {
        "r": [ "g:authenticated" ],
        "w": [ "514af36644f9cb2eb8000002" ]
    },
    "noAcl": false
}

ここではバケット名 "bucket1" のオブジェクトバケットを作成する。 description には、バケットの説明文を指定することができる。

なお、ACL を指定しなかった場合は以下の ACL が自動的に設定される。

  • ACL:
    • ログイン済みの場合: "owner" にログインユーザが設定される。"r" に "g:authenticated" が設定され、認証ユーザは誰でもバケット情報を読み出せる。
    • 未ログイン状態の場合: "r" に "g:anonymous" が設定され、誰でもバケット情報を読み出せる。
  • contentACL:
    • ログイン済みの場合: r, w に "g:authenticated" が設定され、認証ユーザは誰でも読み書き可。
    • 未ログイン状態の場合 : r, w に "g:anonymous" が設定され、誰でも読み書き可。

description、ACL、contentACLはバケット作成時は全てオプションであるため、どれも指定せず作成することができる。 その場合のリクエストは空JSON( {} ) を指定する。

bucketType = "object" で noAcl を true に指定した場合、当該バケットにおいてオブジェクト単位の ACL 制御は行われない(ACLレスバケット)。

レスポンスボディ

作成したバケット情報を含むJSON データ。リクエスト時と同じものだが、owner が設定される。

注意事項

  • バケットはテナント毎に作成される。
  • 1テナント当たり作成できるバケットの個数には上限がある(数千個程度)。
  • テナント内では、同一名称のバケットを複数作成することはできない。
  • 通常のバケット名は先頭が英数字、2文字目以降は英数字または'_'でなければならない。 ただし、特殊バケットの更新時は「_ROOT,_USERS,_GROUPS」を指定できる
  • バケット名は40文字以下でなければならない。
  • バケット作成時には、_ROOT バケットのcontentACLに対する create 権限が必要。
  • バケット更新(ACL/contentACL以外)を行う際は、対象バケットに対する update 権限が必要。
  • バケットの ACL, contentACL, noAcl を変更する際は、対象バケットに対する admin 権限が必要。
  • 対象バケットに対するread権限が無くても、上記のレスポンスが返却される。
  • バケットを作成する際、ACLに関連する検索を高速化するために、ACL.r と ACL.owner に対するインデックスがそれぞれ自動的に作成される。 ただし、noAcl = true の場合は作成されない。
  • 更新時に noAcl の値を変更した場合、下記のように、noAcl の値に応じて、インデックスを適切に作成・削除する。 ここで「ACLに関連するインデックス」とは上述の ACL.r と ACL.owner に対するインデックス2個を指す。
    • noAcl = true に変更した場合、ACLに関連するインデックスが削除される。
    • noAcl = false に変更した場合、ACLに関連するインデックスが追加される。
    • noAcl 変更時に、既存オブジェクトの ACL フィールドの値は変更されない(すでに付与されているACLの削除やデフォルトACLの付与は行わない)