Azure がリリースされて以来、かれこれ10年以上もお世話になってきた Azure Storage Emulator が非推奨となり、今後は Azurite を使うことが推奨されています。
最新の Azure Storage API がサポートされるのは Azurite になるので、ローカルでの ASP.NET Core アプリケーション開発を題材に試してみました。
docs.microsoft.com
Azurite をインストールする
Azurite V3 になって、Blob・Queue・Table の基本的な機能がサポートされるようになりました。接続文字列も UseDevelopmentStorage=true
が使えます。
github.com
Azurite V3 のインストールには、いくつかの方法があります。
- npm でインストールする
- Docker を使う
- VS Code 拡張機能を使う
今回は、ローカル開発端末の影響を受けにくく、CI/CD パイプラインの自動テストにも導入しやすい Docker を選択しました。
$ docker run --rm -it -p 10000:10000 -p 10001:10001 -p 10002:10002 -v c:/azurite:/data mcr.microsoft.com/azure-storage/azurite:3.12.0
この docker run
コマンドを実行するだけで、Azurite V3 を実行できます。
Storage のデータは永続化したいので、c:/azurite:/data
ディレクトリをマウントしています。Docker Image のバージョンは、latest でローカルに意図せずキャッシュされるのが好きではないので、バージョンを指定しています。--rm -it
のオプションはお好みで。
Blob
Azure Blob Storage SDK v12 を使って、Azurite の Blob Storage を操作してみました。
gooner.hateblo.jp
Azurite の Blob Storage に接続する際に、「The value for one of the HTTP headers is not in the correct format」という例外が発生してしまいます。
こちらの Issues に Bug として報告されており、workaround が提示されています。
github.com
使用する API バージョンをデフォルトの V2020_10_02
ではなく、V2020_06_12
に下げることで例外を回避できます。
public void ConfigureServices(IServiceCollection services) { var options = new BlobClientOptions ( BlobClientOptions.ServiceVersion.V2020_06_12 ); services.AddSingleton(new BlobServiceClient(Configuration["WebApi:StorageConnection"], options)); }
Table
Azure Data Tables SDK を使って、Azurite の Table Storage を操作してみました。
gooner.hateblo.jp
Queue
Azure Queue Storage SDK v12 を使って、Azurite の Table Storage を操作してみました。
gooner.hateblo.jp
まとめ
ローカルでの ASP.NET Core アプリケーション開発で、Azurite V3 を試してみました。
現時点では Blob だけ少し注意が必要ですが、いずれ Bug が修正されるはずです。
Azure Storage Emulator から Azurite への移行を検討してみてください。