LinuxのサーバからAzure FilesをSMBマウントする方法

# 概要
LinuxサーバからAzure上のストレージアカウントに作成したAzure Filesに
SMBマウントする方法です。
意外と簡単にできたんですが、マウントするサーバにAzure CLIをインストールする必要があり、諸事情で実作業では使えなかったので備忘録。。。

関連ページはこちら↓
[SMB Azure ファイル共有を Linux でマウントする](https://docs.microsoft.com/ja-jp/azure/storage/files/storage-how-to-use-files-linux?tabs=smb311)
[Linux に Azure CLI をインストールする](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-linux?pivots=dnf)

※今回はAzure上のRHEL8.1のサーバで検証しました。

# 手順
## ①Azure Filesの作成
Azure Portalからストレージアカウント上にAzure Filesを作成します。

1. Azure Portalにログインして、ストレージアカウントの画面を開く

1. 「ファイル共有」をクリックして、Azure Filesを作成する
![SnapCrab_No-0124.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/609611/9eaddb77-09b7-4a87-086a-1645d34049a6.jpeg)


## ②Azure CLIのインストール
Azure FilesをマウントするサーバにAzure CLIをインストールします。
※LinuxサーバからのマウントはAzure CLIのインストールが必須です。

1. 対象サーバにログインする

1. Microsoft リポジトリ キーをインポートする

    ``` Bash
    sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    ``` 
1. azure-cli リポジトリ情報を作成する

    ``` Bash
    echo -e "[azure-cli]
    name=Azure CLI
    baseurl=https://packages.microsoft.com/yumrepos/azure-cli
    enabled=1
    gpgcheck=1
    gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/azure-cli.repo
    ``` 

1. Azure CLIのインストールを実行する

    ``` Bash
    sudo dnf install azure-cli
    ``` 

1. ①のAzure Filesが存在しているサブスクリプションにログインする

    ``` Bash
    az login
    # 認証画面が開かれるため、必要な情報を入力して対象のサブスクリプションにログインしてください。
    ``` 


1. 対象のサブスクリプションが表示されることを確認

    ``` Bash
    az account list

    # 異なるサブスクリプションが表示されている場合は、以下のコマンドでサブスクリプションを変更してください。
    az account set --subscription <"対象のサブスクリプションID">
    ``` 

## ③Azure Filesのマウント
①で作成したAzure Filesに②のサーバからマウントします。

1. 対象のストレージアカウントへ接続確認（エラーが出力されないことを確認します）

    ``` Bash
    resourceGroupName="<接続するAzure Files(ストレージアカウント）が存在するリソースグループ名>"
    storageAccountName="<接続するAzure Filesが存在するストレージアカウント名>"
    fileShareName="<接続するAzure Files名>"

    httpEndpoint=$(az storage account show --resource-group $resourceGroupName --name $storageAccountName --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))
    fileHost=$(echo $smbPath | tr -d "/")

    nc -zvw3 $fileHost 445

    ``` 

1. サーバ上にマウントポイントを作成する

    ``` Bash
    mntRoot="<Azure Filesをマウントするフォルダ>"
    mntPath="$mntRoot/$storageAccountName/$fileShareName"
    sudo mkdir -p $mntPath 
    
    # mntpathで指定されているパスにフォルダが作成されていることを確認する   
    ``` 
1. 接続先のストレージアカウント情報を指定する

    ``` Bash
    httpEndpoint=$(az storage account show --resource-group $resourceGroupName --name $storageAccountName --query "primaryEndpoints.file" | tr -d '"')
    smbPath=$(echo $httpEndpoint | cut -c7-$(expr length $httpEndpoint))$fileShareName

    storageAccountKey=$(az storage account keys list --resource-group $resourceGroupName --account-name $storageAccountName --query "[0].value" | tr -d '"')
    ``` 
1. マウント実行

    ``` Bash
    sudo mount -t cifs $smbPath $mntPath -o username=$storageAccountName,password=$storageAccountKey,serverino
    ``` 

1. マウントされていることを確認する

    ``` Bash
    df -Th

    [root@XXXXXXXX ~] # df -Th
    Filesystem                                Type      Size  Used Avail Use% Mounted on
    devtmpfs                                  devtmpfs  3.8G     0  3.8G   0% /dev
    tmpfs                                     tmpfs     3.9G     0  3.9G   0% /dev/shm
    tmpfs                                     tmpfs     3.9G  8.7M  3.9G   1% /run
    tmpfs                                     tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
    /dev/mapper/rootvg-rootlv                 xfs       2.0G  329M  1.7G  17% /
    /dev/mapper/rootvg-usrlv                  xfs        10G  2.2G  7.9G  22% /usr
    /dev/mapper/rootvg-varlv                  xfs       8.0G  704M  7.4G   9% /var
    /dev/mapper/rootvg-homelv                 xfs      1014M   40M  975M   4% /home
    /dev/sda1                                 xfs       496M  144M  352M  30% /boot
    /dev/mapper/rootvg-tmplv                  xfs       2.0G   47M  2.0G   3% /tmp
    /dev/sda15                                vfat      495M  6.9M  488M   2% /boot/efi
    /dev/sdb1                                 ext4       16G   45M   15G   1% /mnt
    tmpfs                                     tmpfs     782M     0  782M   0% /run/user/1001
    ★//XXXXXXX.file.core.windows.net/testmedia cifs       10G     0   10G   0% /mount/XXXXX/testmedia
    # ↑ 2.で作成したマウントポイントにAzure Filesがマウントされていることを確認する
    ``` 



これでAzure Filesにマウントされました。
このあとは、通常の共有ファイルと同様、ストレージアカウント上からもサーバ上からも操作可能です。
試してはないですが、サーバの/etc/fstabに必要な情報を記載しておけば、サーバ起動時の自動マウントも可能みたいです。

***
以上です。

Linuxの操作嫌い＆Azureのコマンド操作はPowerShallしか基本使わないので、CLIよく分からない状態でやってみましたが、
それでも簡単にできたので、機会があれば使ってみようと思います。