はじめに
Azure SQL Database ではサブスクリプションごとに1つ無料で SQL Server を作成することができます。学習のため個人開発していたプロジェクトで使用していたのですが、この度完成し次のプロジェクトに取り掛かる際に接続先 DB を SQLite に変更しました。
その際に Azure App Service 上で SQLite を動作させることに苦労したため方法をまとめました。
EFCore でのプロパイダー変更方法については下記記事にまとめました。読んでくださると幸いです。
環境
- Windows11
- .Net8
- ASP.Net Core
- SQLite
結論
DB ファイルをwwwroot
配下に配置
wwwroot
フォルダが存在しない場合は手動で ASP.Net Core プロジェクトの直下に追加すれば大丈夫です。
解説
プロジェクト直下などに DB ファイルを配置しても正常に動かない原因
SQLite はサーバー構築が不要な軽量の RDB です。.db
や.sqlite
形式で保存された DB ファイルに対してアクセスを行います。
そのため SQLite を App Service 上で動作させるためには当たり前ですが.db
や.sqlite
ファイルが App Service 上に存在している必要があります。
そして通常ビルドの成果物にこれらの DB ファイルは含まれません。そのためローカルで確認した際には正常に動くのにいざデプロイすると全く動かないという現象が発生しました。
wwwroot
配下に DB ファイルを置くとうまくいく理由
アプリ発行を行うdotnet publish
の際に発行する対象について公式ページには以下のように記載があります。
ASP.NET Core Web アプリを発行するときは、次の資産が含まれます。
- ビルド成果物
- 次の glob パターンと一致するフォルダーおよびファイル:
- ***.config (例: web.config)
- ***.json (例: appsettings.json)
- wwwroot**
wwwroot
配下に配置したファイルはそのままの状態で発行されるアプリに含まれるため App Service に配置ができました。
備考
私が使用している環境が Asp.net Core であったため対応方法をそのまま記載しました。
本質としては AppService 上に DB ファイルが配置されていることであるため、他の言語でも同じ観点で対応すれば SQLite を使用することが可能です。
おわりに
ローカルでは正常に動くのにデプロイ環境でのみうまくいかない現象に初めて遭遇したためかなり苦戦しました。デプロイ周りは Visual Studio の力を借りてやっていたため深く理解するいい機会になったと思います。
この記事が皆様のコーディングライフの助けになれば幸いです!!
参考