Post on 04-Jul-2015
description
Windows Azure ストレージをPHPから使う株式会社pnop 桜井 剛
13年7月14日日曜日
Agenda.
1.Azure SDK for PHP2.Windows Azure ストレージ、Blobとテーブルの扱い方3.お知らせ
13年7月14日日曜日
13年7月14日日曜日
Azure ストレージの特徴
・以下のコンポーネントがあるBlob(ファイル格納)、Table(永続化KVS)、Queue、Drive(ディスクイメージ)
・データは同一DC内で3重化されて保持、他のリージョンのDCにもコピー(冗長性に優れている)
13年7月14日日曜日
本日は、BlobとテーブルをPHPから操作してみま
す。#MacBook + Linux で
13年7月14日日曜日
Windows Azure SDK for PHPhttps://github.com/WindowsAzure/azure-sdk-for-php
13年7月14日日曜日
インストール方法
vi composer.jsonwget http://getcomposer.org/composer.pharphp composer.phar install
{ "require": { "microsoft/windowsazure": "*" }, "repositories": [ { "type": "pear", "url": "http://pear.php.net" } ], "minimum-stability": "dev"}
これで実行した場所に「vendor」というディレクトリが出来る。これがSDK。
13年7月14日日曜日
Windows Azure SDK for PHP からBlob ストレージを扱う
13年7月14日日曜日
Blob ストレージの特徴
・ファイルを格納するストレージ・REST API を経由して読み書きする・アクセス権限が設定できる(Private、Publicコンテナ、PublicBlob)・Publicの場合、直接URIを指定してアクセス可能http://アカウント名・オンラインストレージや動画共有サイトなどのサービスに適している
類似のサービス:Amazon S3、IIJ GIO ストレージサービスなど
13年7月14日日曜日
Blob ストレージの操作の準備
・BlobストレージへアクセスするためのProxyオブジェクトを作成して、それを経由して操作します。$blobReatProxyがそれに該当します。
<?php$storageAccessAccount = 'AccountName';$storageAccessKey = 'AccountAccessKey';
require_once 'vendor/autoload.php';use WindowsAzure\Common\ServicesBuilder;use WindowsAzure\Common\ServiceException;
$connectionString = "DefaultEndpointsProtocol=http;AccountName=" . $storageAccessAccount . ";AccountKey=" . $storageAccessKey;$blobRestProxy = ServicesBuilder::getInstance()->createBlobService($connectionString);
13年7月14日日曜日
Blob ストレージコンテナの作成
・先ほど作成したProxyオブジェクトを使って、Publicコンテナを作ります。
$container_name = ‘my_container’;$createContainerOptions = new CreateContainerOptions(); $createContainerOptions->setPublicAccess(PublicAccessType::CONTAINER_AND_BLOBS);
$createContainerOptions->addMetaData("key1", "value1");$createContainerOptions->addMetaData("key2", "value2");
try { $blobRestProxy->createContainer($container_name, $createContainerOptions);} catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />";}
13年7月14日日曜日
Blobのアップロード
・Blobをアップロードするには、以下のようにします。
$content = fopen("myfile.txt", "r");$blob_name = "myfile.txt";
try { $blobRestProxy->createBlockBlob($container_name, $blob_name, $content);} catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />";}
13年7月14日日曜日
コンテナのBlob一覧
・以下のように一覧を取得します。
try { $blob_list = $blobRestProxy->listBlobs($container_name); $blobs = $blob_list->getBlobs();
foreach($blobs as $blob) { echo $blob->getName().": ".$blob->getUrl()."<br />"; }} catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />";}
13年7月14日日曜日
Windows Azure SDK for PHP からTable ストレージを扱う
13年7月14日日曜日
Table ストレージの特徴
・ストレージサービスに永続化したKVS・NoSQL・PartitionKeyとRowKeyの2つによる値(エンティティ)の読み書き・セッション管理などに適している
類似の仕組み:KyotoTycoonなど
13年7月14日日曜日
Table ストレージの操作の準備
・TableストレージへアクセスするためのProxyオブジェクトを作成して、それを経由して操作します。$tableReatProxyがそれに該当します。
<?php$storageAccessAccount = 'AccountName';$storageAccessKey = 'AccountAccessKey';
require_once 'vendor/autoload.php';use WindowsAzure\Common\ServicesBuilder;use WindowsAzure\Common\ServiceException;
$connectionString = "DefaultEndpointsProtocol=http;AccountName=" . $storageAccessAccount . ";AccountKey=" . $storageAccessKey;$tableRestProxy = ServicesBuilder::getInstance()->createTableService($connectionString);
13年7月14日日曜日
テーブルの作成
・先ほど作成したProxyオブジェクトを使って、データを格納するテーブルを作ります。
$table_name = ‘mytable’;
try { $tableRestProxy->createTable($table_name);} catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />";}
13年7月14日日曜日
値(Entity)のインサート
・値をインサートするには、以下のようにします。
use WindowsAzure\Table\Models\Entity;use WindowsAzure\Table\Models\EdmType;
$entity = new Entity();$entity->setPartitionKey("pk");$entity->setRowKey("1");$entity->addProperty("PropertyName1", EdmType::STRING, "Sample1");$entity->addProperty("PropertyName2", EdmType::STRING, "Sample2");
try{ $tableRestProxy->insertEntity($table_name, $entity);} catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />";}
13年7月14日日曜日
テーブルの検索
・以下のようにクエリを設定して検索します。
$filter = "RowKey eq '2'";
try { $result = $tableRestProxy->queryEntities($table_name, $filter);} catch(ServiceException $e){ $code = $e->getCode(); $error_message = $e->getMessage(); echo $code.": ".$error_message."<br />";}
$entities = $result->getEntities();
foreach($entities as $entity){ echo $entity->getPartitionKey().":".$entity->getRowKey()."<br />";}
13年7月14日日曜日
実際の利用例
アプリサーバー
blobストレージ
Tableストレージ
SQL Database
動画の保存・読出
セッション情報の保存・読出
一般的なデータの保存・読出
ユーザーは動画を直接読出
13年7月14日日曜日