Azure SDK for .NET의 NuGet 패키지는 어떻게 사용할 수 있습니까? 그리고 샘플도 갖고 싶다!

Azure SDK의 NuGet 패키지가 혼란스러워서 혼란



Azure를 사용한 애플리케이션 개발을 시도했을 때 NuGet 패키지가 난립되어 매우 곤란했습니다. Microsoft.Azure로 시작하는 것, Azure로 시작하는 것, Fluent가 붙어 있거나 붙어 있지 않거나 심지어 세상에 있는 샘플 프로그램도 이들이 혼재하고 있어, 이미 엉망이야.

예를 들어 Blob Storage를 사용하려고 하면 Microsoft 공식 NuGet 패키지만으로도 이렇다.
  • WindowsAzure.Storage
  • Microsoft.Azure.Storage.Blob
  • Azure.Storage.Blobs
  • Microsoft.Azure.Management.Storage
  • Microsoft.Azure.Management.Storage.Fluent

  • 거기서 이것들을 정리해, 어떤 때에 어느 패키지를 사용하면 좋은지 알도록(듯이) 했다.

    패키지 분류



    Azure Storage 패키지를 예로 분류합니다. "~판"은 마음대로 명명.

    패키지에는 크게 나누어서 서비스 클라이언트계와 자원 관리계가 있다.



    서비스 클라이언트



    Blob 컨테이너를 만들거나 Blob을 업로드하는 패키지입니다.
  • WindowsAzure.로 시작하는 패키지는 오래된 사람
  • Microsoft.Azure.로 시작하는 패키지가 Stable 버전
  • Azure.로 시작하는 패키지는 Preview용
  • 다른 버전의 패키지를 동시에 사용하면 개발자가 죽습니다.

  • 리소스 관리



    Storage Account를 만들거나 수정하는 패키지.
  • 통상판과 Fluent판은 전혀 별개 ※패키지명에 당황해서는 안된다
  • 일반 버전과 Fluent 버전을 혼합하여 사용하지 않는 것이 좋습니다

  • 덧붙여서 통상판과 Fluent판이란 GitHub 리포지토리도 나뉘어 있다
  • SDK 버전 ⇒ Azure SDK for .NET
  • Fluent판 ⇒ Azure Management Libraries for .NET

  • 그래서 결국 어느 것이 사용되어야합니까?



    좋아하는 것 사용하면 좋다. 안정적이고 새로운 것은 ↓
  • 서비스 클라이언트: Microsoft.Azure.*
  • 리소스 관리: Microsoft.Azure.Management.*.Fluent

  • 다음에 각 패키지를 사용한 샘플 프로그램을 실고 있으므로 참고로.

    서비스 클라이언트 샘플



    Storage Account에 blob 컨테이너를 만들어 blob을 업로드하는 샘플 프로그램.

    윈드 w 엇갈림. S 호랑이


    // Install-Package WindowsAzure.Storage
    
    var connectionString = "storage-connection-string";
    var account = CloudStorageAccount.Parse(connectionString);
    var client = account.CreateCloudBlobClient();
    
    var container = client.GetContainerReference("test-container");
    await container.CreateIfNotExistsAsync();
    
    var blob = container.GetBlockBlobReference("test-blob.txt");
    await blob.UploadTextAsync("test blob content");
    
    var content = await blob.DownloadTextAsync();
    Console.WriteLine(content);
    

    Microsoft.Azure.Storage.Blob



    WindowsAzure.Storage와 동일
    // Install-Package Microsoft.Azure.Storage.Blob
    
    var connectionString = "storage-connection-string";
    var account = CloudStorageAccount.Parse(connectionString);
    var client = account.CreateCloudBlobClient();
    
    var container = client.GetContainerReference("test-container-2");
    await container.CreateIfNotExistsAsync();
    
    var blob = container.GetBlockBlobReference("test-blob-2.txt");
    await blob.UploadTextAsync("test blob content 2");
    
    var content = await blob.DownloadTextAsync();
    Console.WriteLine(content);
    

    Azure.Storage.Blobs



    Microsoft.Azure.Storage.Blob에서 바뀌어 REST API에 충실한 느낌. 조금 불편감.
    // Install-Package Azure.Storage.Blobs
    
    var connectionString = "storage-connection-string";
    
    var containerClient = new BlobContainerClient(connectionString, "test-container-3");
    await containerClient.CreateIfNotExistsAsync();
    
    var blobClient = containerClient.GetBlobClient("bloblo.txt");
    var stream = new MemoryStream(Encoding.UTF8.GetBytes("blob content222"));
    await blobClient.UploadAsync(stream, overwrite: true);
    
    var downloadInfo = await blobClient.DownloadAsync();
    var contentStream = downloadInfo.Value.Content;
    
    var content = new StreamReader(contentStream).ReadToEnd();
    Console.WriteLine(content);
    

    리소스 관리 샘플



    ServicePrincipal을 사용하여 Storage Account를 나열하는 샘플 프로그램.

    미 closo ft. 아즈레. 던지기 표면 t. S 호랑이



    인증이 귀찮다.
    // Install-Package Microsoft.Azure.Management.Storage
    // Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
    var tenantId= "00000000-0000-0000-0000-000000000000";
    var subscriptionId = "00000000-0000-0000-0000-000000000000";
    var clientId = "00000000-0000-0000-0000-000000000000";
    var clientSecret = "azure-application-secret";
    
    var context = new AuthenticationContext("https://login.windows.net/" + tenantId);
    var clientCredential = new ClientCredential(clientId, clientSecret);
    var tokenResponse = await context.AcquireTokenAsync("https://management.azure.com/", clientCredential);
    var accessToken = new TokenCredentials(tokenResponse.AccessToken);
    
    var client = new StorageManagementClient(accessToken);
    client.SubscriptionId = subscriptionId;
    var storageAccounts = await client.StorageAccounts.ListAsync();
    
    foreach (var acc in storageAccounts)
    {
        Console.WriteLine(acc.Name);
    }
    

    Microsoft.Azure.Management.Fluent



    뭐 사용하기 쉬울지도?
    // Install-Package Microsoft.Azure.Management.Fluent
    // 注意:Microsoft.Azure.Management.Storage.Fluent ではない
    
    var tenantId= "00000000-0000-0000-0000-000000000000";
    var subscriptionId = "00000000-0000-0000-0000-000000000000";
    var clientId = "00000000-0000-0000-0000-000000000000";
    var clientSecret = "azure-application-secret";
    
    var cred = new AzureCredentialsFactory()
        .FromServicePrincipal(clientId, clientSecret, tenantId, AzureEnvironment.AzureGlobalCloud);
    
    var az = Azure
        .Authenticate(cred)
        .WithSubscription(subscriptionId);
    
    var storageAccounts = await az.StorageAccounts.ListAsync();
    foreach (var acc in storageAccounts)
    {
        Console.WriteLine(acc.Name);
    }
    

    사이고에게



    이런 패키지를 난립시켜 개발자를 혼란시킨 Microsoft 씨에게는 크게 반성해 주셨으면 합니다

    좋은 웹페이지 즐겨찾기