Posted on

Conohaのオブジェクトストレージを試す

システムによって写真を大量に上げられる事があり他のシステムへの影響が出てきたのもあり今回プログラムから上げる画像やPDF等のファイルをシステムが動いているサーバーからオブジェクトストレージサーバーに置くことになりました。
Conohaのオブジェクトストレージを試した際につまずいた事等を書いていこうと思います。

基本はConohaのご利用ガイドの下記URLを参考に設定していきます。
https://www.conoha.jp/guide/objectstoragerestapi.php
ただ、このご利用ガイドだけでは細かい設定まで載っていなくて大分苦労しました。

全てのサンプルコードをGitHubから落としてきて設定していきます。
まずconfig.phpの設定からつまづきました…
config.phpに載っているConohaのブログに行くもリンク切れだし、記事を探すも2015年以前の古いバージョンの記事だったり、サポートに電話するもご利用ガイドを見て分からなければ、これ以上サポートは出来ませんといわれる始末…

ただですね、何処がどの値になるってきちんと明示してくれないと分かんないですよConohaさん!!
というわけで紆余曲折しながら値を入れてってやっと繋がるようになった設定値がこちら。

// ユーザ名
define(‘USERNAME’, ‘⑤の値’);
// パスワード
define(‘PASSWORD’, ‘⑥の値’);
// 認証トークン(token-get.phpで取得する)
define(‘AUTH_TOKEN’, ”);
// テナント名
define(‘TENANT_NAME’, ‘②の値’);
// テナントID
define(‘TENANT_ID’, ‘①の値’);
// API Auth URL
define(‘AUTH_URL’, ‘④の値’);
// オブジェクトストレージエンドポイントURL
define(‘ENDPOINT_URL’, ‘③の値’);

ポイントはIdentity ServiceがAUTH_URLになるなんてきちんと明示して貰わないと分かりません。
あとENDPOINT_URLで後ろにTENANT_IDが付いているのが要らないです。
多分config.phpが古いバージョンのままなんでしょうね^^

上記値を入れてtoken-get.phpを動かすとトークンが取れるので、それをAUTH_TOKENに入れて他のコンテナ作成・一覧取得やオブジェクトアップロード・ダウンロードが動作します。

これで一通り動きは確認できたのですが、実際に上げたファイルはHTTPでどうアクセスするのか分かりません。
そんなのもご利用ガイドには載ってないしという事でアクセス方法は次の通り。
(sampleというコンテナに1.jpgをファイルを上げてるとすると)
$url = ENDPOINT_URL . ‘/sample/1.jpg’;
にアクセスすると取ってこれます。
ただし、これはコンテナを作るときに公開設定をして作っておく必要があります。

// 公開コンテナ作成
$headers = array(
'X-Auth-Token: ' . AUTH_TOKEN, // X-Auth-Tokenヘッダーでトークンを指定します
'Content-Length: 0',
'Accept: application/json',
// 認証無しでの読み取りを可能にする
'X-Web-Mode: true',
'X-Container-Read: .r:*,.rlistings'
);
// 非公開コンテナ作成
$headers = array(
'X-Auth-Token: ' . AUTH_TOKEN, // X-Auth-Tokenヘッダーでトークンを指定します
'Content-Length: 0',
'Accept: application/json',
);

ヘッダーの指定時に次の指定を足してあげる必要があります。
‘X-Web-Mode: true’,
‘X-Container-Read: .r:*,.rlistings’

次に疑問に思ったのがオブジェクトストレージに上げているファイルを削除したいという事です。
CURLOPT_CUSTOMREQUEST => “DELETE”,をオプションに足してあげると、削除してくれます。

// cURLのオプション
$options = array(
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
);

最後にトークンは1、2日で切れちゃってアクセスできなくなるのでcURLでオブジェクトストレージにアクセスする際にまずトークンを取得してから使っていくようにする必要があるかなって感じです。