PHP matsuri 2013 Windows Azure Storage SDK for PHP

20
Windows Azure ストレージを PHPから使う 株式会社pnop 桜井 剛 13714日日曜日

description

How to use Windows Azure Storage SDK for PHP

Transcript of PHP matsuri 2013 Windows Azure Storage SDK for PHP

Page 1: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Windows Azure ストレージをPHPから使う株式会社pnop 桜井 剛

13年7月14日日曜日

Page 2: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Agenda.

1.Azure SDK for PHP2.Windows Azure ストレージ、Blobとテーブルの扱い方3.お知らせ

13年7月14日日曜日

Page 3: PHP matsuri 2013 Windows Azure Storage SDK for PHP

13年7月14日日曜日

Page 4: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Azure ストレージの特徴

・以下のコンポーネントがあるBlob(ファイル格納)、Table(永続化KVS)、Queue、Drive(ディスクイメージ)

・データは同一DC内で3重化されて保持、他のリージョンのDCにもコピー(冗長性に優れている)

13年7月14日日曜日

Page 5: PHP matsuri 2013 Windows Azure Storage SDK for PHP

本日は、BlobとテーブルをPHPから操作してみま

す。#MacBook + Linux で

13年7月14日日曜日

Page 6: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Windows Azure SDK for PHPhttps://github.com/WindowsAzure/azure-sdk-for-php

13年7月14日日曜日

Page 7: PHP matsuri 2013 Windows Azure Storage SDK for PHP

インストール方法

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日日曜日

Page 8: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Windows Azure SDK for PHP からBlob ストレージを扱う

13年7月14日日曜日

Page 9: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Blob ストレージの特徴

・ファイルを格納するストレージ・REST API を経由して読み書きする・アクセス権限が設定できる(Private、Publicコンテナ、PublicBlob)・Publicの場合、直接URIを指定してアクセス可能http://アカウント名・オンラインストレージや動画共有サイトなどのサービスに適している

類似のサービス:Amazon S3、IIJ GIO ストレージサービスなど

13年7月14日日曜日

Page 10: PHP matsuri 2013 Windows Azure Storage SDK for PHP

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日日曜日

Page 11: PHP matsuri 2013 Windows Azure Storage SDK for PHP

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日日曜日

Page 12: PHP matsuri 2013 Windows Azure Storage SDK for PHP

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日日曜日

Page 13: PHP matsuri 2013 Windows Azure Storage SDK for PHP

コンテナの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日日曜日

Page 14: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Windows Azure SDK for PHP からTable ストレージを扱う

13年7月14日日曜日

Page 15: PHP matsuri 2013 Windows Azure Storage SDK for PHP

Table ストレージの特徴

・ストレージサービスに永続化したKVS・NoSQL・PartitionKeyとRowKeyの2つによる値(エンティティ)の読み書き・セッション管理などに適している

類似の仕組み:KyotoTycoonなど

13年7月14日日曜日

Page 16: PHP matsuri 2013 Windows Azure Storage SDK for PHP

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日日曜日

Page 17: PHP matsuri 2013 Windows Azure Storage SDK for PHP

テーブルの作成

・先ほど作成した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日日曜日

Page 18: PHP matsuri 2013 Windows Azure Storage SDK for PHP

値(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日日曜日

Page 19: PHP matsuri 2013 Windows Azure Storage SDK for PHP

テーブルの検索

・以下のようにクエリを設定して検索します。

$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日日曜日

Page 20: PHP matsuri 2013 Windows Azure Storage SDK for PHP

実際の利用例

アプリサーバー

blobストレージ

Tableストレージ

SQL Database

動画の保存・読出

セッション情報の保存・読出

一般的なデータの保存・読出

ユーザーは動画を直接読出

13年7月14日日曜日