Python+tweepy+web.py+Azureストレージで作るTwitter連携アプリケーション 2ページ

Windows Azureストレージで用意されているストレージサービス

 Windows Azureストレージには「Blob」および「Table」、「Queue」の3つのストレージが用意されている。以下ではこれらストレージの特徴やこれらを用いたサンプルコードを紹介していこう。

単一のファイルを保存するためのストレージ「Blobストレージ」

 「Blob」は、単一のファイルをWindows Azureストレージサーバー内に保存する仕組みだ。Blobは1つのストレージアカウントに対し複数作成できる「コンテナ」という単位で管理され、保存したファイルごとに一意なURLが与えられる。各コンテナにはアクセス権の設定が可能で、たとえば認証なし(匿名)でBlobへの読み取りアクセスを許可することもできる(図4、 表2)。

図4 Blobストレージの概念図
図4 Blobストレージの概念図
表2 設定できるコンテナのアクセス許可
パラメータ 説明
AC__PRIVATE コンテナおよびBlobに対するすべての操作に認証が必要
ACL_PUBLIC_BLOB Blobのデータやプロパティの読み取りのみを匿名ユーザーに許可する
ACL_PUBLIC_CONTAINER コンテナ内のBlob一覧やプロパティの読み取りと、Blobのデータやプロパティの読み取りの両方を匿名ユーザーに許可する

 HTTPでデータの保存・取得ができる、といった点ではWebDAVにも似ているが、Blobではコンテナ単位でのアクセス管理が可能で、またデータがMicrosoftのクラスタ環境内に分散・冗長化されて配置される点が異なる点だ。そのため、データが配置されているサーバーの1つが停止しても、格納されているコンテンツには問題なくアクセスできる。複数アプリケーション/インスタンスからの同時アクセスについても考慮されており、ロックなどの排他制御機構やスナップショット機能、任意のメタデータを付加する機能なども用意されている。

 また、コンテナに対し認証無しでの読み取りアクセスを許可することで、そのコンテナ内のBlobに対してはHTTPのGET操作でデータを取得できる。これを利用し、Webサイトで使用する画像やスタイルシート、各種スクリプトといったリソースをBlobに格納してそこから配信する、といった使い方もできる。オプションで利用できる「Windows Azureコンテンツ配信ネットワーク(CDN)」機能を組み合わせることで、世界各国のノードにファイルを配置して高速に配信することも可能だ。

 なお、Blobには最大4MBの「ブロック」単位でアクセスできる「ブロックBlob」と、512バイトのページ単位でのアクセスできる「ページBlob」の2種類がある。ページBlobはディスクイメージファイルの格納といった用途に利用されるもので、通常はブロックBlobを利用する。

 Blobストレージに対し実行できる操作は表3のとおりだ。

表3 Blobストレージに対して実行できる操作
名称 説明
List Containers コンテナ一覧を取得
Create Container コンテナを新規作成
Delete Container コンテナを削除
Get Container Properties コンテナのプロパティとメタデータを取得
Get Container Metadata コンテナのユーザー定義メタデータを取得
Set Container Metadata コンテナのメタデータを設定
Get Container ACL コンテナのアクセス制御ポリシを取得
Set Container ACL コンテナのアクセス制御ポリシを設定
List Blobs 指定したコンテナ内のBlob一覧を取得
Put Blob Blobを新規作成
Get Blob Blob内データおよびそのメタデータを取得
Delete Blob blobを削除
Get Blob Properties Blobのプロパティとメタデータを取得
Set Blob Properties Blobのプロパティを設定
Get Blob Metadata Blobのメタデータを取得
Set Blob Metadata Blobのメタデータを設定
Lease Blob Blobに対し排他的な1分間の書き込みロックを設定
Snapshot Blob Blobのスナップショットを作成
Copy Blob blobをコピーする
Put Block ブロックBlobに対し新たなBlockを作成
Put Block List ブロックBlobのブロックIDを指定してBlobをコミットする
Get Block List ブロックBlockを構成するブロック一覧を取得
Put Page ページBlobに対しページ操作を行う
Get Page Regions ページBlobにおけるアクティブなページ範囲を取得

 第1回で解説した「Azure Drive」は、このBlob内にディスクイメージを保存しておき、そのディスクイメージをドライブとしてマウントするものだ。Azure Drive内に保存されたファイルはディスクイメージ内に格納されるため、Windows AzureストレージのAPI経由では直接はアクセスできない。もしAzure Drive内のデータにアクセスしたい場合は、Blobからディスクイメージ全体をダウンロードしてアクセスすることになる。

Blobストレージの利用例:簡易的なファイルアップローダ

 Blobストレージはバイナリ/テキストを問わず大容量のファイルを格納できるため、一般的なファイルの保存に幅広く利用できる。ただし複雑なクエリ機能などは備えていないため、一般的なSQLデータベースのように使うことは難しい。ユーザーがアップロードした画像や、プログラム中でパースして利用するデータファイルの格納などが主な利用方法であろう。

 今回はBlobストレージを利用するサンプルとして、簡易的なファイルアップローダを紹介しよう。実装はPHPで行い、ストレージへのアクセスには前述のPHPAzureモジュールを使用している。

PHPAzureの準備

 AzurePHPはWindows Azure SDK for PHPのWebページからダウンロードできる。AzurePHPはWindows Azureアカウントの管理やデプロイ、診断などを行う管理用ツールまでも含むパッケージとなっており、配布されているZIPファイル中にはライブラリ一式に加えてドキュメントや各種ツール、バッチファイルなども含まれている。ライブラリ本体はZIPファイル中の「library」ディレクトリ内にある「Microsoft」ディレクトリ内に格納されている。特にインストーラなどは用意されていないので、このディレクトリをPHPスクリプトファイルが格納されているディレクトリ内やパスが通っているディレクトリにコピーすれば良い(図5)。

図5 ZIPファイルの「library」ディレクトリ内にある「Microsoft」ディレクトリをディレクトリごとPHPスクリプトのあるディレクトリにコピーする
図5 ZIPファイルの「library」ディレクトリ内にある「Microsoft」ディレクトリをディレクトリごとPHPスクリプトのあるディレクトリにコピーする

 なお、APIなどのドキュメントは「documentation」ディレクトリ内にHTML形式で用意されている。