Windows Azure

クラウドデザインパターン Azureを例としたクラウドアプリケーション設計の手引き

 

Microsoftが作成し公開しているpatterns & practices のAzureを題材につかったクラウドデザインパターンが日本語に翻訳され、書籍として発売されます!
デザインパターンとかは原著のほうが良いって意見も歩けど、やっぱり日本語のほうが読みやすい!難しいことを考えるには母国語が良いよね。

てことで、日本語に翻訳されたクラウドデザインパターンを読んで、自分が作るアプリケーションに、そのノウハウを適用しましょう。

(PR) Japan Azure User Groupで監訳をしていて、一部ですが自分も手伝いました

Windows Azure

アカウントで、Azure File Previewがアクティブになったので触ってみた。

新規にストレージアカウントを作成する

まずは、Preview中は既存のストレージでは、Azure Fileが提供されない。
既存のストレージを見ても表示されない。

image

なので新規にストレージを作成する。
新規に作成したら、ちゃんと「ファイル」が表示された。しかも、日本のDCでも表示されたので一安心!アドレスは、http://azurefilepre.file.core.windows.net/な感じ。file.core.windows.netって形式です。

image

PowerShellで、ファイル共有を作成する

Azure ファイルのエンドポイントは作成されたが、まだファイル共有は作成されていないので、ファイル共有を作成してあげる。これをしないことには、始まらない。
現時点では、管理画面からファイル共有は作成できないので、PowerShellコマンドレットか、REST APIコマンドで作成します。

次に、PowerShellコマンドレットで操作をしてみましょう。
http://go.microsoft.com/fwlink/?LinkID=398183から、zipファイルをダウンロードします。
ダウンロードしたファイルを解凍する前に、ファイルのプロパティから、ブロックの解除をクリックしておきます。

image

zipファイルを解凍すると、「AzureStorageFile」ディレクトリが作成されます。

Azure Fileがプレビュー中の間は、既存のAzureコマンドレットと別になります。Azure File用のPowerShellコマンドレットは、Storage Client Library 4.0 に依存しますが、既存のAzureコマンドレットは、別のバージョンに依存しているため分かれています。

PowerShellを開いて、カレントディレクトリを作成された、「AzureStorageFile」ディレクトリに移動します。

cd C:\Users\t.yamatoya\Downloads\AzureStorageFile\AzureStorageFile

# モジュールをインポートして、ストレージアカウントとキーのContextを作成します。
# 例:$ctx=New-AzureStorageContext azurefilepre D+1NmzaV32u9fYk8Zc/RXL4V==
import-module .\AzureStorageFile.psd1
$ctx=New-AzureStorageContext  
 
# 新しい共有の作成
$s = New-AzureStorageShare  -Context $ctx
 
# テストで試しに、「testdir」というディレクトリを作成します
New-AzureStorageDirectory -Share $s -Path testdir
 
# 作成したディレクトリににローカルからファイルをアップロードします。
Set-AzureStorageFileContent -Share $s -Source D:\upload\testfile.txt -Path testdir
 
# ディレクトリにあるファイルとサブディレクトリ一覧を表示します。
Get-AzureStorageFile -Share $s -Path testdir
 
# Azureストレージファイルからファイルをダウンロードします。
Get-AzureStorageFileContent -Share $s -Path testdir/testfile.txt -Destination D:\download
 
# Azureストレージファイルからファイルを削除します。
Remove-AzureStorageFile -Share $s -Path testdir/testfile.txt 

仮想マシンからAzure ファイルにネットワークマウントする

「net use」コマンドを使用してネットワークマウントします。

net use z: \\.file.core.windows.net\ /u: 
# 例:net use z: \\azurefilepre.file.core.windows.net\test /u:azurefilepre D+1NmzaV32u9fYk8Zc/RXL4ViOPiSvMgeiSQ==

image

無事マウントされて、ディレクトリ階層が確認できますね!

参考情報

まぁ普通のファイル共有になってしまいました。うん、便利便利。

それ以外の情報については、https://sqlazure.jp/b/windows-azure/1763/を参照してください。

Windows Azure

MSDNサブスクリプションにWindows 7とWindows 8.1 EnterpriseクライアントがMicrosoft Azureにデプロイされました。

