Share via


Azure에서 Orleans 앱 배포 및 크기 조정

이 빠른 시작에서는 Azure Container Apps에서 Orleans URL 단축기 앱을 배포하고 크기를 조정합니다. 이 앱을 사용하면 사용자가 앱에 전체 URL을 제출할 수 있으며, 이 URL은 다른 사용자와 공유할 수 있는 단축된 버전을 반환하여 원래 사이트로 보낼 수 있습니다. Orleans(와)과 Azure는 URL 단축기와 같은 트래픽이 많은 앱을 호스트하는 데 필요한 확장성 기능을 제공합니다. Orleans(은)는 .NET을 지원하는 다른 호스팅 서비스와도 호환됩니다.

이 빠른 시작의 끝부분에는 URL 단축 기능을 제공하기 위해 Azure에서 실행 중인 확장 가능한 앱이 있습니다. 그 과정에서 다음을 배우게 됩니다.

  • 끌어오기 및 Azure 개발자 CLI 템플릿
  • Azure에 Orleans 앱 배포
  • 앱을 여러 인스턴스로 크기 조정

필수 조건

샘플 애플리케이션 가져오기 및 배포

샘플 애플리케이션은 Azure 개발자 CLI 템플릿으로 사용할 수 있습니다. 이 빠른 시작을 통해 템플릿 애플리케이션을 끌어오고, 템플릿 및 샘플 코드를 Azure에 배포하고, 템플릿을 변경하여 원하는 지속성 조직을 구현하고, 필요한 리소스를 배포한 다음, 최종 애플리케이션을 배포합니다.

  1. 빈 디렉터리에서 터미널을 엽니다.

  2. azd auth login을 사용하여 Azure 개발자 CLI에 인증합니다. 원하는 Azure 자격 증명을 사용하여 CLI에 인증하려면 도구에 지정된 단계를 따릅니다.

    azd auth login
    
  3. AZD 템플릿 orleans-url-shortenerazd init 명령을 사용하여 샘플 애플리케이션을 가져옵니다.

    azd init --template orleans-url-shortener
    
  4. 초기화 중에 고유한 환경 이름을 구성합니다.

    환경 이름은 대상 리소스 그룹 이름으로도 사용됩니다. 이 빠른 시작에서는 msdocs-orleans-url-shortener 사용을 고려해보세요.

  5. azd up을 사용하여 Azure Cosmos DB for NoSQL 계정을 배포합니다. Bicep 템플릿은 샘플 웹 애플리케이션도 배포합니다.

    azd up
    
  6. 프로비전 과정에서 구독과 원하는 위치를 선택합니다. 프로비전 및 배포 프로세스가 완료되기를 기다립니다. 이 과정은 약 5분 정도 소요됩니다.

  7. Azure 리소스 프로비전이 완료되면 실행 중인 웹 애플리케이션에 대한 URL이 출력에 포함됩니다.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. 콘솔의 URL을 사용하여 브라우저에서 웹 애플리케이션으로 이동합니다.

    실행 중인 URL 단축기 웹 애플리케이션의 스크린샷.

  9. 브라우저 주소 표시줄에서 /shorten?url=https://www.microsoft.com(와)과 같은 URL 경로를 추가하여 shorten 엔드포인트를 테스트합니다. 페이지는 끝에 단축된 경로가 있는 새 URL을 다시 로드하고 제공해야 합니다. 새 URL을 클립보드에 복사합니다.

    {
      "original": "https://www.microsoft.com",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  10. 단축된 URL을 주소 표시줄에 붙여넣고 Enter 키를 누릅니다. 페이지는 지정한 URL을 다시 로드하고 리디렉션해야 합니다.

추가 서비스 배포

원래 배포는 URL 단축기 앱을 호스트하는 데 필요한 최소한의 서비스만 배포했습니다. 조직 지속성을 위해 Azure 데이터 서비스를 사용하려면 먼저 기본 서비스를 배포하도록 템플릿을 구성해야 합니다.

  1. 터미널을 사용하여 NoSQL용 Azure Cosmos DB 배포를 사용할 수 있도록 DEPLOY_AZURE_TABLE_STORAGE 환경 변수를 구성하려면 azd env set를 실행합니다.

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. 터미널을 사용하여 NoSQL용 Azure Cosmos DB 배포를 사용할 수 있도록 DEPLOY_AZURE_COSMOS_DB_NOSQL 환경 변수를 구성하려면 azd env set를 실행합니다.

    azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
    
  1. 새 구성을 사용하여 애플리케이션 아키텍처를 다시 배포하려면 azd provision(을)를 실행합니다. 프로비저닝 프로세스가 완료될 때까지 기다립니다. 프로세스는 약 2분 정도 걸릴 수 있습니다.

    azd provision
    

    또는 아키텍처를 프로비전하고 애플리케이션을 다시 배포하는 azd up(을)를 다시 실행할 수 있습니다.

NuGet 패키지 설치

조직을 사용하기 전에 해당하는 Microsoft.Orleans.Clustering.*Microsoft.Orleans.Persistence.* NuGet 패키지를 설치해야 합니다. 이러한 서비스는 암호 없는 인증에 역할 기반 액세스 제어를 사용하므로 Azure.Identity NuGet 패키지도 가져와야 합니다.

  1. 현재 작업 디렉터리를 ./src/web/으로 변경합니다.

    cd ./src/web
    
  2. dotnet add package(을)를 사용하여 NuGet에서 Azure.Identity 패키지를 가져옵니다.

    dotnet add package Azure.Identity --version 1.*
    
  3. Microsoft.Orleans.Clustering.AzureStorageMicrosoft.Orleans.Persistence.AzureStorage 패키지를 가져옵니다.

    NuGet 패키지
    클러스터링 Microsoft.Orleans.Clustering.AzureStorage
    지속성 Microsoft.Orleans.Persistence.AzureStorage
    dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
    
  1. dotnet add package(을)를 사용하여 NuGet에서 Azure.Identity 패키지를 가져옵니다.

    dotnet add package Azure.Identity --version 1.*
    
  2. Microsoft.Orleans.Clustering.CosmosMicrosoft.Orleans.Persistence.Cosmos 패키지를 가져옵니다.

    NuGet 패키지
    클러스터링 Microsoft.Orleans.Clustering.Cosmos
    지속성 Microsoft.Orleans.Persistence.Cosmos
    dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
    

샘플 앱 구성 및 재배포

샘플 앱은 현재 localhost 클러스터를 만들고 메모리 내의 조직을 유지하도록 구성됩니다. Azure에서 호스트되는 경우, Azure의 데이터 서비스를 사용하여 더 확장성 있는 중앙 집중식 상태를 사용하도록 Orleans(을)를 구성할 수 있습니다.

  1. and 네임스페이스에 using 지시문을 추가합니다.

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. src/web/Program.cs 파일에서 현재 builder 구성 코드를 찾아 제거합니다.

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. builder 구성을 다음 주요 개념을 구현하는 예제로 바꿉니다.

    • 로컬 개발 및 Azure 호스팅 시나리오 모두에서 앱이 제대로 실행되도록 조건부 환경 검사가 추가됩니다.
    • UseAzureStorageClustering 메서드는 Azure Table Storage를 사용하도록 Orleans 클러스터를 구성 하고 DefaultAzureCredential 클래스를 사용하여 인증합니다.
    • Configure 메서드를 사용하여 Orleans 클러스터에 대한 ID를 할당합니다.
      • ClusterID(은)는 클라이언트와 사일로가 서로 통신할 수 있도록 하는 클러스터의 고유 ID입니다.
      • ClusterID(은)는 배포에서 변경할 수 있습니다.
      • ServiceID(은)는 Orleans에 의해 내부적으로 사용되며 배포 간에 일관성을 유지해야 하는 애플리케이션의 고유 ID입니다.
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = new Uri(builder.Configuration["AZURE_TABLE_STORAGE_ENDPOINT"]!);
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseAzureStorageClustering(options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .AddAzureTableGrainStorage(name: "urls", options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. builder 구성을 다음 주요 개념을 구현하는 예제로 바꿉니다.

    • 로컬 개발 및 Azure 호스팅 시나리오 모두에서 앱이 제대로 실행되도록 조건부 환경 검사가 추가됩니다.
    • UseCosmosClustering 메서드는 NoSQL용 Azure Cosmos DB를 사용하도록 Orleans 클러스터를 구성하고 DefaultAzureCredential 클래스를 사용하여 인증합니다.
    • Configure 메서드를 사용하여 Orleans 클러스터에 대한 ID를 할당합니다.
      • ClusterID(은)는 클라이언트와 사일로가 서로 통신할 수 있도록 하는 클러스터의 고유 ID입니다.
      • ClusterID(은)는 배포에서 변경할 수 있습니다.
      • ServiceID(은)는 Orleans에 의해 내부적으로 사용되며 배포 간에 일관성을 유지해야 하는 애플리케이션의 고유 ID입니다.
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = builder.Configuration["AZURE_COSMOS_DB_NOSQL_ENDPOINT"]!;
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseCosmosClustering(options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .AddCosmosGrainStorage(name: "urls", options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. azd deploy(을)를 실행하여 애플리케이션 코드를 Docker 컨테이너로 다시 배포합니다. 배포 프로세스가 완료되기를 기다립니다. 프로세스는 약 1분 정도 걸릴 수 있습니다.

    azd deploy
    

    또는 아키텍처를 프로비전하고 애플리케이션을 다시 배포하는 azd up(을)를 다시 실행할 수 있습니다.

앱의 동작 확인

배포된 애플리케이션을 다시 사용하고 데이터를 저장하는 위치를 확인하여 업데이트된 코드가 작동하는지 확인합니다.

  1. 브라우저 주소 표시줄에서 /shorten?url=https://learn.microsoft.com/dotnet/orleans(와)과 같은 URL 경로를 추가하여 shorten 엔드포인트를 다시 테스트합니다. 페이지는 끝에 단축된 경로가 있는 새 URL을 다시 로드하고 제공해야 합니다. 새 URL을 클립보드에 복사합니다.

    {
      "original": "https://learn.microsoft.com/dotnet/orleans",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  2. 단축된 URL을 주소 표시줄에 붙여넣고 Enter 키를 누릅니다. 페이지는 지정한 URL을 다시 로드하고 리디렉션해야 합니다.

필요에 따라 클러스터 및 상태 데이터가 사용자가 만든 스토리지 계정에 예상대로 저장되어 있는지 확인할 수 있습니다.

  1. Azure Portal에서, 이 빠른 시작에 배포된 리소스 그룹으로 이동합니다.

    Important

    이 빠른 시작의 앞부분에서 지정한 환경 이름도 대상 리소스 그룹 이름입니다.

  1. Azure Storage 계정의 개요 페이지로 이동합니다.

  2. 탐색 내에서 스토리지 브라우저를 선택합니다.

  3. 테이블 탐색 항목을 확장하여 Orleans에서 만든 두 테이블을 검색합니다.

    • OrleansGrainState: 이 테이블은 애플리케이션에서 URL 리디렉션을 처리하는 데 사용하는 영구 상태 조직 데이터를 저장합니다.

    • OrleansSiloInstances: 이 테이블은 Orleans 클러스터에 대한 필수 사일로 데이터를 추적합니다.

  4. OrleansGrainState 테이블을 선택합니다. 이 테이블에는 테스트 중에 앱이 유지하는 모든 URL 리디렉션에 대한 행 항목이 있습니다.

    Azure Table Storage의 Orleans 데이터를 보여 주는 스크린샷.

  1. NoSQL용 Azure Cosmos DB 계정의 개요 페이지로 이동합니다.

  2. 탐색 내에서 데이터 탐색기를 선택합니다.

  3. 이 가이드의 앞부분에서 만든 다음 컨테이너를 확인합니다.

    • Orleans스토리지: 이 테이블은 애플리케이션에서 URL 리디렉션을 처리하는 데 사용하는 영구 상태 조직 데이터를 저장합니다.

    • Orleans클러스터: 이 테이블은 Orleans 클러스터에 대한 필수 사일로 데이터를 추적합니다.

앱 크기 조정

Orleans(은)는 분산 응용 프로그램용으로 설계되었습니다. URL 단축기만큼 간단한 앱도 Orleans의 확장성을 활용할 수 있습니다. 다음 단계를 사용하여 여러 인스턴스에서 앱을 확장하고 테스트할 수 있습니다.

  1. 이 빠른 시작에서 배포된 리소스 그룹으로 다시 이동합니다.

  2. Azure Container Apps 앱의 개요 페이지로 이동합니다.

  3. 탐색 내에서 크기 조정을 선택합니다.

  4. 편집 및 배포를 선택한 다음 크기 조정 탭으로 전환합니다.

  5. 슬라이더 컨트롤을 사용하여 최소 및 최대 복제본 값을 4로 설정합니다. 이 값을 사용하면 앱이 여러 인스턴스에서 실행됩니다.

  6. 만들기를 선택하여 새 수정 버전을 배포합니다.

    Azure Container Apps 앱의 크기를 조정하는 방법을 보여 주는 스크린샷.

  7. 배포가 완료되면 이전 섹션의 테스트 단계를 반복합니다. 앱은 여러 인스턴스에서 예상대로 계속 작동하며 이제 더 많은 수의 요청을 처리할 수 있습니다.

다음 단계