編)ConoHaのオブジェクトストレージについて(導入編)目次php-opencloudを使う準備php-opencloudを使うオブジェクトストレージのいろいろな機能まとめ今回はSDKを使ってオブジェクトストレージを操作します。OpenStackには様々な言語に合わせてSDKが用意されています。一覧は以下のリンクから確認できますが、今回使うのはPHP向けのphp-opencloudです。Extensionが必要になります。インストールしておいてください。SDKをインストールするには、composerを使ってインストールします。方法はオフィシャルのドキュメントにあるとおりです。適当な空のディレクトリを作成し、その中で以下のコマンドを実行してください。rackspace/php-opencloud:dev-masterこれで準備完了です。php-opencloudを使うサンプルコードと一緒にご覧ください。今回もアカウント情報や認証URLなどはconfig.phpにまとめて定義されています。));名前空間をインポートして、OpenStackクラスのインスタンスを作成します。コンストラクタの第一引数には認証エンドポイントURL、第二引数には配列で認証情報を渡します。Guzzleという見慣れないものが出てきました。APIやOAuthなどWebサービスを扱う実装をする際に便利です。php-opencloudは内部的にGuzzleを使用しており、HTTPのレスポンスやHTTPエラーなどがGuzzleのオブジェクトで返ってくることがあります。$ex;}OpenStackには様々なサービスが含まれています。$clientオブジェクトには、それぞれのサービスを扱うためのオブジェクトを取得するメソッドがあり、オブジェクトストレージを使う場合はobjectStoreService()です。これらのメソッドを呼ぶと、ここで初めて認証処理が実行されます(これはSDK内部で自動的に行われます)。401エラーとなり例外が投げられます。この認証処理はauthenticate()というメソッドに実装されていて、明示的に呼ぶこともできます。"n";}コンテナの一覧はlistContainers()メソッドで取得できます。次にオブジェクトを取得するプログラムを見てみましょう。Swiftサービスを取得するところまでは共通です。$contentはGuzzleHttpEntityBodyオブジェクトです。$content;オブジェクトのコンテンツ部分を取得はすこし複雑です。GuzzleHttpEntityBodyオブジェクトからコンテンツを取得するときに、ストリームを扱う必要があるからです。ストリームはPHPのリソース型の変数で、fopen()などの返り値などがわかりやすい例です。要はファイルポインタです。stream_get_contents()でストリームの内容を変数に書き込みます。次にオブジェクトのアップロードです。$fp);オブジェクトをアップロードする場合、一度ファイルに書き込んでからそのファイルポインタを渡します。tmpfile()は一時ファイルを作成してそのファイルポインタを返す、PHPの組み込み関数です。スクリプト終了時に処理系が一時ファイルを削除してくれます。APIを意識することなく直感的に実装することができます。オブジェクトストレージのいろいろな機能SDKを使えるようになったことで、オブジェクトストレージの操作がとても容易になりました。別の機能についてもご紹介します。ラージオブジェクトConoHaオブジェクトストレージには、1オブジェクトあたりの上限サイズはありません。1オブジェクトが5GBを超える場合は、分割アップロードを行う必要があります。php-opencloudを使うと、このオブジェクトの分割を内部的に行ってくれるので、特に意識することなく大きなオブジェクトを扱えます。$container->setupObjectTransfer($options);$transfer->upload();オブジェクトの有効期限を設定するオブジェクトには有効期限を設定することが可能です。有効期限を設定したオブジェクトは、期限が切れると自動的にオブジェクトストレージ上から削除されます。有効期限を設定するには、HTTPヘッダーのX-Delete-AtかX-Delete-Afterを使います。前者は指定した時刻にオブジェクトが削除され、後者は指定した秒数が経過した後にオブジェクトが削除されます。HTTPヘッダーはuploadObject()メソッドの第三引数に指定します。$headers);指定時間になると、コントロールパネルなどからオブジェクトが消えていることを確認できます。フォルダを作る本来、オブジェクトストレージには階層構造がありません。全てのオブジェクトはフラットに格納され、IDによって識別されます。擬似的なフォルダを作る機能も備わっており、既存のファイルシステムと同じような管理をすることもできます。ConoHaコントロールパネル上でも、一般的な階層構造として表示されます。疑似フォルダを作るには、Content-Typeをapplication/directoryにして0バイトのオブジェクトをアップロードします。$fp);コンテナやオブジェクトを公開する(HTTPアクセス)今まで見てきたように、オブジェクトストレージ内のコンテナやオブジェクトにアクセスするには、ユーザ名/パスワードによる認証や、トークンを渡す必要があります。これはコンテナやオブジェクトに対し、デフォルトでアクセスコントロール(ACL)が設定されるためです。コンテナを作成するときに個別にACLを設定することで、コンテナやオブジェクトへの認証なしでのアクセスを可能にできます。HTTPリクエストヘッダーにX-Web-ModeとX-Container-Readを設定します。rlistingsフラグを設定すると、コンテナに対するGETリクエストで、オブジェクトの一覧を返すようになります。認証無しでの読み取りを可能にする。APIをそのまま実装するより、ずいぶんと少ないコード量で実装することができます。加えて、オブジェクトストレージの機能がメソッドとして抽象化されているので、より直感的にコードが書けます。APIの理解が必要になってきます。オブジェクトストレージには、単純にデータを保存する以外に、いろいろな機能があります。コンテナの公開機能は、Webアプリケーションやスマートフォンアプリのバックエンドで使うのに、とても有効な機能です。問題は解決できましたか?はいいいえご回答ありがとうございます。送信ご回答受け付けました。ご協力ありがとうございました。