연습 - ASP.NET Core앱을 사용하여 계층화된 스토리지 관리

완료됨

이제 몇 가지 .NET 코드 샘플을 테스트하여 일부 Azure Storage Blob 예제에 대한 계층 수준을 검색하고 수정합니다. 새 BlobStorage 계정을 만들고 계정을 쿨로 설정합니다. 그런 다음, 일부 데이터를 업로드한 다음, 앱을 사용하여 스토리지 계층을 수정합니다.

코드 및 데이터 샘플 다운로드

이 첫 번째 단계에서는 소스 코드와 데이터 샘플을 Cloud Shell 스토리지에 다운로드합니다.

  1. Cloud Shell에서 다음 명령을 실행하여 소스 코드와 데이터 샘플을 Cloud Shell 스토리지의 storageapp 폴더에 다운로드합니다.

    git clone https://github.com/MicrosoftDocs/mslearn-optimize-blob-storage-costs storageapp
    cd storageapp
    

CLI를 사용하여 새 Blob 스토리지 계정 만들기

이제 새 BlobStorage 계정을 만들고 계정 스토리지 키를 검색합니다.

  1. Cloud Shell에서 다음 명령을 실행하여 쿨로 설정된 새 BlobStorage 계정을 만듭니다. 다음 코드에서 <random string>을(를) 문자 또는 숫자 문자열로 바꿉니다.

    export RESOURCE_GROUP=<rgn>[sandbox resource group name]</rgn>
    
    export AZURE_STORAGE_ACCOUNT=<random string>storageaccount
    
    az storage account create \
        --resource-group $RESOURCE_GROUP \
        --name $AZURE_STORAGE_ACCOUNT \
        --kind BlobStorage \
        --access-tier Cool
    
  2. Cloud Shell에서 다음 명령을 실행하여 계정에 대한 스토리지 키를 검색하고 변수에 저장합니다.

    export AZURE_STORAGE_KEY=`az storage account keys list -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --query [0].value --output tsv`
    

컨테이너 만들기 및 데이터 업로드

이 단계에서는 Blob 컨테이너와 각각 데이터 샘플 일부가 포함된 세 개의 Blob을 만듭니다.

  1. Cloud Shell에서 다음 명령을 실행하여 새 컨테이너를 만듭니다.

    az storage container create \
        --name blobcontainer \
        --account-name $AZURE_STORAGE_ACCOUNT \
        --account-key $AZURE_STORAGE_KEY
    
  2. Cloud Shell에서 다음 명령을 실행하여 데이터 샘플을 Blob에 배치합니다.

    cd ManageStorageTiers
    az storage blob upload --file testdata.txt --container-name blobcontainer --name blob1
    az storage blob upload --file testdata.txt --container-name blobcontainer --name blob2
    az storage blob upload --file testdata.txt --container-name blobcontainer --name blob3
    

각 Blob에 대한 계층 설정

이 단계에서는 각 Blob에 대한 액세스 계층을 설정합니다.

  1. Cloud Shell에서 다음 명령을 실행하여 blob1을 보관으로 설정합니다.

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob1 \
        --tier Archive
    
  2. Cloud Shell에서 다음 명령을 실행하여 blob2를 쿨로 설정합니다.

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob2 \
        --tier Cool
    
  3. Cloud Shell에서 다음 명령을 실행하여 blob3을 핫으로 설정합니다.

    az storage blob set-tier \
        --container-name blobcontainer \
        --name blob3 \
        --tier Hot
    

코드에서 스토리지 계층 관리

이제 코드를 배포하고 테스트할 준비가 되었습니다. 먼저 샘플 앱에 필요한 환경 변수를 설정합니다. 그런 다음, 샘플 앱을 빌드하고 실행합니다(Microsoft.Azure.KeyVault.Core 패키지에 대한 경고는 무시함).

  1. Cloud Shell에서 다음 명령을 실행하여 앱에서 사용하는 환경 변수를 저장합니다.

    export STORAGE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP -n $AZURE_STORAGE_ACCOUNT --output tsv`
    export CONTAINER_NAME=blobcontainer
    
  2. Cloud Shell에서 다음 명령을 실행하여 ManageStorageTiers 앱을 빌드하고 실행합니다.

    cd ManageStorageTiers
    dotnet build
    dotnet run
    
  3. 이제 ManageStorageTiers 앱이 Blob 스토리지에 연결되고, blob1, blob2, blob3이라는 세 개의 Blob을 쿼리합니다. 그런 다음 세 Blob의 스토리지 계층을 모두 변경하고 각 Blob의 스토리지 계층을 다시 쿼리하여 변경 내용을 확인합니다. 보관 계층은 리하이드레이션 대기 시간으로 인해 변경되지 않습니다.

앱 코드 검토

이 마지막 단계에서는 액세스 계층을 관리하고 변경하기 위해 ManageStorageTiers 앱에서 사용하는 코드를 살펴봅니다.

  1. Cloud Shell에서 code .을(를) 입력한 다음 편집기를 사용하여 ManageStorageTiers\Program.cs를 엽니다.

  2. 이 코드는 컨테이너의 모든 Blob에 대한 스토리지 계층을 표시합니다.

    private static async Task DisplayBlobTiers(BlobContainerClient blobContainerClient)
    {
        AsyncPageable<BlobItem> blobItems = blobContainerClient.GetBlobsAsync();
    
        await foreach (var blobItem in blobItems)
        {
            Console.WriteLine($"  Blob name {blobItem.Name}:   Tier {blobItem.Properties.AccessTier}");
        }
    }
    
  3. 다음 메서드는 함께 작동하여 컨테이너의 Blob 집합에 대한 스토리지 계층을 업데이트합니다.

    private static async Task UpdateBlobTiers(BlobContainerClient blobContainerClient)
    {
        AsyncPageable<BlobItem> blobItems = blobContainerClient.GetBlobsAsync();
    
        await foreach (var blobItem in blobItems)
        {
            string blobName = blobItem.Name;
            AccessTier? currentAccessTier = blobItem.Properties.AccessTier;
            AccessTier newAccessTier = GetNewAccessTier(currentAccessTier);
    
            Console.WriteLine($"  Blob name: {blobItem.Name}   Current tier: {currentAccessTier}   New tier: {newAccessTier}");
    
            BlobClient blobClient = blobContainerClient.GetBlobClient(blobItem.Name);
            blobClient.SetAccessTier(newAccessTier);
        }
    }
    
    private static AccessTier GetNewAccessTier(AccessTier? accessTier)
    {
        if (accessTier == AccessTier.Hot)
            return AccessTier.Cool;
        else if (accessTier == AccessTier.Cool)
            return AccessTier.Archive;
        else
            return AccessTier.Hot;
    }