Azure App ServiceへのAzure Storageマウント機能がGAされていたらしいのでためしてみた

2021.09.11

いわさです。

知らなかったのですが、Azure App Service on LinuxにてAzureストレージコンテナをマウント出来るらしいです。

カスタムコンテナーでも対応しているようなので、通常のマウントと同じ感じであれば永続ストレージとして気軽に使えそうです。
少し触って確認してみました。

ためしてみた

Blobコンテナーをマウント。ポータルから設定するのみで簡単

アプリ構成->パスのマッピングから、マウントの設定を行うことが出来ます。

マウント後、Web SSHでアクセスして確認してみます。

  _____
  /  _  \ __________ _________   ____
 /  /_\  \___   /  |  \_  __ \_/ __ \
/    |    \/    /|  |  /|  | \/\  ___/
\____|__  /_____ \____/ |__|    \___  >
        \/      \/                  \/
A P P   S E R V I C E   O N   L I N U X

Documentation: http://aka.ms/webapp-linux
PHP quickstart: https://aka.ms/php-qs
PHP version : 8.0.3
Note: Any data outside '/home' is not persisted
root@7dfab1914ab5:/hogemount# df -h
Filesystem                                                                             Size  Used Avail Use% Mounted on
none                                                                                    48G   29G   18G  63% /
tmpfs                                                                                   64M     0   64M   0% /dev
tmpfs                                                                                  962M     0  962M   0% /sys/fs/cgroup
shm                                                                                     62M     0   62M   0% /dev/shm
//10.0.160.10/volume-24-default/40eb363fed953cc0b614/e761e9dfb6644e919e4a8ee5cb7585c2 1000G  6.7G  994G   1% /home
/dev/sda1                                                                               62G   39G   23G  63% /appsvctmp
blobfuse                                                                                35G  1.4G   32G   5% /hogemount
/dev/loop0p1                                                                            48G   29G   18G  63% /etc/hosts
udev                                                                                   944M     0  944M   0% /dev/tty
tmpfs                                                                                  962M     0  962M   0% /proc/acpi
tmpfs                                                                                  962M     0  962M   0% /proc/scsi
tmpfs

マウントされていますね。
マウントパスで指定されるディレクトリはマウントされると削除されてしまうので、空のディレクトリを指定するように注意してください。

マウントされた先でファイルを作成してみます。

root@7dfab1914ab5:/hogemount# touch hoge.txt
touch: cannot touch 'hoge.txt': Read-only file system

失敗しました。読み取り専用だと。

Blobストレージのマウントは読み取り専用のみ、Azure Filesであれば書き込みも可能

よく読んで見るとドキュメントには以下の記載がありました。

Azure Files (読み取り/書き込み)。
Azure BLOB (読み取り専用)。

では、Azure Filesでもマウントをしてみましょう。
ちなみに、Azure FilesというのはAzureストレージのファイル共有サービスのことです。

ストレージアカウントのファイル共有メニューから作成することが出来ます。

早速、新たなファイル共有を作成したので、もう一度Azure App Serviceへマウントさせてみましょう。

追加でマウントさせることが可能ですが、「アプリあたりマウントポイントは最大5つまで」という制限があるようです。

  _____
  /  _  \ __________ _________   ____
 /  /_\  \___   /  |  \_  __ \_/ __ \
/    |    \/    /|  |  /|  | \/\  ___/
\____|__  /_____ \____/ |__|    \___  >
        \/      \/                  \/
A P P   S E R V I C E   O N   L I N U X

Documentation: http://aka.ms/webapp-linux
PHP quickstart: https://aka.ms/php-qs
PHP version : 8.0.3
Note: Any data outside '/home' is not persisted
root@326df947faf6:/home# df -h
Filesystem                                                                             Size  Used Avail Use% Mounted on
none                                                                                    48G   29G   18G  63% /
tmpfs                                                                                   64M     0   64M   0% /dev
tmpfs                                                                                  962M     0  962M   0% /sys/fs/cgroup
shm                                                                                     62M     0   62M   0% /dev/shm
//10.0.160.10/volume-24-default/40eb363fed953cc0b614/e761e9dfb6644e919e4a8ee5cb7585c2 1000G  6.7G  994G   1% /home
/dev/sda1                                                                               62G   39G   23G  64% /appsvctmp
blobfuse                                                                                35G  1.4G   32G   5% /hogemount
//iwasastorage20210908.file.core.windows.net/hoge-share                                5.0T     0  5.0T   0% /hogewrite
/dev/loop0p1                                                                            48G   29G   18G  63% /etc/hosts
udev                                                                                   944M     0  944M   0% /dev/tty
tmpfs                                                                                  962M     0  962M   0% /proc/acpi
tmpfs                                                                                  962M     0  962M   0% /proc/scsi
tmpfs

追加のマウントとが出来たので、ファイルを作ってみましょう。

root@326df947faf6:/home# cd /hogewrite/
root@326df947faf6:/hogewrite# touch hoge.txt

作成できたました。
Azureポータルからも見てみるとファイルが格納されていることが確認出来ます。

なお、マウントされていてもApp Serviceのバックアップ機能ではマウントしたストレージコンテナはバックアップされないので、Azure ストレージ側でバックアップ対策を取る必要がある点にも注意してください。

さいごに

ストレージサービスをマウントしてええんかいという声も聞こえてきそうですが、ドキュメントでは容量やスループットの要件に応じて適切に使い分けることがベストプラクティスだと記載されています。
以下に、スケーラビリティとパフォーマンスターゲットというページがあり、どういう性能要件のときにこれらが利用できそうなのか参考になると思います。

なお、SQLiteなどのローカルデータベースに利用したりすることは非推奨となっており、ファイルハンドルやロックに依存するアプリケーションで利用することも非推奨となっています。
ユースケースとしては動画や画像などの静的コンテンツを共有したりログファイルのアーカイブ先に直接使うような用途が想定されているようです。