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ストレージの概念図 |
| パラメータ | 説明 |
|---|---|
| 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のとおりだ。
| 名称 | 説明 |
|---|---|
| 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スクリプトのあるディレクトリにコピーする |
なお、APIなどのドキュメントは「documentation」ディレクトリ内にHTML形式で用意されている。