複数台のサーバで同一のコンテンツを共有する方法 〜 第2回

今回は前回作成したLinuxマシンにてAzure Filesをマウントし、同一のコンテンツを配信させることを試してみたいと思います。

参考となるドキュメントはこちら。

https://azure.microsoft.com/ja-jp/documentation/articles/storage-how-to-use-files-linux/

現在のドキュメントによると、注意点としてはLinuxマシンとAzure Filesは同一のリージョンを使うようにとのこと。

前回Virtual Machine Scale Setsで作成されたストレージアカウントを使うことにします。

Azure Filesの準備

Azure Filesの準備をするのですが、ここはツールを駆使して楽をしてみたいところ。ということで、Azure Storage Explorerを使ってみます。

http://storageexplorer.com/

サイトにアクセスするとお使いのプラットフォーム用のダウンロードが可能なボタンが表示されるのでクリックし、インストールを進めてください。

ここでは細かい使い方は割愛しますが、Explorerの左上に人型のアイコンがあるので、そこからお使いのアカウントを追加します。

アカウントの認証が終わると、ストレージアカウントの一覧が表示されるので、VMSSが作成したアカウントを見つけます。

File Shareという部分を右クリックし、Create File Shareを実行します。コンテナ名はお好きにどうぞ。(私はcontentsという名前にしました。)
この名前は、以降の作業で使いますのでメモしておいてください。

以上でひとまずAzure Filesの準備は完了です。

ダミーコンテンツの準備

今回はVisual Studio Codeを使ってダサいHTMLを作成し、Azure Filesへ入れておくようにします。VScodeをまだお使いになったことがない場合はこの機会にぜひ。

以下はインストール完了済みとして進めます。

VScodeを立ち上げると右下はプレーンテキストとなって、新規ファイルが編集できる状態になると思います。

このプレーンテキストという部分をクリックすると、言語モードの変更ができます。 るのでHTMLと打ち変更します。

右下がHTMLに変わっていると思います。

次に編集する部分に!を一つだけ書きます。

そして、おもむろにTABキーを入力すると・・・

一番HTML簡単なHTML5が出来上がります。

適当に直して、index.htmlというファイル名で保存してきましょう。

次に、作成したファイルをAzure Filesにアップロードします。もう一度、Storage Explorerに戻ってください。

先ほど作成したコンテナを右クリックするとメニューが表示されるので、Open File Share Editorを選びます。

画面の右ペインが変化するので、こちらへindex.htmlをドラッグアンドドロップします。これでファイルがアップロードされます。

以上でダミーコンテンツの準備は完了です。

LinuxにAzure Filesをマウントする

冒頭紹介した参考になるドキュメントを読みながら作業します。 まずは、VMにSSHでログインし、必要なインストールを済ませます。

sudo apt-get install cifs-utils  

筆者の環境では cifs-utils is already the newest version. と表示され、すでにインストールされておりました。

次に、mountします。ドキュメントには以下のようにコマンドが書かれております。

 sudo mount -t cifs //myaccountname.file.core.windows.net/mysharename ./mymountpoint -o vers=3.0,username=myaccountname,password=StorageAccountKeyEndingIn==,dir_mode=0777,file_mode=0777

まず、mysharenameですが、これはExplorerで作成したコンテナの名前です。(私はcontents) 次のmymountpointはVMに作成するディレクトリ名です。後ほど作成しますので、ここでは作業しません。

次がusernameとpasswordです。myaccountnameはストレージアカウント名、StorageAccountKeyEndinglnという部分はキーになります。Storage Explorerで確認しましょう。

コンテンツを入れたコンテナの上位にあるコンテナ名をクリックします。

ウインドウの左下のプロパティを見てみます。

nameという部分がmyaccoutnameの部分になり、primary keyかSecondary KeyがStorageAccountKeyEndinglnになりますので、コピーしておきましょう。

あと、先ほどアップロードしたindex.htmlを選びウインドウ上部のCopy URLをクリックします。適当な編集できるところに張り付けて加工しましょう。

以下は私の環境でコピーしたURLです。

https://2auioqmsclhx4pakuesetksa.file.core.windows.net/contents/index.html  

https:と/index.htmlを削除すると、ちょうどmountコマンドと同じレイアウトになります。

//2auioqmsclhx4pakuesetksa.file.core.windows.net/contents

これで必要な情報は揃いましたので、コマンドを作成しておきましょう。 以下、サンプルです。

sudo mount -t cifs //2auioqmsclhx4pakuesetksa.file.core.windows.net/contents ./contents -o vers=3.0,username=2auioqmsclhx4pakuesetksa,password=ocAAAAAAAAqpnDOHn67uDLtI/K2DDDDDDD+Dur/wBwhyf4DC+cSSrphIwsPVf7BHxxapsK3nOLvufhOnCw==,dir_mode=0777,file_mode=0777  

では、作成したコマンドを実行します。

マウントの実行

私は/usr/srcの下にcontentsというディレクトリを作成し、mountコマンドを実行しました。以下、実行した様子です。

lsとcatでファイルの存在とファイルの中身を表示して確認しました。はい、ばっちりアクセスできていますね。

次にNginxをインストールし、confを調整して/usr/src/contentsを参照するようにし、アクセスできるようにしましょう。

sudo apt-get install nginxでnginxのインストールを行い、/etc/nginx/site-enables/defaultを編集します。

root /usr/share/nginx/html;という部分の先頭に#を入れてコメントアウトし、root /usr/src/contents;を加えました。

sudo service nginx restartにてnginxを再起動し、curl http://localhost/でアクセスしてみます。

はい、アクセスできました。アップロードしたHTMLが正しく表示されています。

以上の作業をもう一台にも実施しておきましょう。

ロードバランサーを調整

最後に外からアクセスできるよう、ロードバランサーの調整を行います。 ポータルからロードバランサーの画面を開き、設定の負荷分散規則を開きます。

追加を押すと、設定のブレードが表示されます。

おっと、プローブの設定が必要なようですね。メッセージをクリックして、設定に進みましょう。

プローブの画面でも追加をクリックし、設定にすすみます。

httpでの確認でよいので、名前にhttpといれてプロトコルをHTTPにします。それ以外はデフォルトでOKそうです。

プローブができたら、負荷分散規則のブレードに戻ります。

名前をhttpにしました。ポートは前も後ろも80です。

バックエンドプールとプローブを決めます。セッションの永続化は今回は使わないことにしました。(特に理由はありません) アイドルタイムアウトとフローティングIPはデフォルトのままです。

最後にOKを押すと、すぐにロードバランサーに規則が追加が開始されます。

最後にブラウザを開いてアクセスしてみましょう。

はい、無事表示されました!

コンテンツを更新してみる

最後に、コンテンツを更新してみます。 index.htmlを書き換え、Explorerでアップロードします。

エラーになりました。どうやら、同名のときはエラーになるようです。 Resolve All Conflictをクリックしてみましょう。

Upload and Replace Allを選ぶと、無事アップロード完了です。
もう一度ブラウザで見てみると・・・

はい、ばっちりですね。

まとめ

だいぶ手抜きをしておりますが、とりあえずVM2台にマウントし、コンテンツの配信ができました。コンテンツのアップデートもちゃんと反映されたので、ひとまず最低限のことは検証できました。

以上、2回で技術部分の調査完了です。 次回はちゃんと考えて、いくつかの疑問なども解決しPOCを完了させたいと思います。