Microsoft Azure 管理ポータルにMSDNサブスクリプションでログインすると、仮想マシンのイメージ選択で、Windows 7とWindows 8.1が表示されます。

image

 

ちなみに通常のアカウントだと、表示されません。

image

 

Windows 8.1 Enterpriseクライアントが、Microsoft Azure上で、10分かからずにデプロイすることができます。

イメージの作成がオンデマンドでできる「取り込み」ボタンが用意されていて、仮想マシンを無停止でイメージ化できます。

image

image

リモートデスクトップで接続して、スタートスクリーンをみると、標準的なWindows 8.1レイアウトで、右上のユーザーアイコンの隣に、電源ボタンが配置されています。

image

Windows Azure

Azure Storageチームが投稿した「Introducing Microsoft Azure File Service」をざっくり抜粋意訳した投稿です。

Microsoft Azure File サービスのプレビューが発表されました。
Azure Fileサービスは、標準的なSMB2.1プロトコルを使用してファイル共有を提供します。
Azureで動作するアプリケーションは、ReadFileやWriteFileのようなファイルシステムAPIを使用して仮想マシン間のファイル共有を簡単にできます。
さらに、多様なシナリオに対応できるようにRESTインターフェイス経由のファイルアクセスも提供されます。
Azure Fileはブロブ、テーブル、キューサービスと同じテクノロジー上に構築されています。つまり、プラットフォーム上で提供されている地理的冗長性、拡張性、可容性、耐久性が提供されます。

想定シナリオ

  • アプリケーションのクラウドへの上げ下げ
    アプリケーションの一部でファイル共有を使用している場合に、クラウド上でも同様にアプリケーションを運用することができます。
  • アプリケーション設定の共有
    センターマシンでアプリケーションの共通設定を持ち、複数の仮想マシンからアクセスさせられます。そのファイルの配置場所にAzure File共有が使用できます。共有ファイルへのアクセスには、ワイルドワイドにはRESTインターフェイス経由で管理します。
  • 分析データの共有
    Azure File共有は、ログやメトリックス、クラッシュダンプのような分析ファイルを保存するのに便利です。SMBとRESTインターフェイス両方が提供されており、分析データの分析と処理をする分析ツールを使用できます。
  • 開発・テスト・デバッグ
    Azure Fileにお気に入りもしくは必要なツールやファイルを共有し、それぞれの仮想マシンにインストールするときに使用することができます。

はじめてみよう

ステップ1 サービスのサインアップ

サインアップするために、Microsoft Azure Preview Portalにアクセスし、Microsoft Azure File サービスのサインアップをします。準備が完了したら、メール通知されます。サービス提供は遅めになるので、サインアップ後は辛抱強くまってください。

ステップ2 新しいストレージアカウントの作成

通知が届いたら、Azure Management Portalにアクセスし、新しいストレージアカウントを作成してください。自動的にファイルエンドポイントが準備されます。
ファイルエンドポイント:<account name>.file.core.windows.net

Azure Fileプレビューの間は、既存のストレージアカウントではAzure Fileにアクセスできません。必ず新しいストレージアカウントを作成する必要があります。

ステップ3 ファイル共有の作成

次の2種類のファイル共有の作成方法があります。

PowerShellコマンドレット

# import module and create a context for account and key
import-module .\Microsoft.WindowsAzure.Commands.Storage.File.dll
$ctx=New-AzureStorageContext  
 
# create a new share
$s = New-AzureStorageShare  -Context $ctx
 
# create a directory in the test share just created
New-AzureStorageDirectory -Share $s -Path testdir
 
# upload a local file to the testdir directory just created
Set-AzureStorageFileContent -Share $s -Source D:\upload\testfile.txt -Path testdir
 
# list out the files and subdirectories in a directory
Get-AzureStorageFile -Share $s -Path testdir
 
# download files from azure storage file service
Get-AzureStorageFileContent -Share $s -Path testdir/testfile.txt -Destination D:\download
 
# remove files from azure storage file service
Remove-AzureStorageFile -Share $s -Path testdir/testfile.txt 

REST API

REST APIバージョン2014-02-14を使用して、ファイル共有を作成することができます。

REST APIは、http(s)://<account name>.file.core.windows.net 経由で提供されます。

さらに、.NET Storage Client Library 4.0でRESTバージョン2014-02-14でAzure Fileをサポートします。NuGETでプロジェクトに追加することをお勧めします。

