다음을 통해 공유


.NET을 사용하여 Azure Files를 위한 개발

Azure Files를 사용하여 데이터를 저장하는 .NET 애플리케이션을 개발하는 방법을 알아봅니다. Azure Files는 클라우드의 관리되는 파일 공유 서비스입니다. 업계 표준 SMB(서버 메시지 블록) 및 NFS(네트워크 파일 시스템) 프로토콜을 통해 액세스할 수 있는 완전히 관리되는 파일 공유를 제공합니다. 또한 Azure Files는 파일 공유에 프로그래밍 방식으로 액세스하기 위한 REST API를 제공합니다.

이 문서에서는 .NET에서 Azure Files를 사용하여 개발하는 다양한 방법과 앱의 요구에 가장 적합한 방법을 선택하는 방법에 대해 알아봅니다. Azure Files 리소스와 상호 작용하는 기본 콘솔 앱을 만드는 방법도 알아봅니다.

적용 대상

관리 모델 청구 모델 미디어 계층 중복성 중소기업 네트워크 파일 시스템 (NFS)
Microsoft.Storage (마이크로소프트 저장소) 프로비전된 v2 HDD(표준) 로컬(LRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 프로비전된 v2 HDD(표준) 영역(ZRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 프로비전된 v2 HDD(표준) 지역(GRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 프로비전된 v2 HDD(표준) GeoZone(GZRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 프로비전된 v1 SSD(프리미엄) 로컬(LRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 프로비전된 v1 SSD(프리미엄) 영역(ZRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 종량제 HDD(표준) 로컬(LRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 종량제 HDD(표준) 영역(ZRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 종량제 HDD(표준) 지역(GRS) 예 아니요
Microsoft.Storage (마이크로소프트 저장소) 종량제 HDD(표준) GeoZone(GZRS) 예 아니요

Azure Files를 사용한 .NET 앱 개발 정보

Azure Files는 .NET 개발자가 Azure Files에서 데이터에 액세스하고 리소스를 관리하는 여러 가지 방법을 제공합니다. 다음 표에서는 접근 방식을 나열하고, 작동 방식을 요약하고, 각 방법을 사용하는 시기에 대한 지침을 제공합니다.

접근법 작동 방식 사용하는 경우
표준 파일 I/O 라이브러리 SMB 또는 NFS를 사용하여 탑재된 Azure 파일 공유를 통해 OS 수준 API 호출을 사용합니다. SMB/NFS를 사용하여 파일 공유를 탑재하는 경우 .NET과 같은 System.IO 프로그래밍 언어 또는 프레임워크에 파일 I/O 라이브러리를 사용할 수 있습니다. 현재 표준 파일 I/O를 사용하는 기존 코드가 있는 업무용 앱이 있으며, 이 앱이 Azure 파일 공유와 호환되도록 코드를 다시 작성하지 않으려는 경우
FileREST API HTTPS 엔드포인트를 직접 호출하여 Azure Files에 저장된 데이터와 상호 작용합니다. 파일 공유 리소스에 대한 프로그래밍 방식 제어를 제공합니다. Azure SDK는 FileREST API를 기반으로 빌드되는 파일 공유 클라이언트 라이브러리(Azure.Storage.Files.Shares)를 제공하여 친숙한 .NET 프로그래밍 언어 패러다임을 통해 FileREST API 작업과 상호 작용할 수 있도록 합니다. 고객을 위해 부가 가치 클라우드 서비스 및 앱을 빌드하고 있으며 이를 통해 System.IO사용할 수 없는 고급 기능을 사용하려고 합니다.
스토리지 리소스 공급자 REST API ARM(Azure Resource Manager)을 사용하여 스토리지 계정 및 파일 공유를 관리합니다. 다양한 리소스 관리 작업을 위해 REST API 엔드포인트를 호출합니다. 앱 또는 서비스는 스토리지 계정 또는 파일 공유 만들기, 삭제 또는 업데이트와 같은 리소스 관리 작업을 수행해야 합니다.

이러한 접근 방식에 대한 일반적인 내용은 Azure Files를 사용한 애플리케이션 개발 개요를 참조하세요.

이 문서에서는 다음 방법을 사용하여 Azure Files 리소스를 사용하는 방법에 중점을 둡니다.

필수 조건

환경 설정

이 섹션에서는 Azure Files를 사용할 .NET 콘솔 앱을 준비하는 단계를 안내합니다.

프로젝트를 만듭니다.

.NET 앱이 아직 없는 경우 Visual Studio 또는 .NET CLI를 사용하여 만듭니다. 이 문서에서는 간단히 하기 위해 콘솔 앱을 만듭니다.

  1. Visual Studio를 시작하고 새 프로젝트 만들기를 선택합니다. 또는 Visual Studio에 있는 경우>파일>프로젝트로 이동합니다.
  2. 대화 상자 창에서 C#용 콘솔 앱을 선택하고 다음을 선택합니다.
  3. 프로젝트의 이름을 입력하고 기본값을 그대로 두고 다음을 선택합니다.
  4. 프레임워크의 경우 설치된 최신 버전의 .NET을 선택합니다. 다른 기본값을 그대로 두고 만들기를 선택합니다.

패키지 설치

네임스페이스를 사용하여 System.IO Azure Files와 상호 작용하려는 경우 추가 패키지를 설치할 필요가 없습니다. System.IO 네임스페이스는 .NET SDK에 포함됩니다. .NET용 파일 공유 클라이언트 라이브러리 또는 .NET용 Azure Storage 관리 라이브러리를 사용하려는 경우 NuGet을 사용하여 패키지를 설치합니다.

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다.

  2. NuGet 패키지 관리자에서 찾아보기를 선택합니다. 그런 다음, 적절한 패키지를 검색하여 선택하고 설치를 선택합니다. 파일 공유 클라이언트 라이브러리의 경우 Azure.Storage.Files.Shares를 선택합니다. Azure Storage 관리 라이브러리의 경우 Azure.ResourceManager.Storage를 선택합니다. 암호 없는 연결에 필요한 Azure ID 라이브러리의 경우 Azure.Identity를 선택합니다.

    이 단계에서는 패키지 및 해당 종속성을 설치합니다.

지시문을 사용하여 추가

네임스페이스 System.IO를 사용하려는 경우, 파일 Program.cs의 맨 위에 다음 using 지시문을 추가하세요.

using System.IO;

.NET용 파일 공유 클라이언트 라이브러리를 사용하려는 경우 다음 using 지시문을 Program.cs 파일의 맨 위에 추가합니다.

using Azure.Storage.Files.Shares;

.NET용 Azure Storage 관리 라이브러리를 사용하려는 경우 다음 using 지시문을 Program.cs 파일의 맨 위에 추가합니다.

using Azure.ResourceManager;

Azure 서비스에 대한 암호 없는 연결에 Azure ID 라이브러리를 사용하려면 다음 using 지시문을 Program.cs 파일의 맨 위에 추가합니다.

using Azure.Identity;

System.IO와 사용하여 Azure Files 작업하기

표준 파일 I/O 라이브러리는 Azure Files 리소스에 액세스하고 작업하는 가장 일반적인 방법입니다. SMB 또는 NFS를 사용하여 파일 공유를 탑재하면 운영 체제에서 로컬 파일 시스템에 대한 API 요청을 리디렉션합니다. 이 방법을 사용하면 표준 파일 I/O 라이브러리(예: System.IO)를 사용하여 공유의 파일 및 디렉터리와 상호 작용할 수 있습니다.

앱에 다음이 필요할 경우 System.IO을(를) 고려하십시오.

  • 앱 호환성: 기존 코드에 이미 System.IO를 사용하는 기간 업무 앱에 이상적입니다. 앱이 Azure 파일 공유로 작동하도록 코드를 다시 작성할 필요가 없습니다.
  • 사용 편의성:System.IO 는 개발자가 잘 알고 있으며 사용하기 쉽습니다. Azure Files의 주요 가치 제안은 SMB 및 NFS를 통해 네이티브 파일 시스템 API를 노출한다는 것입니다.

이 섹션에서는 Azure Files 리소스를 사용하는 System.IO 방법을 알아봅니다.

자세한 내용 및 예는 다음 리소스를 참조하세요.

파일 공유 탑재

System.IO를 사용하려면 먼저 파일 공유를 마운트해야 합니다. SMB 또는 NFS를 사용하여 파일 공유를 탑재하는 방법에 대한 지침은 다음 리소스를 참조하세요.

이 문서에서는 다음 경로를 사용하여 Windows에서 탑재된 SMB 파일 공유를 참조합니다.

string fileSharePath = @"Z:\file-share";

예: 파일 공유에 연결하고 System.IO 사용하여 디렉터리 열거

다음 코드 예제에서는 파일 공유에 연결하고 공유의 디렉터리를 나열하는 방법을 보여줍니다.

using System.IO;

string fileSharePath = @"Z:\file-share";

EnumerateDirectories(@"Z:\file-share");

static void EnumerateDirectories(string path)
{
    try
    {
        List<string> dirs = new List<string>(Directory.EnumerateDirectories(path));

        foreach (var dir in dirs)
        {
            Console.WriteLine($"{dir.Substring(dir.LastIndexOf(Path.DirectorySeparatorChar) + 1)}");
        }
        Console.WriteLine($"{dirs.Count} directories found.");
    }
    catch (UnauthorizedAccessException ex)
    {
        Console.WriteLine(ex.Message);
    }
    catch (PathTooLongException ex)
    {
        Console.WriteLine(ex.Message);
    }
}

예: System.IO 사용하여 파일 공유의 파일에 쓰기

다음 코드 예제에서는 클래스를 사용하여 텍스트를 File 작성하고 추가하는 방법을 보여 줍니다.

using System.IO;

string fileSharePath = @"Z:\file-share";

WriteToFile(fileSharePath, "test.txt");

static void WriteToFile(string fileSharePath, string fileName)
{
    string textToWrite = "First line" + Environment.NewLine;
    string filePath = Path.Combine(fileSharePath, fileName);
    
    File.WriteAllText(filePath, textToWrite);

    string[] textToAppend = { "Second line", "Third line" };
    File.AppendAllLines(filePath, textToAppend);
}

예: System.IO 사용하여 파일 공유의 파일 잠금

파일 공유를 탑재하는 SMB 클라이언트는 파일 시스템 잠금 메커니즘을 사용하여 공유 파일에 대한 액세스를 관리할 수 있습니다.

다음 코드 예제에서는 파일 공유에서 None로 설정된 공유 모드로 파일을 잠그는 방법을 보여줍니다. 이 공유 모드는 파일을 닫을 때까지 현재 파일의 공유를 거부합니다.

using System.IO;

string fileSharePath = @"Z:\file-share";

LockFile(Path.Combine(fileSharePath, "test.txt"));

static void LockFile(string filePath)
{
    try
    {
        using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
        {
            Console.WriteLine("File locked.");

            // Do something with file, press Enter to close the stream and release the lock
            Console.ReadLine();

            fs.Close();
            Console.WriteLine("File closed.");
        }
    }
    catch (IOException ex)
    {
        Console.WriteLine(ex.Message);
    }
}

SMB 및 FileREST API를 모두 사용하는 경우 FileREST API는 임대 를 사용하여 파일 잠금을 관리하는 반면 SMB는 운영 체제에서 관리하는 파일 시스템 잠금을 사용합니다. SMB와 FileREST API 간의 파일 잠금 상호 작용을 관리하는 방법에 대한 자세한 내용은 파일 잠금 관리를 참조하세요.

예: System.IO 사용하여 파일 ACL 열거

다음 코드 예제에서는 파일에 대한 ACL(액세스 제어 목록)을 열거하는 방법을 보여 줍니다.

using System.IO;
using System.Security.AccessControl;

string fileSharePath = @"Z:\file-share";
string fileName = "test.txt";
string filePath = Path.Combine(fileSharePath, fileName);

EnumerateFileACLs(filePath);

static void EnumerateFileACLs(string filePath)
{
    FileInfo fileInfo = new FileInfo(filePath);

    // For directories, use DirectorySecurity instead of FileSecurity
    FileSecurity fSecurity = FileSystemAclExtensions.GetAccessControl(fileInfo);

    // List all access rules for the file
    foreach (FileSystemAccessRule rule in fSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
    {
        Console.WriteLine($"Identity: {rule.IdentityReference.Value}");
        Console.WriteLine($"Access Control Type: {rule.AccessControlType}");
        Console.WriteLine($"File System Rights: {rule.FileSystemRights}");
        Console.WriteLine();
    }

}

.NET용 파일 공유 클라이언트 라이브러리를 사용하여 Azure Files 데이터 작업

FileREST API는 Azure Files에 프로그래밍 방식으로 액세스할 수 있도록 합니다. 이를 통해 HTTPS 엔드포인트를 호출하여 파일 공유, 디렉터리 및 파일에 대한 작업을 수행할 수 있습니다. FileREST API는 네이티브 프로토콜을 통해 사용할 수 없는 높은 확장성 및 고급 기능을 위해 설계되었습니다. Azure SDK는 FileREST API를 기반으로 하는 .NET용 파일 공유 클라이언트 라이브러리와 같은 클라이언트 라이브러리를 제공합니다.

애플리케이션에 다음이 필요한 경우 FileREST API 및 파일 공유 클라이언트 라이브러리를 사용하는 것이 좋습니다.

  • 고급 기능: 네이티브 프로토콜을 통해 사용할 수 없는 작업 및 기능에 액세스합니다.
  • 사용자 지정 클라우드 통합: Azure Files와 직접 상호 작용하는 백업, 바이러스 백신 또는 데이터 관리와 같은 사용자 지정 부가 가치 서비스를 빌드합니다.
  • 성능 최적화: 데이터 평면 작업을 사용하는 대규모 시나리오의 성능 이점을 활용할 수 있습니다.

FileREST API는 Azure Files를 리소스 계층 구조로 모델화하며 디렉터리 또는 파일 수준에서 수행되는 작업에 권장됩니다. 파일 서비스 또는 파일 공유 수준에서 수행되는 작업에 스토리지 리소스 공급자 REST API를 사용하는 것이 좋습니다.

이 섹션에서는 파일 공유 클라이언트 라이브러리를 사용하여 Azure Files 리소스를 사용하는 방법을 알아봅니다.

자세한 내용 및 예는 다음 리소스를 참조하세요.

액세스 권한 부여 및 클라이언트 만들기

Azure Files에 앱을 연결하려면 개체를 만듭니다 ShareClient . 이 개체는 Azure Files 리소스를 사용하기 위한 시작점입니다. 다음 코드 예제에서는 다른 권한 부여 메커니즘을 사용 하 여 개체를 ShareClient 만드는 방법을 보여 줍니다.

Microsoft Entra ID로 권한을 부여하려면 보안 주체를 사용해야 합니다. 필요한 보안 주체의 유형은 앱이 실행되는 위치에 따라 달라집니다. 이 표를 가이드로 참조하세요.

앱이 실행되는 곳 보안 주체 안내
로컬 컴퓨터(개발 및 테스트) 서비스 주체 앱 등록, Microsoft Entra 그룹 설정, 역할 할당, 환경 변수 구성 방법을 알아보려면 개발자 서비스 주체를 사용하여 액세스 권한 부여를 참조하세요.
로컬 컴퓨터(개발 및 테스트) 사용자 ID Microsoft Entra 그룹을 설정하고, 역할을 할당하고, Azure에 로그인하는 방법을 알아보려면 개발자 자격 증명을 사용하여 액세스 권한 부여를 참조하세요.
Azure에서 호스트 관리형 아이덴티티 관리 ID를 사용 설정하고 역할을 할당하는 방법을 알아보려면 관리 ID를 사용하여 Azure 호스트된 앱에서 액세스 권한 부여를 참조하세요.
Azure 외부에서 호스트됨(예: 온-프레미스 앱) 서비스 주체 앱을 등록하고, 역할을 할당하고, 환경 변수를 구성하는 방법을 알아보려면 애플리케이션 서비스 주체를 사용하여 온-프레미스 앱에서 액세스 권한 부여를 참조하세요.

이 문서의 코드 예제를 사용하려면 Azure RBAC 기본 제공 역할 스토리지 파일 데이터 권한 있는 기여자를 보안 주체에 할당합니다. 이 역할은 설정된 파일/디렉터리 수준 NTFS 권한에 관계없이 구성된 모든 스토리지 계정에 대한 공유의 모든 데이터에 대한 전체 읽기, 쓰기, 수정 및 삭제 액세스를 제공합니다. 자세한 내용은 REST를 통해 Azure Files OAuth와 함께 Microsoft Entra ID를 사용하여 Azure 파일 공유에 액세스하세요.

DefaultAzureCredential을 사용하여 액세스 권한 부여

액세스 권한을 부여하고 Azure Files에 연결하는 쉽고 안전한 방법은 DefaultAzureCredential 인스턴스를 만들어 OAuth 토큰을 가져오는 것입니다. 그런 다음 해당 자격 증명을 사용하여 ShareClient 개체를 만들 수 있습니다.

다음 예에서는 ShareClient을 사용하여 권한이 있는 DefaultAzureCredential 개체를 만든 다음 공유의 디렉터리와 함께 작동할 ShareDirectoryClient 개체를 만듭니다.

using Azure.Identity;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;

// ...

string accountName = "<account-name>";
string shareName = "<share-name>";

ShareClientOptions options = new()
{
    AllowSourceTrailingDot = true,
    AllowTrailingDot = true,
    ShareTokenIntent = ShareTokenIntent.Backup,
};
ShareClient shareClient = new(
   new Uri($"https://{accountName}.file.core.windows.net/{shareName}"),
   new DefaultAzureCredential(),
   options);

ShareDirectoryClient directoryClient = shareClient.GetDirectoryClient("sample-directory");

사용자를 인증하는 데 사용할 자격 증명 유형을 정확히 알고 있는 경우 .NET용 Azure ID 클라이언트 라이브러리에서 다른 클래스를 사용하여 OAuth 토큰을 가져올 수 있습니다. 이러한 클래스는 TokenCredential 클래스에서 파생됩니다.

이러한 각 권한 부여 메커니즘에 대한 자세한 내용은 파일 데이터에 대한 액세스 권한을 부여하는 방법 선택을 참조하세요.

예: 파일 공유 클라이언트 라이브러리를 사용하여 파일 복사

다음 방법을 사용하여 파일 공유 내 또는 파일 공유 간에 파일을 복사할 수 있습니다.

BlobClient 개체에서 다음 메서드를 사용하여 파일을 대상 Blob에 복사할 수 있습니다.

다음 코드 예제에서는 다른 파일 공유의 파일에 파일을 복사하는 방법을 보여줍니다.

using Azure.Core;
using Azure.Identity;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;

string accountName = "<account-name>";
string srcShareName = "src-file-share";
string destShareName = "dest-file-share";
string srcFilePath = "src/path/to/file";
string destFilePath = "dest/path/to/file";

TokenCredential tokenCredential = new DefaultAzureCredential();

ShareClientOptions options = new()
{
    ShareTokenIntent = ShareTokenIntent.Backup,
};

ShareFileClient srcShareFileClient = new(
    new Uri($"https://{accountName}.file.core.windows.net/{srcShareName}/{srcFilePath}"),
    tokenCredential,
    options);

ShareFileClient destShareFileClient = new(
    new Uri($"https://{accountName}.file.core.windows.net/{destShareName}/{destFilePath}"),
    tokenCredential,
    options);

// Copy the file from the source share to the destination share

await destShareFileClient.StartCopyAsync(srcShareFileClient.Uri);

예: 파일 공유 클라이언트 라이브러리를 사용하여 파일 임대

임대는 임대 ID를 통해 Azure에서 관리하는 파일에 대한 잠금을 만듭니다. 임대는 분산 시스템의 여러 클라이언트에서 파일에 대한 액세스를 조정하는 메커니즘을 제공합니다. 파일에 대한 임대는 단독 쓰기 및 삭제 액세스를 제공합니다. 임대 상태 및 작업에 대한 자세한 내용은 임대 파일을 참조하세요.

다음 코드 예제에서는 임대 클라이언트를 만들고, 파일에서 무한 기간 임대를 획득하고, 임대를 해제하는 방법을 보여줍니다.

using Azure.Core;
using Azure.Identity;
using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;
using Azure.Storage.Files.Shares.Specialized;

string accountName = "<account-name>";
string shareName = "sample-file-share";
string filePath = "path/to/file";

TokenCredential tokenCredential = new DefaultAzureCredential();

ShareClientOptions options = new()
{
    ShareTokenIntent = ShareTokenIntent.Backup,
};

ShareFileClient fileClient = new(
    new Uri($"https://{accountName}.file.core.windows.net/{shareName}/{filePath}"),
    tokenCredential,
    options);

ShareLeaseClient leaseClient = fileClient.GetShareLeaseClient();

// Acquire a lease on the source file
await leaseClient.AcquireAsync(duration: ShareLeaseClient.InfiniteLeaseDuration);

// Do something with the file

// Release the lease
await leaseClient.ReleaseAsync();

SMB 및 FileREST API를 모두 사용하는 경우 FileREST API는 임대 를 사용하여 파일 잠금을 관리하는 반면 SMB는 운영 체제에서 관리하는 파일 시스템 잠금을 사용합니다. SMB와 FileREST API 간의 파일 잠금 상호 작용을 관리하는 방법에 대한 자세한 내용은 파일 잠금 관리를 참조하세요.

예: 파일 공유 클라이언트 라이브러리를 사용하여 공유 스냅샷 만들기 및 나열

공유 스냅샷은 특정 시점에 파일 공유의 읽기 전용 복사본입니다. 파일 공유의 스냅샷을 만든 다음 스냅샷을 사용하여 스냅샷을 만들 때 공유의 데이터에 액세스할 수 있습니다. 파일 공유의 모든 스냅샷을 나열하고 공유 스냅샷을 삭제할 수도 있습니다.

다음 코드 예제에서는 공유 스냅샷을 만들고, 파일 공유의 스냅샷을 나열하고, 공유 스냅샷에서 디렉터리 트리를 트래버스하는 방법을 보여 줍니다.

using Azure.Storage.Files.Shares;
using Azure.Storage.Files.Shares.Models;

string connectionString = "<connection-string>";

ShareServiceClient shareServiceClient = new ShareServiceClient(connectionString);
ShareClient shareClient = shareServiceClient.GetShareClient("sample-file-share");

// Create a snapshot

ShareSnapshotInfo snapshotInfo = await shareClient.CreateSnapshotAsync();
Console.WriteLine($"Snapshot created: {snapshotInfo.Snapshot}");

// List snapshots in a share

await foreach (ShareItem shareItem in shareServiceClient.GetSharesAsync(ShareTraits.All, ShareStates.Snapshots))
{
    if (shareItem.Snapshot != null)
    {
        Console.WriteLine($"Share: {shareItem.Name} (Snapshot: {shareItem.Snapshot})");
    }
}

// List directories and files in a share snapshot

string snapshotTimestamp = snapshotInfo.Snapshot.ToString();
ShareClient shareSnapshot = shareClient.WithSnapshot(snapshotTimestamp);
ShareDirectoryClient rootDir = shareSnapshot.GetRootDirectoryClient();

await ListDirectoryTreeAsync(rootDir);

static async Task ListDirectoryTreeAsync(ShareDirectoryClient directory)
{
    await foreach (ShareFileItem fileItem in directory.GetFilesAndDirectoriesAsync())
    {
        if (fileItem.IsDirectory)
        {
            Console.WriteLine($"Directory: {fileItem.Name}");
            await ListDirectoryTreeAsync(directory.GetSubdirectoryClient(fileItem.Name));
        }
        else
        {
            Console.WriteLine($"File: {fileItem.Name}");
        }
    }
}

참고

OAuth 토큰(예: 사용 DefaultAzureCredential시 가져온 토큰)은 파일 공유 수준에서 데이터 평면 작업에 허용되지 않습니다. 공유 스냅샷을 사용하려면 계정 키를 사용하여 클라이언트 개체에 권한을 부여해야 합니다. 이 코드 예제에서 만든 개체는 ShareClient 계정 키를 포함하는 연결 문자열을 사용합니다.

계정 키 또는 연결 문자열을 저장하면 보안 위험이 발생합니다. Microsoft Entra 인증을 사용할 수 없는 경우에만 사용해야 합니다. Azure Key Vault에 계정 키를 안전하게 저장하는 방법에 대한 자세한 내용은 Azure Key Vault 관리 스토리지 계정 키에 대해 참조하세요.

Azure Storage 관리 라이브러리를 사용하여 Azure Files 리소스 관리

Azure Storage 관리 라이브러리는 Azure Storage 리소스 공급자 REST API를 기반으로 합니다. Azure Storage 리소스 공급자는 Azure Resource Manager를 기반으로 하는 서비스이며 선언적(템플릿) 및 명령적(직접 API 호출) 메서드를 모두 지원합니다. Azure Storage 리소스 공급자 REST API는 파일 공유를 포함하여 Azure Storage 리소스에 프로그래밍 방식으로 액세스할 수 있도록 합니다. Azure SDK는 Azure Storage 리소스 공급자 REST API를 기반으로 빌드되는 관리 라이브러리를 제공합니다.

관리 라이브러리는 파일 서비스 또는 파일 공유 수준에서 수행되는 작업에 권장됩니다. 이 섹션에서는 Azure Storage 관리 라이브러리를 사용하여 Azure Files 리소스를 관리하는 방법을 알아봅니다.

예: Azure Storage 관리 라이브러리를 사용하여 파일 공유 만들기

다음 코드 예제에서는 최상위 ArmClient 개체를 만들고, Storage 리소스 공급자를 구독에 등록하고, Azure Storage 관리 라이브러리를 사용하여 파일 공유를 만드는 방법을 보여 줍니다.

using Azure;
using Azure.Core;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Resources;
using Azure.ResourceManager.Storage;

ArmClient armClient = new ArmClient(new DefaultAzureCredential());

// Create a resource identifier, then get the subscription resource
ResourceIdentifier resourceIdentifier = new($"/subscriptions/<subscription-id>");
SubscriptionResource subscription = armClient.GetSubscriptionResource(resourceIdentifier);

ResourceProviderResource resourceProvider =
    await subscription.GetResourceProviderAsync("Microsoft.Storage");

// Check the registration state of the resource provider and register, if needed
if (resourceProvider.Data.RegistrationState == "NotRegistered")
    resourceProvider.Register();

// Get a resource group
ResourceGroupResource resourceGroup = await subscription.GetResourceGroupAsync("<resource-group-name>");

// Get a collection of storage account resources
StorageAccountCollection accountCollection = resourceGroup.GetStorageAccounts();

// Get a specific storage account resource
StorageAccountResource storageAccount = await accountCollection.GetAsync("<storage-account-name>");

// Get a file service resource for the storage account
FileServiceResource fileService = storageAccount.GetFileService();

// Create a new file share (or update if it already exists)
ArmOperation <FileShareResource> fileShareOperation = await fileService
    .GetFileShares()
    .CreateOrUpdateAsync(WaitUntil.Completed, "sample-file-share", new FileShareData()
    {
        ShareQuota = 1024,
        // Add file share properties here
    });

// Get the file share resource
FileShareResource fileShare = fileShareOperation.Value;

FileShareData 클래스를 사용하여 파일 공유 속성을 구성할 수 있습니다. 이전 예제에서는 속성을 설정하는 ShareQuota 방법을 보여줍니다.

참고

등록 작업을 수행하려면 다음 Azure RBAC 작업에 대한 권한이 필요합니다. Microsoft.Storage/register/action. 이 권한은 기여자 및 소유자 기본 제공 역할에 포함됩니다.

예: Azure Storage 관리 라이브러리를 사용하여 파일 공유 및 스냅샷 나열

다음 코드 예제에서는 스토리지 계정에서 파일 공유 및 스냅샷을 나열하는 방법을 보여 줍니다.

// Iterate over a collection of file shares and list them along with any snapshots
string expand = "snapshots";
await foreach (FileShareResource shareResource in fileService.GetFileShares().GetAllAsync(expand: expand))
{
    // Call operations on the file share resource

    // For this demo, print out the resource name and snapshot information
    FileShareData resourceData = shareResource.Data;
    Console.WriteLine($"Resource name: {resourceData.Name}");
    if (resourceData.SnapshotOn.HasValue)
    {
        Console.WriteLine($"Snapshot: {resourceData.SnapshotOn}");
    }
}

Azure Files를 사용하여 개발하는 방법에 대한 자세한 내용은 다음 리소스를 참조하세요.