クラウドコンピューティングでは、複数の利用企業がサーバーやネットワークといったリソースを共有しています。そして、それらのリソースが特定ユーザーに占有されてしまわぬよう、各種制限がかけられています。

 例えばWindows Azure Platformには、アプリケーションのホスティングサービスである「コンピューティングサービス」に、外部ネットワークとの接続が約1分以内という制限があります。大きなファイルをアップロードもしくはダウンロードする際に、接続時間が1分を超えると、コネクションが強制的に切断されてしまうのです。

 第2回では、この外部ネットワークとの接続時間についての制限を回避する設計を取り上げます。Windows Azure Platformで大きなファイルをアップロード、あるいはダウンロードする際には、ストレージサービスのBLOBストレージを活用することがポイントになります。ストレージサービスには、コンピューティングサービスに設けられているような、外部ネットワークとの接続時間についての制限はありません。

 第1回でも紹介しましたが、BLOBストレージはサイズが大きなファイルの保存に適するストレージです。クラウド上に設けられており、HTTP経由でアクセスします。以下では、BLOBストレージを活用して、サイズが大きなファイルをダウンロード可能にする方法と、アップロード可能にする方法を順に説明します。

ファイル自体ではなくURLを返す

 BLOBストレージからファイルをダウンロード可能にするには、次のようにします。まずクライアントがファイルのダウンロードリクエストを発行したら、コンピューティングサービスは対象ファイルをBLOBストレージに転送します。リクエストを受けてから転送するのではなく、ファイルをあらかじめBLOBストレージに保存しておいてもよいでしょう。そして、コンピューティングサービスはクライアントへのレスポンスとして、ファイルを返す代わりに、BLOBストレージ上にある対象ファイルのURLへのリダイレクト指示を返します。そのレスポンスを受けて、クライアントはBLOBストレージからファイルをダウンロードするのです(図1)。

図1●BLOBストレージからファイルをダウンロード可能にする方法
図1●BLOBストレージからファイルをダウンロード可能にする方法

 利用者は、ダウンロード元がBLOBストレージであることを意識することなく、Webアプリケーションから直接ダウンロードするのと同じ操作でダウンロードできます。

一時的に有効なアクセスキーを配布

 ファイルのアップロードについてもダウンロードと同様、ユーザーがファイル操作をする対象をBLOBストレージにすることによって、コンピューティングサービスに設けられている、外部ネットワークとの接続が1分を超えると切断されてしまう制限を回避できます。

 BLOBストレージを含む、Windows Azure Platformのストレージサービスに対してファイルをアップロードするには、クライアント側に認証用の情報である「アクセスキー」が必要です。通常のアクセスキーはきわめて強い権限を持つので、不特定多数のクライアントに配布してはいけません。ファイルを書き換えられてしまうなど、重大なセキュリティー問題を招くからです。

 もし、不特定多数のクライアントからファイルをアップロード可能にしたいなら、Shared Access Signature(共有アクセス署名)と呼ぶ特殊なアクセスキーの利用を勧めます(図2)。Shared Access Signatureは、期限や権限(参照、作成、削除、変更)などを組み合わせて作成した、一時的に有効となるアクセスキーです。通常のアクセスキーの代わりに、このShared Access Signatureをクライアントに配布すれば、クライアントアプリケーションがクラックされた際などに、ストレージサービスが受ける攻撃のリスクを軽減できます。

図2●不特定多数のクライアントからBLOBストレージにファイルをアップロード可能にする方法
図2●不特定多数のクライアントからBLOBストレージにファイルをアップロード可能にする方法

 Shared Access Signatureを配布する際には、ファイルのアップロードやダウンロードに必要な時間が経過したら無効になるように設定しておくことともに、付与する権限を最小限に抑えることが大切です。それにより、たとえ攻撃者がShared Access Signatureを不正入手した場合でも、その影響を最小限に抑えられます。

コンピューティングサービスの負荷が軽減

 大きなファイルをダウンロードまたはアップロードすると、ネットワーク帯域だけでなく、CPUやメモリーなどサーバーのリソースも大量に消費します。つまり、ファイル操作の対象サーバーをコンピューティングサービスからBLOBストレージに変えると、コンピューティングサービスに掛かるはずだった負荷がBLOBストレージ側に移るのです。

 ダウンロードまたはアップロードが1分以内に完了する場合でも、そうしたダウンロードやアップロードが頻繁に行われるのなら、コンピューティングサービスの負荷が高まって性能劣化が生じぬよう、BLOBストレージの利用を検討するとよいでしょう。

冨田 順(@harutama)
富士通システムソリューションズ
Windows Azureを中心に、各種クラウドプラットフォーム上にシステムを構築するための研究研究開発を行っている。Microsoft MVP for Windows Azure。