static void Main(string[] args)
{
     CloudStorageAccount account = CloudStorageAccount.Parse(cxnString);
     CloudFileClient client = account.CreateCloudFileClient();
     CloudFileShare share = client.GetShareReference("bar");
     share.CreateIfNotExistsAsync().Wait();
}

ステップ4 ファイル共有を使用する

ファイル共有を作成したら、共有するストレージアカウントと同じリージョンでホストされているAzureノード(VM/Worker/Webロール)からSMBまたはRESTプロトコル経由でアクセスできます。

SMB2.1プロトコル経由で共有を使用するには、次のように「net use」を実行して共有アクセスを許可する必要があります。

net use z: \\<account name>.file.core.windows.net\<share name> /u:<account name> <account key>

C:\>net use z: \\myaccount.file.core.windows.net\myshare /u:myaccount StgAccKey==
The command completed successfully.
 
C:\>dir z:\
  Volume in drive Z has no label.
  Volume Serial Number is 4038-F841
 
  Directory of z:\
 
  08/06/2013 10:51 AM 15 HelloFromWindosAzureFileService.txt
  1 File(s) 15 bytes
  0 Dir(s) 109,951,162,777,600 bytes free
 
C:\>type z:\HelloFromWindowsAzureFileService.txt
Hello World

ファイル共有のマッピングを削除するには、「net use z: /delete」コマンドを使用します。

Azure Fileにデータを移動させる方法

Azure BlobからAzure Fileはサービス隔離されています。

プレビューでは、Azure BlobからAzure Fileへのファイルコピーはサポートしていません。

さらに、プレビュー中は、Microsoft Import/Exportサービスもサポートしません。

詳細なロードマップは将来的には提供します。

プレビューの間、オンプレミスからAzure Fileサービスへのファイル転送は提供しています。

  • net use z: \\<account name>.file.core.windows.net\<share name> /u:<account name> <account key>
  • AzCopy

    AzCopyバージョン2.4で、ローカルからAzure Fileへのデータの行き来をサポートしました。

    Azure Fileにファイルを置いてしまえば、同じリージョン内にあるクラウド仮想マシンからSMBプロトコル経由で簡単にアクセスすることができます。

    ファイルサーバーで、「myfileshare」と呼ばれる共有を作成した場合、

    ローカルディスクからAzure Fileへのファイルアップロード

    AzCopy d:\test\ https://myaccount.file.core.windows.net/myfileshare/ /DestKey:key /s

    パターンに当てはまるファイルをローカルからAzure Fileへアップロードする

    AzCopy d:\test\ https://myaccount.file.core.windows.net/myfileshare/ /DestKey:key ab* /s

    Azure Fileから全てのファイルをローカルにコピーする

    AzCopy https://myaccount.file.core.windows.net/myfileshare/ d:\test\ /SourceKey:key /s

    プレビュー中は、AzCopyで次のシナリオはサポートしていません。

    ・Azure BlobとAzure File間のファイルコピー。同様にAzure File間のコピー。

    ・セカンダリリージョンからAzure Fileデータの読み取り

    ・Azure FileにShare Access Signature(SAS)を使用して接続すること

Storage Client Library 4.0 (又はREST APIバージョン2014-02-14)

Storage Client library 4.0は、サービスへのファイルアップロードと書き込みに対応しています。

共有がマッピングされた仮想マシンへのリモート接続

ファイルエクスプローラーの使用

・エクスプローラーでリモートセッションでローカルマシンからファイル共有にコピペできます。

・リモートセッションにxcopyを使用してローカルドライブからコピーできます。

xcopy \\tsclient\c\software\demo\data\*\\bn1andredstagesmb.file.core.windows.net\myshare\data\.

・Azure VMにリモート接続し、リモートセッションでローカルリソースを共有します。

image

SMBとRESTインターフェイス間の交流

SMB2.1とRESTの2種類のインターフェイスでAzure Fileは共有できます。

SMBクライアントですでに開いているファイルにRESTで操作をするとき、REST操作は、SMBクライアントによる共有モードを優先します。

詳細は、MSDNライブラリに記載されています。

REST操作とSMBアクセスモードとの互換性については、元記事を参照してください。

Azure FileとAzure BlobとAzure Diskの比較

