Azure에서 Orleans 앱 배포 및 크기 조정
이 빠른 시작에서는 Azure Container Apps에서 Orleans URL 단축기 앱을 배포하고 크기를 조정합니다. 이 앱을 사용하면 사용자가 앱에 전체 URL을 제출할 수 있으며, 이 URL은 다른 사용자와 공유할 수 있는 단축된 버전을 반환하여 원래 사이트로 보낼 수 있습니다. Orleans(와)과 Azure는 URL 단축기와 같은 트래픽이 많은 앱을 호스트하는 데 필요한 확장성 기능을 제공합니다. Orleans(은)는 .NET을 지원하는 다른 호스팅 서비스와도 호환됩니다.
이 빠른 시작의 끝부분에는 URL 단축 기능을 제공하기 위해 Azure에서 실행 중인 확장 가능한 앱이 있습니다. 그 과정에서 다음을 배우게 됩니다.
- 끌어오기 및 Azure 개발자 CLI 템플릿
- Azure에 Orleans 앱 배포
- 앱을 여러 인스턴스로 크기 조정
필수 조건
- 활성 구독이 있는 Azure 계정. 체험 계정을 만듭니다.
- Azure Developer CLI
- .NET 8
- Docker
샘플 애플리케이션 가져오기 및 배포
샘플 애플리케이션은 Azure 개발자 CLI 템플릿으로 사용할 수 있습니다. 이 빠른 시작을 통해 템플릿 애플리케이션을 끌어오고, 템플릿 및 샘플 코드를 Azure에 배포하고, 템플릿을 변경하여 원하는 지속성 조직을 구현하고, 필요한 리소스를 배포한 다음, 최종 애플리케이션을 배포합니다.
빈 디렉터리에서 터미널을 엽니다.
azd auth login
을 사용하여 Azure 개발자 CLI에 인증합니다. 원하는 Azure 자격 증명을 사용하여 CLI에 인증하려면 도구에 지정된 단계를 따릅니다.azd auth login
AZD 템플릿
orleans-url-shortener
및azd init
명령을 사용하여 샘플 애플리케이션을 가져옵니다.azd init --template orleans-url-shortener
초기화 중에 고유한 환경 이름을 구성합니다.
팁
환경 이름은 대상 리소스 그룹 이름으로도 사용됩니다. 이 빠른 시작에서는
msdocs-orleans-url-shortener
사용을 고려해보세요.azd up
을 사용하여 Azure Cosmos DB for NoSQL 계정을 배포합니다. Bicep 템플릿은 샘플 웹 애플리케이션도 배포합니다.azd up
프로비전 과정에서 구독과 원하는 위치를 선택합니다. 프로비전 및 배포 프로세스가 완료되기를 기다립니다. 이 과정은 약 5분 정도 소요됩니다.
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.
콘솔의 URL을 사용하여 브라우저에서 웹 애플리케이션으로 이동합니다.
브라우저 주소 표시줄에서
/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>" }
단축된 URL을 주소 표시줄에 붙여넣고 Enter 키를 누릅니다. 페이지는 지정한 URL을 다시 로드하고 리디렉션해야 합니다.
추가 서비스 배포
원래 배포는 URL 단축기 앱을 호스트하는 데 필요한 최소한의 서비스만 배포했습니다. 조직 지속성을 위해 Azure 데이터 서비스를 사용하려면 먼저 기본 서비스를 배포하도록 템플릿을 구성해야 합니다.
터미널을 사용하여 NoSQL용 Azure Cosmos DB 배포를 사용할 수 있도록
DEPLOY_AZURE_TABLE_STORAGE
환경 변수를 구성하려면azd env set
를 실행합니다.azd env set DEPLOY_AZURE_TABLE_STORAGE true
터미널을 사용하여 NoSQL용 Azure Cosmos DB 배포를 사용할 수 있도록
DEPLOY_AZURE_COSMOS_DB_NOSQL
환경 변수를 구성하려면azd env set
를 실행합니다.azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
새 구성을 사용하여 애플리케이션 아키텍처를 다시 배포하려면
azd provision
(을)를 실행합니다. 프로비저닝 프로세스가 완료될 때까지 기다립니다. 프로세스는 약 2분 정도 걸릴 수 있습니다.azd provision
팁
또는 아키텍처를 프로비전하고 애플리케이션을 다시 배포하는
azd up
(을)를 다시 실행할 수 있습니다.
NuGet 패키지 설치
조직을 사용하기 전에 해당하는 Microsoft.Orleans.Clustering.*
및 Microsoft.Orleans.Persistence.*
NuGet 패키지를 설치해야 합니다. 이러한 서비스는 암호 없는 인증에 역할 기반 액세스 제어를 사용하므로 Azure.Identity
NuGet 패키지도 가져와야 합니다.
현재 작업 디렉터리를 ./src/web/으로 변경합니다.
cd ./src/web
dotnet add package
(을)를 사용하여 NuGet에서Azure.Identity
패키지를 가져옵니다.dotnet add package Azure.Identity --version 1.*
Microsoft.Orleans.Clustering.AzureStorage
및Microsoft.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.*
dotnet add package
(을)를 사용하여 NuGet에서Azure.Identity
패키지를 가져옵니다.dotnet add package Azure.Identity --version 1.*
Microsoft.Orleans.Clustering.Cosmos
및Microsoft.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(을)를 구성할 수 있습니다.
and
네임스페이스에 using 지시문을 추가합니다.using Azure.Identity; using Orleans.Configuration;
src/web/Program.cs 파일에서 현재
builder
구성 코드를 찾아 제거합니다.builder.Host.UseOrleans(static siloBuilder => { siloBuilder .UseLocalhostClustering() .AddMemoryGrainStorage("urls"); });
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"; }); }); }
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"; }); }); }
azd deploy
(을)를 실행하여 애플리케이션 코드를 Docker 컨테이너로 다시 배포합니다. 배포 프로세스가 완료되기를 기다립니다. 프로세스는 약 1분 정도 걸릴 수 있습니다.azd deploy
팁
또는 아키텍처를 프로비전하고 애플리케이션을 다시 배포하는
azd up
(을)를 다시 실행할 수 있습니다.
앱의 동작 확인
배포된 애플리케이션을 다시 사용하고 데이터를 저장하는 위치를 확인하여 업데이트된 코드가 작동하는지 확인합니다.
브라우저 주소 표시줄에서
/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>" }
단축된 URL을 주소 표시줄에 붙여넣고 Enter 키를 누릅니다. 페이지는 지정한 URL을 다시 로드하고 리디렉션해야 합니다.
필요에 따라 클러스터 및 상태 데이터가 사용자가 만든 스토리지 계정에 예상대로 저장되어 있는지 확인할 수 있습니다.
Azure Portal에서, 이 빠른 시작에 배포된 리소스 그룹으로 이동합니다.
Important
이 빠른 시작의 앞부분에서 지정한 환경 이름도 대상 리소스 그룹 이름입니다.
Azure Storage 계정의 개요 페이지로 이동합니다.
탐색 내에서 스토리지 브라우저를 선택합니다.
테이블 탐색 항목을 확장하여 Orleans에서 만든 두 테이블을 검색합니다.
OrleansGrainState: 이 테이블은 애플리케이션에서 URL 리디렉션을 처리하는 데 사용하는 영구 상태 조직 데이터를 저장합니다.
OrleansSiloInstances: 이 테이블은 Orleans 클러스터에 대한 필수 사일로 데이터를 추적합니다.
OrleansGrainState 테이블을 선택합니다. 이 테이블에는 테스트 중에 앱이 유지하는 모든 URL 리디렉션에 대한 행 항목이 있습니다.
NoSQL용 Azure Cosmos DB 계정의 개요 페이지로 이동합니다.
탐색 내에서 데이터 탐색기를 선택합니다.
이 가이드의 앞부분에서 만든 다음 컨테이너를 확인합니다.
Orleans스토리지: 이 테이블은 애플리케이션에서 URL 리디렉션을 처리하는 데 사용하는 영구 상태 조직 데이터를 저장합니다.
Orleans클러스터: 이 테이블은 Orleans 클러스터에 대한 필수 사일로 데이터를 추적합니다.
앱 크기 조정
Orleans(은)는 분산 응용 프로그램용으로 설계되었습니다. URL 단축기만큼 간단한 앱도 Orleans의 확장성을 활용할 수 있습니다. 다음 단계를 사용하여 여러 인스턴스에서 앱을 확장하고 테스트할 수 있습니다.
이 빠른 시작에서 배포된 리소스 그룹으로 다시 이동합니다.
Azure Container Apps 앱의 개요 페이지로 이동합니다.
탐색 내에서 크기 조정을 선택합니다.
편집 및 배포를 선택한 다음 크기 조정 탭으로 전환합니다.
슬라이더 컨트롤을 사용하여 최소 및 최대 복제본 값을 4로 설정합니다. 이 값을 사용하면 앱이 여러 인스턴스에서 실행됩니다.
만들기를 선택하여 새 수정 버전을 배포합니다.
배포가 완료되면 이전 섹션의 테스트 단계를 반복합니다. 앱은 여러 인스턴스에서 예상대로 계속 작동하며 이제 더 많은 수의 요청을 처리할 수 있습니다.
관련 콘텐츠
다음 단계
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기