다음을 통해 공유


Azure Storage 관리 라이브러리를 사용하여 Blob 스토리지 엔드포인트 쿼리

Blob 스토리지 엔드포인트는 스토리지 계정 내의 모든 개체에 대한 기본 주소를 형성합니다. 스토리지 계정을 만들 때 사용할 엔드포인트 유형을 지정합니다. Blob 스토리지는 다음과 같은 두 가지 유형의 엔드포인트를 지원합니다.

  • 표준 엔드포인트에는 고정 도메인 이름과 함께 고유한 스토리지 계정 이름이 포함됩니다. 표준 엔드포인트 형식은 https://<storage-account>.blob.core.windows.net입니다.
  • Azure DNS 영역 엔드포인트(미리 보기)는 Azure DNS 영역을 동적으로 선택하고 만들 때 스토리지 계정에 할당합니다. Azure DNS 영역 엔드포인트의 형식은 https://<storage-account>.z[00-99].blob.storage.azure.net입니다.

애플리케이션이 Blob 스토리지 데이터 리소스에 연결하는 서비스 클라이언트 개체를 만들 때 엔드포인트를 참조하는 URI를 서비스 클라이언트 생성자에게 전달합니다. URI 문자열을 수동으로 생성하거나 Azure Storage 관리 라이브러리를 사용하여 런타임 시 서비스 엔드포인트를 쿼리할 수 있습니다.

Important

클라이언트 애플리케이션에서 서비스 엔드포인트를 참조하는 경우 캐시된 IP 주소에 대한 종속성을 사용하지 않는 것이 좋습니다. 스토리지 계정 IP 주소는 변경될 수 있으며 캐시된 IP 주소를 사용하면 예기치 않은 동작이 발생할 수 있습니다.

스토리지 계정 엔드포인트와 연결된 CNAME은 예고 없이 변경할 수 있습니다. 애플리케이션은 CNAME 레코드의 수 또는 해당 CNAME 레코드와 연결된 하위 도메인의 수에 종속되지 않아야 합니다.

또한 DNS 레코드의 TTL(Time to Live)을 적용하고 재정의하지 않는 것이 좋습니다. DNS TTL을 재정의하면 예기치 않은 동작이 발생할 수 있습니다.

자세한 내용은 CNAME 레코드, 하위 도메인 및 IP 주소를 참조하세요.

Azure Storage 관리 라이브러리는 Azure Storage 리소스 공급자에 대한 액세스를 프로그래밍 방식으로 제공합니다. 리소스 공급자는 Azure Resource Manager의 Azure Storage 구현입니다. 개발자는 관리 라이브러리를 사용하여 스토리지 계정 및 계정 구성을 관리하고 수명 주기 관리 정책, 개체 복제 정책, 불변성 정책을 구성할 수 있습니다.

이 문서에서는 Azure Storage 관리 라이브러리를 사용하여 Blob 스토리지 엔드포인트를 쿼리하는 방법을 알아봅니다. 그런 다음, 해당 엔드포인트를 사용하여 Blob 스토리지 데이터 리소스와 연결할 BlobServiceClient 개체를 만듭니다.

프로젝트 설정

이 문서의 코드 예제를 사용하려면 다음 단계에 따라 프로젝트를 설정합니다.

패키지 설치

패키지를 설치하여 이 예제에 사용된 라이브러리를 사용합니다.

dotnet add package를 사용하여 다음 패키지를 설치합니다.

dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Storage
dotnet add package Azure.Storage.Blobs

앱 코드 설정

필요한 using 또는 import 지시문을 코드에 추가합니다. 코드 예제는 파일 간의 기능을 분할할 수 있지만 이 섹션에서는 모든 지시문이 함께 나열됩니다.

다음 using 지시문을 추가합니다.

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

클라이언트 라이브러리 정보:

  • Azure.Identity: Azure SDK에서 Microsoft Entra 토큰 인증 지원을 제공하며 Azure 서비스에 대한 암호 없는 연결에 필요합니다.
  • Azure.ResourceManager.Storage: 리소스 그룹 및 스토리지 계정을 포함한 Azure Storage 리소스 관리를 지원합니다.
  • Azure.Storage.Blobs: Blob 스토리지 데이터 리소스 작업에 사용할 수 있는 기본 클래스를 포함합니다.

