【PHP】ConohaのオブジェクトストレージをOpenStackを用いて使う

S3とかと違って転送量がないのがお財布に優しくて良いので使っていこうと思った
思ったがしかし
公式ドキュメント が古くて使えなかった(涙目)
しかもConohaオブジェクトストレージの日本語ドキュメント見つかんないんですけど(血涙)   

見つかんないなら自分で書くまでよ
 

おおまかな流れ

  1. Conohaでオブジェクトストレージを契約
  2. プロダクト用ディレクトリ作成してcomposerでinitとかrequireとか
  3. index.php作成、ソースコードを書いていく
  4. OpenCloudのクライアントを作成
  5. authenticate()でtokenを発行させる
  6. tokenは1日使えることと、毎回サーバーにアクセスさせないことのためにキャッシュさせる
  7. サービスの指定、今回はオブジェクトストレージなのでobjectStoreService()を用いる
  8. あとは docs.php-opencloud を見ながら適当に

ソースコードとか

初期設定

$ mkdir conoha && cd conoha
$ composer init
$ composer require rackspace/php-opencloud:dev-master
$ touch index.php
$ php -S localhost:8000

index.php

<?php

// timezoneを要求されるので設定
date_default_timezone_set('Asia/Tokyo');

// ユーザ名
define('USERNAME', 'APIユーザー>ユーザー名');
// パスワード
define('PASSWORD', 'Conohaのサイトでオブジェクトストレージ登録した時に入力したもの');
// テナント名
define('TENANT_NAME', 'テナント情報>テナント名');
// テナントID
define('TENANT_ID', 'テナント情報>テナントID');
// API Auth URL
define('AUTH_URL', 'https://identity.tyo1.conoha.io/v2.0');
// オブジェクトストレージエンドポイントURL
define('ENDPOINT_URL', 'エンドポイント>Object Storage Service ' . TENANT_ID);
// define('ENDPOINT_URL', 'https://object-storage.tyo1.conoha.io/v1/nc_**************' .TENANT_ID);

require_once 'vendor/autoload.php';

use OpenCloud\OpenStack;
use Guzzle\Http\Exception\ClientErrorResponseException;


// クライアントを作成
//$client = new OpenCloud\OpenStack(

try {
    $client = new OpenStack(
        AUTH_URL,
        array(
            'tenantName' => TENANT_NAME,
            'username' => USERNAME,
            'password' => PASSWORD
        )
    );

    // tokenをキャッシュさせる
    $cachefile = 'credentials.dat';
    if (file_exists($cachefile)) {
        $str_credential = file_get_contents($cachefile);
        $credentials = unserialize($str_credential);
        if($credentials) {
            $client->importCredentials($credentials);
        }
    }
    $token = $client->getTokenObject();
    if(!$token || $token->hasExpired()) {
        $client->authenticate();
        file_put_contents($cachefile, serialize($client->exportCredentials()));
    }

    // サービスの指定    
    $service = $client->objectStoreService('Object Storage Service', 'tyo1');

    // 全てのコンテナーを取得
    $containers = $service->listContainers();

    // 表示
    foreach ($containers as $container) {
        /** @param $container OpenCloud\ObjectStore\Resource\Container */
        printf("Container name: %s\n", $container->name);
        printf("Number of objects within container: %d\n", $container->getObjectCount());
    }

} catch(ClientErrorResponseException $ex) {
    throw $ex;
}

参考

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中