WindowsサーバのドライブにAzureストレージアカウントをマウントさせる

AzureにWindowsサーバを建てて、ドライブにAzureのストレージアカウントをマウントさせる機会が先日ありました。
サーバ構築はともかくストレージアカウントをマウントさせるのが思いの外めんどくさかったので備忘録がてらやり方をまとめてみる。Microsoftのページ読み返すのめんどくさいので...

#Azure PowerShellモジュールのインストール

まずはAzure PowerShellモジュールが必要らしいのでインストール。
Azure PowerShellモジュールはWindows環境からコマンドラインでAzureリソースを管理できるツールみたいです。

最初にPowerShellを立ち上げて以下のコマンドを実行
実行したらインストールするかしないか聞かれるのでyを入力しましょう。

```powershell:Powershell

Install-Module -Name Az -AllowClobber -Scope AllUsers
```
次にAzure PowerShellを使用して作業を開始するために、以下のコマンドを実行。
サインインするための画面が出てくるので後は自身のアカウントとパスワードを入れてサインインしましょう。

```powershell:Powershell

Connect-AzAccount
```

#ストレージアカウントに接続できるか確認

以下のコマンドを実行。変数regourceGroupNameとstorageAccountNameはマウントしたいストレージアカウントの情報を入力

```powershell:Powershell

$resourceGroupName = "<your-resource-group-name>"
$storageAccountName = "<your-storage-account-name>"
# This command requires you to be logged into your Azure account, run Login-AzAccount if you haven't
# already logged in.
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName
# The ComputerName, or host, is <storage-account>.file.core.windows.net for Azure Public Regions.
# $storageAccount.Context.FileEndpoint is used because non-Public Azure regions, such as sovereign clouds
# or Azure Stack deployments, will have different hosts for Azure file shares (and other storage resources).
Test-NetConnection -ComputerName ([System.Uri]::new($storageAccount.Context.FileEndPoint).Host) -Port 445
```
接続に成功したら以下のような出力結果が表示される
>
ComputerName     : &lt;storage-account-host-name>
RemoteAddress    : &lt;storage-account-ip-address>
RemotePort       : 445
InterfaceAlias   : &lt;your-network-interface>
SourceAddress    : &lt;your-ip-address>
TcpTestSucceeded : True

#Azureファイル共有の資格情報をWindowsで保持
ストレージアカウントの資格情報をcmdkeyを使ってWindowsに保持するために以下のコマンドを実行。
変数regourceGroupNameとstorageAccountNameはマウントしたいストレージアカウントの情報を入力

```powershell:Powershell

$resourceGroupName = "<your-resource-group-name>"
$storageAccountName = "<your-storage-account-name>"
# These commands require you to be logged into your Azure account, run Login-AzAccount if you haven't
# already logged in.
$storageAccount = Get-AzStorageAccount -ResourceGroupName $resourceGroupName -Name $storageAccountName
$storageAccountKeys = Get-AzStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName
# The cmdkey utility is a command-line (rather than PowerShell) tool. We use Invoke-Expression to allow us to 
# consume the appropriate values from the storage account variables. The value given to the add parameter of the
# cmdkey utility is the host address for the storage account, <storage-account>.file.core.windows.net for Azure 
# Public Regions. $storageAccount.Context.FileEndpoint is used because non-Public Azure regions, such as sovereign 
# clouds or Azure Stack deployments, will have different hosts for Azure file shares (and other storage resources).
Invoke-Expression -Command ("cmdkey /add:$([System.Uri]::new($storageAccount.Context.FileEndPoint).Host) " + `
    "/user:AZURE\$($storageAccount.StorageAccountName) /pass:$($storageAccountKeys[0].Value)")
```

ストレージアカウントの資格情報がcmdkeyによって保存されたことを以下のコマンドで確認

```powershell:Powershell

cmdkey /list
```
資格情報が保存されている場合以下のような出力結果が表示される

>
Target: Domain:target=&lt;storage-account-host-name>
Type: Domain Password
User: AZURE\<your-storage-account-name>

#マウント作業

以下のコマンドを入力するとWindowsサーバのZドライブにストレージアカウントteststorageのdataディレクトリ配下がマウントされる。

```powershell:Powershell

net use Z: \\teststorage.file.core.windows.net\data /persistent:Yes
```

正常にマウントされているかエクスプローラーから確認出来たらおしまい。

#余談
マウントのやり方は他にもエクスプローラーを起動→PCを選択→ネットワークドライブの割り当てをクリック...のようなコマンド打たないやり方もあるみたいですが何故か自分の環境は出来ませんでした。解せない...

#参照サイト
https://docs.microsoft.com/ja-jp/powershell/azure/install-az-ps?view=azps-3.5.0
https://docs.microsoft.com/ja-jp/azure/storage/files/storage-how-to-use-files-windows