0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure Files 新 SDK(Azure.Storage.Files.Shares)移行時にハマったポイントまとめ

0
Posted at

Azure Files 新 SDK(Azure.Storage.Files.Shares)移行時にハマったポイントまとめ

はじめに

Azure Files を .NET アプリケーションから操作する場合、
従来は Microsoft.WindowsAzure.Storage(旧 SDK)を利用しているケースが多くありました。

しかし現在は、
Azure.Storage.Files.Shares(いわゆる v12 系の新 SDK) への移行が推奨されています。

本記事では、
実際に 旧 SDK → 新 SDK へ移行した際に発生した事象 と、
調査・整理したポイントを備忘録としてまとめます。


前提環境

  • アプリケーション種別
    • Console Application
  • .NET バージョン
    • 旧 SDK:.NET Framework 4.7.2
    • 新 SDK:.NET 6 / 7 / 8
  • 利用サービス
    • Azure Files(SMB)
  • SDK
    • 旧:Microsoft.WindowsAzure.Storage
    • 新:Azure.Storage.Files.Shares

旧 SDK と新 SDK の大きな違い

API 設計の違い

観点 旧 SDK 新 SDK
名前空間 Microsoft.WindowsAzure.Storage Azure.Storage.Files.Shares
API 同期 API が中心 非同期 API が前提
例外設計 比較的寛容 REST API の結果を厳密に反映

新 SDK は Azure Storage REST API の挙動をより正確に反映 する設計になっており、
「今まで通っていた処理が例外になる」ケースが発生し得ます。


新 SDK の最小構成サンプル(Console App)

using Azure.Storage.Files.Shares;

string connectionString =
    "DefaultEndpointsProtocol=https;" +
    "AccountName=<account>;" +
    "AccountKey=<key>;" +
    "EndpointSuffix=core.windows.net;";

var serviceClient = new ShareServiceClient(connectionString);
var shareClient   = serviceClient.GetShareClient("share-name");

if (!shareClient.Exists())
{
    Console.WriteLine("Share does not exist");
    return;
}

var rootDir = shareClient.GetRootDirectoryClient();
var subDir  = rootDir.GetSubdirectoryClient("input");

ポイント

  • Azure.Storage.Files.Shares(新 SDK)は仕様準拠で挙動が厳密

    • Azure Storage REST API の結果をそのまま反映する設計
    • 旧 SDK より例外が発生しやすい
  • GetSubdirectoryClient() は存在確認を行わない

    • クライアント生成のみ
    • 実在チェックが必要な場合は Exists() を明示的に呼ぶ必要あり
  • 旧 SDK の「動いていた」は仕様保証ではない

    • 0 バイトファイルなどの境界値は特に注意
    • 実装上たまたま通っていただけの可能性がある

移行時の注意点

1. 旧 SDK で問題なかった処理を前提にしない

  • 新 SDK では以下のケースで例外が発生しやすい
    • 0 バイトファイルの作成・アップロード
    • 存在しないディレクトリへの操作
    • 権限不足・アクセス拒否時の処理

2. 事前チェックを必ず実装する

0 バイトファイルのチェック

if (fileSize == 0)
{
    // スキップ、ログ出力、またはエラー扱いなど
}

調査・説明時の整理ポイント

調査や説明を行う際は、以下を分けて整理するとよいです。

公式にサポートされている仕様

  • Microsoft Learn や公式ドキュメントに明記されている挙動
  • サポート可否を明確に判断できる内容
  • 将来的な SDK 更新でも前提として扱えるもの

実装上の挙動(ドキュメントに根拠がないもの)

  • 公式ドキュメントに明記されていないが、実際には動作している挙動
  • 旧 SDK の実装に依存して「たまたま動いていた」可能性があるもの
  • 新 SDK では例外やエラーとして扱われる可能性があるもの

まとめ

  • Azure Files の新 SDK(Azure.Storage.Files.Shares)は
    より厳密で仕様に忠実な挙動を採用している

  • 旧 SDK から移行する際は、次の点を重点的に確認することが重要

    • 暗黙に通っていた処理
    • 境界値(特に 0 バイトファイル)
  • 「旧 SDK で問題なかった」という事実は、
    新 SDK でも同様に動作することを保証するものではない

    ということで、新SDKに行こうする際は、想定された動作をするのかを確認し、
    新SDKの挙動にあった処理を実装するようにしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?