ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

ローカルでの ASP.NET Core アプリケーション開発で Azurite V3 を試してみた

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 を実行できます。

f:id:TonyTonyKun:20211101175835p:plain

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 への移行を検討してみてください。