それぞれ長所があります。

Azure File

ファイルアクセスインターフェイスとしてSMB2.1とRESTを提供します。ファイルの読み書きにネイティブファイルシステムAPIを使用するようなアプリケーションをクラウドで使用できるようになります。

1共有あたり5TBに制限されています。

Azure Blob

スケールアウトに圧倒的なアドバンテージがあるRESTインターフェイスです。

1コンテナーあたり最大500TBまでスケールします。

「copy blob」や「snapshots」APIに対応してます。

Azure Disk

Azure StorageのページブロブでVHDにフォーマットされたディスクを、永続化領域としてAzure仮想マシンにアタッチさせることができます。VHDは一つの仮想マシンだけで使え、複数の仮想マシンから共有アクセスをすることはできません。

項目 Blob Disk Files
最大サイズ 500TB/コンテナ 1TB 5TB / 1ファイル1TB
最大8KB IOPS 60MB/s Blob毎 500IOPS 1000IOPS
スループット 1TB/blob 60MB/s Disk 60MB/s File

価格

新しいSMBサービスの価格は、ここで公開されています。プレビューの間は、GA価格の50%OFFで提供されます。

SMB互換性

SMB2.1では多くの機能が提供されています。

名前付きパイプやデータストリームに対応していません。詳細については、ドキュメントを参照してください

FAQ

1.SMB 3.0はサポートされますか?

現在は2.1をサポートしています。

3.0については将来的には提供しますが、まだ提供時期を共有できる状態ではありません。

2.Active Directoryベースの認証をサポートしていますか?

ADやACLでの認証をサポートしていませんが、計画はあります。

Azure Storage アカウントキーを使用すれば、認証と承認を提供します。

3.ストレージアカウントをホストしているリージョンの外からFile Shareにアクセスできますか?

SMB2.1プロトコルは、ストレージアカウントと同じリージョン内のみ提供しています。REST APIはどこからでもあくせすすることができます。

5.Linuxからマウントできますか?

ポータルで提供している最近の2つのUbuntuイメージのみ対応しています。

linuxから共有をマウントするには、最初にクライアントツールをインストールする必要があります。

sudo apt-get install cifs-utils
sudo mount -t cifs //myaccountname.file.core.windows.net/mysharename ./mymountpoint -o vers=2.1,username=myaccountname,password=StorageAccountKeyEndingIn==,d

/etc/fstabにマウントされます。

7.Azure File用のPowerShellコマンドレットのインストール方法

最初にモジュールをダウンロードする必要があります。

zipを解答して、AzureStorageFileフォルダーを「%UserProfile%\Documents\WindowsPowerShell\Modules」にコピーします。

8.新しいエミュレーターでAzure Fileはサポートされますか?

Azure File用のSMBやREST APIはサポートされません。

Windows Azure

Microsoft Azureに複数のロールをデプロイして、ロードバランサーのテストをしていると、ロードバランサーが動作していないように感じます。

  1. クライアントからの全てのリクエストが一つのインスタンスで受信される。二つ目のインスタンスは受信しない。
  2. 複数のクライアントを使用した時のみ、時々2つ目のインスタンスが呼び出される。

1つのクライアントから複数のリクエストをしても同じマシンにアクセスし続ける。

 

2つのクラインと殻リクエストをすると、1つ目のクライアントは1つ目のマシンに、2つ目のクライアントは2つ目のマシンにアクセスし続ける。

結論

Azureのロードバランサーは新しいTCPコネクションを受信するとラウンドロビンでロードバランシングしますが、新しいHTTPリクエストの受信ではラウンドロビンしません。

cloudapp.netのURLにリクエストを送信すると、LBはTCPコネクションでルーティングします。アプリケーションがHTTPリクエストを送信するときに同じTCPコネクションを利用するので、同じマシンにアクセスします。

別のマシンにラウンドロビンさせるには、TCPコネクションをブレイクして、新しいTCPコネクションを接続する必要があります。既存のTCPコネクションがKillされるまで、HTTPリクエストは同じマシンにルーティングされ続けます。

HTTPリクエストの変わりに新しいTCPコネクションを作成するには、たとえば同じクライアント上の複数のブラウザを使用することで対応できます。

Connections To Azure Role Not Getting Load Balanced Between Instancesを一部意訳しました。