【第1回】Azureで社内システム再現(オンプレ編)|Azure FilesとIISでアプリをホスト
概要
「Azureで社内システム再現(オンプレ編)」では、
AzureのIaaSサービスを使って簡単な社内システムを再現します。
機能としては、社員番号を入力して検索ボタンを押すと、
対応する名前を表示するだけのシンプルなものです。
※詳しい全体構成については、【第0回】Azureで社内システム再現(オンプレ編)|構成図と動作の流れで紹介しています。
システム構成(今回の対象範囲)
以下は、最終的に構築を目指す全体構成図です。
この記事では、赤枠で囲っている部分が対象です。
IISからAzure Filesに配置したアプリケーションのファイル(HTML / JavaScript)を参照して表示する構成を作成します。
IISではこの共有フォルダをマウントして参照しており、Webページとしてそのまま配信できる構成です。
これにより、アプリの更新時はAzure Files上のファイルを差し替えるだけで反映されるようにします。
Azure Filesの作成とファイルの配置
Azure Portalから、ストレージアカウントを作成し、その中にファイル共有(Azure Files)を作成します。
作成したファイル共有には、Webアプリケーションで使用する静的ファイルをアップロードしておきます。
これらのファイルは、後ほどIISサーバーからマウントして参照することになります。
IISサーバーへのマウント(Azure Files)
作成したAzure Filesは、IISをインストールした仮想マシン上にネットワークドライブとしてマウントします。
今回は、Yドライブとして割り当てました。
エクスプローラ上でも、正常にマウントされていることが確認できます。
IISでの仮想ディレクトリ設定
IISでは、マウントしたYドライブを仮想ディレクトリとして設定し、Web上に公開します。
仮想ディレクトリ名は employee-app
とし、物理パスには Azure Files の UNC パス(\\<ストレージアカウント名>.file.core.windows.net\<ファイル共有名>
)を指定しました。
※注意
Y:\
のようなネットワークドライブ経由のパスを指定すると、IISの実行ユーザーからアクセスできないことがあります。
そのため、仮想ディレクトリには UNC パスを直接指定することが推奨されます。
アクセス時のエラーと対処
仮想ディレクトリの設定を終え、ブラウザからアクセスを試みたところ、403エラーが発生しました。
403エラーは、アクセス権限が不足している場合によく発生します。
そのため、IISがAzure Filesに対してアクセスできていない可能性があると考えました。
調査を進める中で、以下の参考サイトを発見しました。
Azure FilesをWindowsでユーザー指定マウントする方法(jpaztech.github.io)
このページでは、PowerShellの New-SmbGlobalMapping
コマンドを使って、
Azure Filesを“他のユーザーからも利用できる状態で”マウントする方法が紹介されています。
通常の net use
コマンド※によるマウントでは、コマンドを実行したユーザーにしかマウントが見えません。
※Azure Portalの「接続」メニューで表示されるPowerShellスクリプトにも使われている一般的なマウント方法
そのため、IISなど別のユーザー(たとえば IUSR
やアプリケーションプールの実行アカウント)からは、Azure Filesにアクセスできず、403エラーになったんじゃないかなと考えました。
New-SmbGlobalMapping
コマンドの実行
以下のコマンドを使用して、Azure Files を Yドライブにマウントしました。
# ストレージアカウント名をユーザー名として指定
$User = "localhost\<ストレージアカウント名>"
# アクセスキーをパスワードとして指定
$PWord = ConvertTo-SecureString -String "<ストレージアカウントアクセスキー>" -AsPlainText -Force
# 認証情報(Credential)を作成
$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord
# Azure Files を Y ドライブにマウント(他のユーザーからも参照できるように)
New-SmbGlobalMapping -RemotePath "\\<ストレージアカウント名>.file.core.windows.net\<ファイル共有名>" -Credential $Credential -LocalPath Y: -Persistent $true
アクセス確認
グローバルマウントを行った後、ブラウザから再度アクセスを試みたところ、
Webページが正常に表示されるようになりました。
これで、Azure Files 上に保存された HTML / JavaScript ファイルを、
IIS を通じて Web ページとして配信できることが確認できました。
Discussion