구독에 스토리지 리소스 공급자 등록

리소스 공급자를 사용하려면 먼저 Azure 구독에 등록해야 합니다. 이 단계는 구독당 한 번만 수행해야 하며 리소스 공급자 Microsoft.Storage가 현재 구독에 등록되어 있지 않은 경우에만 적용됩니다.

스토리지 리소스 공급자를 등록하거나 Azure portal, Azure CLI 또는 Azure PowerShell을 사용하여 등록 상태를 확인할 수 있습니다.

다음 예제와 같이 Azure 관리 라이브러리를 사용하여 등록 상태를 확인하고 스토리지 리소스 공급자를 등록할 수도 있습니다.

public static async Task RegisterSRPInSubscription(SubscriptionResource subscription)
{
    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();
}

참고 항목

등록 작업을 수행하려면 다음 Azure RBAC 작업에 대한 권한이 필요합니다. Microsoft.Storage/register/action 해당 권한은 기여자소유자 역할에 포함되어 있습니다.

Blob 스토리지 엔드포인트 쿼리

지정된 스토리지 계정의 Blob 스토리지 엔드포인트를 검색하려면 속성 가져오기 작업을 호출하여 스토리지 계정 속성을 가져와야 합니다. 다음 코드 샘플에서는 데이터 액세스 및 관리 라이브러리를 모두 사용하여 지정된 스토리지 계정의 Blob 스토리지 엔드포인트를 가져옵니다.

지정된 스토리지 계정에 대한 속성을 얻으려면 StorageAccountCollection 개체에서 다음 메서드를 사용합니다.

이 메서드는 스토리지 계정을 나타내는 StorageAccountResource 개체를 반환합니다.

public static async Task<Uri> GetBlobServiceEndpoint(
    string storageAccountName,
    TokenCredential credential)
{
    // TODO: replace with your subscription ID and resource group name
    // You can locate your subscription ID on the Subscriptions blade
    // of the Azure portal (https://portal.azure.com)
    const string subscriptionId = "<subscription-id>";
    const string rgName = "<resource-group-name>";

    ArmClient armClient = new(credential);

    // Create a resource identifier, then get the subscription resource
    ResourceIdentifier resourceIdentifier = new($"/subscriptions/{subscriptionId}");
    SubscriptionResource subscription = armClient.GetSubscriptionResource(resourceIdentifier);

    // Get a resource group
    ResourceGroupResource resourceGroup = await subscription.GetResourceGroupAsync(rgName);

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

    // Get the properties for the specified storage account
    StorageAccountResource storageAccount = await accountCollection.GetAsync(storageAccountName);

    // Return the primary endpoint for the blob service
    return storageAccount.Data.PrimaryEndpoints.BlobUri;
}

엔드포인트를 사용하여 클라이언트 개체 만들기

스토리지 계정에 대한 Blob 스토리지 엔드포인트가 있으면 클라이언트 개체를 인스턴스화하여 데이터 리소스로 작업할 수 있습니다. 다음 코드 샘플에서는 이전 예제에서 검색한 엔드포인트를 사용하여 BlobServiceClient 개체를 만듭니다.

// Create an instance of DefaultAzureCredential for authorization
TokenCredential credential = new DefaultAzureCredential();

// TODO: replace with your storage account name
string storageAccountName = "<storage-account-name>";

// Call out to our function that retrieves the blob service endpoint for the given storage account
Uri blobURI = await AccountProperties.GetBlobServiceEndpoint(storageAccountName, credential);
Console.WriteLine($"URI: {blobURI}");

// Now that we know the endpoint, create the client object
BlobServiceClient blobServiceClient = new(blobURI, credential);

// Do something with the storage account or its resources ...

다음 단계

전체 코드 샘플 보기(GitHub):

클라이언트 개체를 만드는 방법에 대한 자세한 내용은 데이터 리소스와 상호 작용하는 클라이언트 개체 만들기 및 관리를 참조하세요.