Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

最近のAzure Client SDK事情

更新をサボっている間に、Azure Storage SDK for .NET の V11がリリースされていました。NuGet Gallery | Microsoft.Azure.Storage.Blob 11.0.0、現時点でリリースノートを見つけられないので、Breaking Changesがあったのかは不明です。特に変わってないようですが。

また、並行して 12.0 が preview されております。NuGet Gallery | Azure.Storage.Blobs 12.0.0-preview.1 こちらはがっつりパッケージ名、名前空間、APIが変わっている感じです。

最近は、 Azure/azure-sdk: Azure SDK Client SDKのガイドラインなども公表されており、この流れにそって各言語のSDKが再デザインされるような流れになっているのかもしれません。

細かい話は以下なども参考に。

今まで(11.0)

例えばいままでの有り触れたBlobへのファイルアップロードコードです。やっていることと言えば、

  • アカウント名とキーからクレデンシャルを作成
  • それを元にアカウントオブジェクトからのBlobClientを作成
  • なければコンテナ作って
  • Blobへのリファレンスオブジェクト作って
  • ファイルをアップロードすると。UploadメソッドもFromFileやらFromStream、FromByteArray などいくつか用意されていました。
   var creds = new StorageCredentials(name, key);
   var account = new CloudStorageAccount(creds, useHttps: true);
   var client = account.CreateCloudBlobClient();

   var contaier = client.GetContainerReference("container");
   contaier.CreateIfNotExists();
   var blob = contaier.GetBlockBlobReference("blob.txt");
   blob.UploadFromFile(@"c:\some.txt");

※ 書きようによってはもっと違う書き方もできますけど一例ということで。

これから (12.0-preview)

12.0 preview ですと、また名前空間が Azure.Storage.Blobsに変わってます。またコードもザクと変わってます(一例ですが)

  • CloudStorageAccountが無くなった
  • CloudBlobClientも無くなった
  • 例えばUploadなんかは、Streamしか引数を取ってくれない(ユーティリティ的なメソッドなし)
  • 代わりに生レスポンスが受け取れる
    var creds = new StorageSharedKeyCredential(accountName, key);
    var container = new BlobContainerClient(new Uri($"https://{accountName}.blob.core.windows.net/clientTest"), creds);
    Response<ContainerInfo> res = container.Create();

    // 生レスポンスが取れる
    // res.GetRawResponse().ClientRequestId;
    // res.GetRawResponse().Headers
    // res.GetRawResponse().ReasonPhrase;
    // res.GetRawResponse().Status;
    // res.GetRawResponse().ContentStream;

    // ContanierInfo
    // res.Value.ETag;
    // res.Value.LastModified;

    BlobClient blob = container.GetBlobClient("blob.txt");
    using (var stream = File.OpenRead(@"c:\some.txt"))
    {
        Response<BlobContentInfo> res2 = blob.Upload(stream);
    }

レスポンスなどに興味のある方は以下のリファレンスを参照してください。

Response Struct(Azure)-Azure for .NET開発者| Microsoft Docs

ContainerInfo Class (Azure.Storage.Blobs.Models) - Azure for .NET Developers | Microsoft Docs

何度目ですか?って思うくらいの大幅変更です。対応言語も増えましたし、はやり廃りもありますから、ライブラリの設計って難しいですね。 そいえば以前、Storage SDK for Java が先行して新しいSDKを出していましたが、似たような感じになっていくのかもしれません。 Azure storage SDK for java V10 (その1) - Azureの小ネタ (改)

ずっと流れを追っていれば変遷も分かるのですが、初学者はとっつきにくくなっている気もします。

以上