Azure Web App for ContainersとはAzureが提供するPaaSでWebアプリケーションの入ったDockerイメージを簡単に動かすことができるサービスです。
デフォルトではWebアプリケーション実行中にユーザーからアップロードされたファイルやプログラムが作ったファイルなどを永続化して保持することができませんが、設定を変更することでファイルの永続化をすることができ、インスタンスを増やしても共通のストレージを見ることができます。
WEBSITES_ENABLE_APP_SERVICE_STORAGEの環境変数をtrueにする
Azure Web AppのConfigurationで、Application settingsとして環境変数をセットできるので、そこでWEBSITES_ENABLE_APP_SERVICE_STORAGEをtrueにセットします。これで永続ストレージが有効になります。
/homeディレクトリ以下に保存したいファイルを設置する。
Azure Web App for Containerは上記の環境変数をtrueにすると、Container起動時に/homeディレクトリに永続ストレージをVolumeとしてアタッチします。そのため、/homeディレクトリ以下にファイルを保存するとその他のインスタンスからでもそのファイルが参照できるようになります。
/homeディレクトリにファイルを保存するように変更する方法として、以下の方法が考えられます。
- アプリケーション側で/homeディレクトリにファイルを保存するように変更する
- コンテナの起動スクリプトでファイルの保存先となるディレクトリから/home以下にシムリンクを貼る
1の方法はそのままなので説明は省くとして、2の方法でシムリンクを貼るときにわざわざDockerfileではなく、起動スクリプトで貼るようにしている理由ですが、Dockerfile内で/homeディレクトリにシムリンクを貼ってもContainer起動時にVolumeがアタッチされると/homeディレクトリへのシムリンクが削除されてしまうからです。
終わりに
これでAzure web app for containersでもユーザーがアップロードした画像をローカルに保存するだけで、他のインスタンスからでも参照できるようになります。
WordPressやEC-CUBEのようなOSS CMSを使う場合には重宝するので、ぜひ参考してください。
参考