언리얼 픽셀 스트리밍은 Microsoft가 에픽게임즈와 함께 만든 Azure Marketplace 제품입니다. 이를 통해 Azure 구독자는 자신의 언리얼 엔진 앱을 원격 GPU 지원 가상 머신(VM)에서 디플로이 및 스트리밍할 수 있습니다. 이 솔루션은 패키징된 애플리케이션의 단일 .zip
파일을 취해 한 VM 인스턴스에서 여러 영역에 걸친 수천 개의 VM 인스턴스로 스핀업합니다. 이를 활용하면 단일 URL을 통해 액세스 가능한 자동 스케일 조절 디플로이를 구성할 수 있습니다. 이 튜토리얼은 Azure에서 첫 픽셀 스트리밍 프로젝트를 디플로이하기 위한 단계별 가이드를 제공합니다.
전제 조건
Azure 계정 및 구독
Azure 계정과 리소스 생성 권한이 있는 구독이 적어도 한 개는 필요합니다. 새 구독을 생성하는 방법에 대한 자세한 내용은 이 가이드를 참고하세요. 구독하려면 청구 계정도 구성되어 있어야 합니다.
언리얼 픽셀 스트리밍 솔루션은 무료로 사용할 수 있지만 그 결과로 생성되는 Azure 리소스에는 관련 비용이 발생합니다. 따라서 청구 계정이 고용주 또는 다른 당사자와 연동되어 있는 경우, 디플로이 인스턴스를 구성하기 전에 해당 청구 계정으로 비용을 결제해도 되는지 여부를 확인하세요.
보다 정확한 비용을 추산하기 위해서는 가상 머신 가격 페이지에서 원하는 지역으로 필터링하고 NV12s v3 를 검색하여 '용량제' 가격을 참고하세요.
Azure VM 할당량
Azure 구독에는 한 번에 사용 가능한 VM 리소스 양의 한도가 있습니다. 이를 할당량(Quotas)이라고 합니다. 디플로이할 지역에서 원하는 VM에 충분한 할당량을 확보하려면 Microsoft 문서의 지침을 따르세요.
디폴트 환경설정에서 필요한 할당량은 Standard NVSv3 Family vCPUs 이며, 사용하는 각 NV12s_v3 인스턴스마다 12개의 vCPU가 필요합니다. 예를 들어 East US에서 2개, North Europe에서 2개의 인스턴스를 실행하려면 각 지역에서 이 제품군을 위해 vCPU 24개만큼의 할당량 증설을 요청해야 합니다.
픽셀 스트리밍 애플리케이션 패키징하기
이 Azure 솔루션은 생성한 기존 픽셀 스트리밍 애플리케이션과 함께 사용해야 합니다. 클라우드 디플로이로 넘어가기 전에 픽셀 스트리밍 시작하기 문서를 따라 앱을 로컬에서 테스트하세요.
기본적으로 이 솔루션은 Samples
폴더의 모든 웹 서버 파일을 완전히 오버라이드합니다. 웹 페이지 또는 서버에 커스터마이징한 경우, 진행하기 전에 Azure 수정 사항을 다운로드하고 포함된 README.txt
파일에 따라 변경사항을 병합하세요.
픽셀 스트리밍 애플리케이션을 패키징한 다음 Windows
폴더 전체를 .zip
파일로 압축합니다.
Azure Portal 및 Azure Marketplace 사용하기
언리얼 픽셀 스트리밍 제품은 Azure Marketplace에서 호스팅됩니다. 여기에서 제품 페이지로 이동할 수 있습니다.
오른쪽 상단 버튼을 사용하여 다른 Azure 서비스와 동일한 계정으로 Azure Marketplace에 로그인합니다.
언리얼 엔진 아이콘 아래의 Get It Now 를 클릭합니다. 하트 아이콘을 사용하여 나중을 위해 즐겨찾기로 저장할 수도 있습니다.
정보를 확인하고 이 앱을 계정에 추가할지 묻는 대화창이 표시됩니다. 입력하고 Continue 를 클릭합니다.
Azure Portal이 계정의 언리얼 픽셀 스트리밍 제품으로 열립니다. Create 를 클릭하여 디플로이 환경설정 프로세스를 시작합니다.
Basics
생성 페이지의 첫 탭은 구독 디테일, 인스턴스 타입, 애플리케이션 업로드 등 픽셀 스트리밍 디플로이의 필수 항목이 정리되어 있습니다.
Basics 탭에서 우선 Subscription 을 선택하고 글로벌 리소스를 디플로이할 빈 Resource Group 을 선택합니다. 여기에는 'Traffic Manager', 'Key Vault' 및 'Admin Dashboard' 등이 포함됩니다. Create new 버튼을 사용해야 할 수도 있습니다.
글로벌 리소스에 대한 기본 Region 을 선택합니다. 그런 다음 매치메이커 VM 및 UE 앱 VM의 인스턴스 크기를 선택합니다. 이 템플릿은 권장 크기로 기본 설정됩니다.
계속하기 전에 위에서 설명한 대로 구독에서 선택된 GPU VM 크기에 적절한 할당량을 갖췄는지 확인합니다. 할당량이 부족하면 디플로이가 실패하며 처음부터 다시 시작해야 합니다.
다음으로 압축된 픽셀 스트리밍 앱을 업로드해야 합니다. Browse 버튼을 사용하여 선택된 구독에 대한 Storage Accounts 를 엽니다.
스토리지 계정이 아직 없는 경우 상단의 + Storage Account 버튼을 사용하여 추가할 수 있습니다. Name, Location, 새 Resource Group 을 지정하고 OK 를 클릭합니다. 그러면 잠시 후 목록에서 새 스토리지 계정을 사용할 수 있습니다. 목록에서 스토리지 계정을 선택하여 엽니다.
Azure 스토리지 계정으로 업로드할 모든 파일은 Container 에 저장해야 합니다. 컨테이너가 아직 없는 경우 상단의 + Container 버튼을 사용하여 추가할 수 있습니다. Name 을 짓고 Create 를 클릭합니다. 목록에서 컨테이너를 선택하여 엽니다.
선택된 컨테이너에서 상단의 Upload 버튼을 클릭하고 폴더 아이콘을 사용하여 애플리케이션의
.zip
파일을 찾은 후 Upload 를 클릭합니다. 프로젝트 크기와 네트워크 대역폭에 따라 업로드가 완료되기까지 약간의 시간이 걸릴 수 있습니다.앱 업로드가 완료되면 컨테이너에서 파일을 선택하고 Select 를 클릭합니다.
포함된 지침에 따라 Matchmaker 또는 Signalling 서버에 커스텀 수정 사항을 적용하는 경우 프롬프트 아래 박스를 체크해야 합니다.
마지막으로 VM 사용자 이름 및 비밀번호를 설정합니다. 이 크리덴셜은 인스턴스에서 문제 디버깅에 유용한 원격 데스크톱을 활성화할 때 사용됩니다.
'Basics' 탭을 완료했다면 Next : Scale 을 클릭합니다.
Scale
이 탭에서는 디플로이의 크기와 범위를 지정합니다. Azure 언리얼 픽셀 스트리밍을 사용하면 앱이 전 세계 여러 지역의 인스턴스 다수에서 실행되도록 자동으로 구성됩니다.
작고 간단한 디플로이부터 시작하여 애플리케이션을 테스트하고 비용을 절감할 것을 권장합니다. 다수의 지역에서 가상 머신을 많이 생성하면 구독 비용이 기하급수적으로 증가합니다.
Select regions to deploy 드롭다운에서 UE 앱을 디플로이할 지역을 최대 4개까지 선택합니다. 웹 URL에 연결하는 사용자는 가장 가까운 지역(핑이 가장 낮은 지역)으로 리디렉션되므로 사용자가 주로 어디에 있을지 생각해야 합니다.
위에서 설명했듯이 각 지역에는 저마다 미리 관리할 수 있는 VM 할당량이 있다는 점에 유의하세요. 그렇지 않으면 디플로이가 실패합니다.
GPU VM Instances Per Region 에서는 선택된 지역에서 가상 머신을 얼마나 많이 실행할지 제어합니다. 아래와 같이 Auto-scaling 이 활성화되어 있는 경우 이 숫자는 온디맨드로 증가하거나 감소합니다.
Streams Per GPU VM 은 각 VM에서 실행되는 UE 앱의 인스턴스 수이며, 4로 제한됩니다. 애플리케이션이 가볍거나 높은 프레임 레이트를 필요로 하지 않는 경우, 이와 같이 GPU를 공유하면 비용을 최소화하는 데 유용합니다. 일반적으로 실행 중인 두 앱 사이에 GPU 리소스를 공유하면 프레임 레이트에 좋지 않은 영향을 미칠 수 있습니다.
Run with Azure Spot discount 라는 옵션이 있습니다. 스팟 인스턴스를 사용하면 중단 없는 서비스를 보장하지 않는 대신, 사용하지 않는 가상 머신을 활용하여 비용을 크게 절감할 수 있습니다. 이는 테스트 또는 비용 절약을 위한 좋은 옵션이 될 수 있지만 여러 세팅에 따라 VM이 언제든지 '제거'될 수 있습니다. 이러한 세팅에 대한 자세한 내용은 여기를 참고하세요.
Auto-scaling 을 활성화하면 애플리케이션 연결을 시도하는 사용자가 많아질수록 이 디플로이가 더 많은 GPU를 스핀업하며, 유휴 상태인 실행 중 인스턴스가 너무 많은 경우 스핀다운합니다. 항상 일정한 수의 인스턴스를 사용 가능하게 유지하려면 이 기능을 비활성화해야 합니다. Next : Stream Configs 를 클릭하기 전에 아래 옵션을 살펴보세요.
사용 가능한 스케일링 파라미터에 대한 정보는 다음 표를 참고하세요.
파라미터 |
설명 |
---|---|
Percent Buffer Required Before Scale |
사용 가능 상태로 유지되어야 하는 스트림(UE 앱 인스턴스)의 퍼센티지입니다. 이 조건이 충족되지 않으면 이 버퍼를 유지하기 위해 스케일 아웃 작업이 발생합니다. 이는 신규 사용자가 로드 증가 시 새 VM 스핀업을 기다리지 않게 하는 데 도움이 됩니다. 이 정책을 무시하려면 0을 선택합니다. 디폴트는 25%입니다. |
Percent Buffer Required Before Scale |
사용 가능 상태로 유지되어야 하는 스트림(UE 앱 인스턴스)의 수입니다. 이 조건이 충족되지 않으면 이 버퍼를 유지하기 위해 스케일 아웃 작업이 발생합니다. 이는 신규 사용자가 로드 증가 시 새 VM 스핀업을 기다리지 않게 하는 데 도움이 됩니다. 이 정책을 무시하려면 0으로 설정합니다. 디폴트는 1입니다. |
Idle Minutes Before Scale-Down |
새 스케일 업 작업이 발생하지 않았을 때 최소 버퍼 수로의 스케일 다운을 평가할 시간(분)입니다. 디폴트는 60입니다. |
Scale Down Amount |
스케일 다운이 발생한 경우 스케일 다운할 최대 노드 수입니다. 디폴트는 1입니다. |
Min Instance Count While Idle |
유휴 기간(즉, 야간 등 활동이 적은 기간)에 솔루션이 스케일 다운할 최소 스트림(UE 앱 인스턴스) 수입니다. 디폴트는 1입니다. |
Max Node Scale Count |
스케일 아웃될 스트림(UE 앱 인스턴스)을 포함하는 최대 GPU VM의 수입니다. 디폴트는 20입니다. 할당량이 이 인스턴스 수를 지원하는지 확인해야 합니다. |
마무리
Stream Configs 탭에서 앱의 해상도와 프레임 레이트를 조정할 수 있습니다. 이는 GPU당 스트림 2개에 대해 최적화하는 경우 유용합니다.
Security 탭에 기존 Azure DNS 리소스의 커스텀 도메인 이름을 사용하는 옵션이 있으며, 선택에 따라 HTTPS 연결을 사용할 수 있습니다. 이는 기본적으로 비활성화되어 있지만 이 문서를 참고하면 시작하는 데 도움이 됩니다. HTTPS를 사용하려면 Azure DNS 리소스를 활성화하고, base64 인코딩 포맷의 퍼블릭 및 프라이빗 키 쌍이 있어야 합니다.
HTTPS가 환경설정된 경우 Enable Auth on Signalling Server 도 사용할 수 있으며, 이는 사용자가 브라우저에서 애플리케이션에 첫 액세스를 시도할 때 로그인 페이지로 리디렉션합니다. 인증을 마치면 애플리케이션으로 리디렉션됩니다. 이 세팅을 활성화하면 사용자 계정 추가를 위해 다음 단계에서 'Admin Dashboard'도 활성화해야 합니다.
Networking 탭에는 환경설정할 수 있는 몇 가지 고급 세팅이 있습니다. 주의해야 할 주요 세팅 중 하나는 STUN 및 TURN 서버 환경설정입니다. 기본적으로 사용되는 퍼블릭 Google STUN 서버는 대부분의 최종 사용자를 UE 앱의 WebRTC 스트림에 연결할 수 있습니다. 하지만 많은 기업 네트워크, VPN 및 셀룰러 네트워크에서는 TURN 서버를 통해 스트림을 중계하지 않으면 앱이 제대로 스트리밍할 수 없습니다. 이러한 옵션에 대한 자세한 내용은 호스팅 및 네트워킹 가이드를 참고하세요.
Admin Dashboard 탭에서는 관리 대시보드를 활성화할 수 있습니다. 이는 기본 트래픽 분석 정보를 확인하기 위한 단순한 인터페이스를 제공하며, 사용자에게 액세스를 제공하고(활성화된 경우), 앱의 새 버전을 업로드하며, 자동 스케일 파라미터를 변경합니다.
이 기능을 사용하려면 Azure Active Directory에 앱을 등록해야 하므로 조직의 적절한 권한이 필요합니다. 이 Microsoft 문서를 따라 다른 탭에서 앱 등록을 생성하고 애플리케이션(클라이언트) ID 를 복사해서 붙여 넣으세요.
모든 세팅을 환경설정한 다음 Review + create 를 클릭합니다. 유효성 검사를 통과하고 모두 올바른 것으로 확인되면 Create 를 클릭하여 디플로이를 시작합니다. 앱 다운로드를 위해 GPU VM을 부팅해야 하는 등 필수 리소스를 생성하는 데는 몇 분이 걸릴 수 있습니다. 디플로이가 완료되면 Go to resource group 을 클릭합니다.
스트리밍 인스턴스에 연결하기
디플로이의 프라이머리 리소스 그룹에서 Traffic Manager profile 을 선택합니다.
Essentials 섹션의 오른쪽 상단에 이 리소스의 DNS 이름 이 있습니다. 이 URL을 여기에서 복사하여 새 브라우저 탭에 붙여 넣습니다. 이는 모든 사용자가 애플리케이션 액세스 시 사용할 수 있는 범용 URL입니다. 사용자는 가장 가까운 지역의 매치메이커 VM으로 다시 라우팅되고 GPU 인스턴스에서 처음 사용 가능한 스트림으로 다시 리디렉션됩니다.
Admin Dashboard 활성화
환경설정 도중 Admin Dashboard를 활성화했다면 모든 리소스가 디플로이된 후 이를 활성화하기 위해 추가 구성이 필요합니다.
프라이머리 리소스 그룹에서 App Service 를 '-dashboard' 이름과 함께 엽니다.
Essentials 섹션의 오른쪽 상단에 이 리소스의 URL 이 있습니다. 이 주소를 복사합니다.
이 대시보드에 대해 생성한 AAD App Registration 으로 돌아갑니다. Essentials 의 오른쪽 열에서 Add a Redirect URI 를 클릭합니다.
Add a platform 을 클릭하고 팝업 창에서 Web 을 클릭합니다.
대시보드 앱 서비스의 URL을 Redirect URI 에 붙여 넣고 끝에
/.auth/login/aad/callback
을 추가합니다. Configure 를 클릭합니다.페이지 중간에 Implicit grant and hybrid flows 라는 섹션이 있습니다. 액세스 토큰과 ID 토큰을 발급하려면 여기에서 두 개의 박스를 선택하세요. 페이지 하단의 Save 를 클릭합니다.
몇 분 후에 붙여 넣은 원본 URL을 방문하면 Admin Dashboard 가 표시됩니다. 이 URL은 App Service 에서 언제든 다시 볼 수 있습니다.
애플리케이션 업데이트
'Admin Dashboard'가 활성화된 경우 아래 단계를 따라 픽셀 스트리밍 디플로이를 새 UE 앱 빌드로 업데이트할 수 있습니다. 'Admin Dashboard'가 없다면 모든 구성 및 환경설정을 다시 실행해야 합니다. 대시보드 메서드는 기존 리소스 및 리소스 그룹을 활용하지만 새 디플로이는 모든 리소스를 새로 생성하며 기존 디플로이를 덮어쓰거나 삭제하지 않습니다.
앱의 WindowsNoEditor 폴더 압축과 동일한 준비 단계를 따릅니다.
글로벌 리소스 그룹에서 'Storage Account'를 선택합니다.
왼쪽 패널에서 Containers 를 선택하고 Uploads 컨테이너를 엽니다. 여기에 zip 파일을 업로드합니다.
브라우저에서 'Admin Dashboard'를 찾습니다. 왼쪽 내비게이션에서 Settings 를 선택합니다.
Add New Version 을 클릭하고 필요에 따라 세팅을 조정합니다. 'Storage Account'에 업로드한
.zip
파일을 Select blob 을 사용하여 선택합니다. 완료되면 Add Version 을 클릭합니다.매치메이킹 및 시그널링 서버는 30초마다 업데이트를 확인하고 즉시 새 버전을 다시 디플로이합니다.
스케일 업/다운 없이 정확히 몇 개의 인스턴스를 실행할지 제어하고 싶은 경우 Min Idle Instance Count 및 Max Instance Scale Count 를 원하는 인스턴스 수와 동일한 수로 변경합니다. 자동 스케일링을 비활성화하고 각 지역의 가상 머신 스케일 설정(VMSS)에 있는 스케일링 페이지를 통해 인스턴스 수를 수동으로 설정할 수도 있습니다.
인증된 계정 추가하기
Enable Auth on SignallingServer 가 디플로이 도중 'Security' 탭에서 적절하게 환경설정된 경우 스트림에 액세스 가능한 사용자 계정을 추가해야 합니다. Admin Dashboard 의 왼쪽 내비게이션에서 Accounts 를 클릭하고 Add Account 를 클릭합니다. 사용자가 앱에 액세스하려면 제공된 크리덴셜을 사용해야 합니다.
로그 검토하기
디플로이와 관련된 문제의 디버깅을 지원하기 위해 매치메이킹 및 시그널링 서버에서 모든 활동의 자세한 로그를 검토할 수 있습니다.
글로벌 리소스 그룹에서 Log Analytics 워크스페이스 리소스의 이름을 클릭합니다.
왼쪽 패널의 General 섹션에서 Logs 를 클릭합니다.
반드시 연관성이 있는 것은 아닌 사용 가능한 쿼리를 보여주는 팝업 대화창이 표시될 수 있습니다. Always show Queries 옵션을 토글하고 X 를 클릭하여 대화창을 닫습니다.
이중 화살표를 클릭하여 디폴트 New Query 탭 안에 있는 Schema and Filter 패널을 펼칩니다.
Custom Logs 항목 옆의 화살표를 클릭하여 펼칩니다. Custom Logs에 항목이 나타나지 않는다면 디플로이가 기록될 만큼 오랫동안 활성화되지 않았기 때문일 수 있으며 몇 분 후에 다시 확인할 수 있습니다.
armlog_newline_CL
항목을 더블클릭합니다. 이렇게 하면 해당 항목이 활성 쿼리에 추가됩니다.파란색 Run 버튼을 클릭하여 VM 로그 쿼리를 시작합니다. 선택적으로, 디폴트 24시간이 아닌 다른 값으로 시간 범위를 조정할 수 있습니다.
이렇게 하면 디플로이 내에서 사용 가능한 모든 VM의 사용 가능한 모든 로그가 들어있는 테이블이 생성되며, 이는 상당히 자세할 수 있습니다. 열을 클릭하여 데이터를 정렬할 수 있으며, 테이블 우측 상단에 있는 돋보기를 클릭하여 데이터를 검색하거나 필터링할 수 있습니다. 'connected' 또는 'download'와 같은 단어를 활용하여 로그를 검토할 수 있습니다.
전체 디플로이 삭제하기
픽셀 스트리밍 디플로이를 삭제하고 관련된 비용을 모두 중지하려면 생성된 리소스 그룹을 삭제해야 합니다. 초기 디플로이 후 다음과 같이 최소 3개 리소스 그룹, 즉 각 지역을 위한 하나의 리소스 그룹(GPU 인스턴스용), 하나의 스토리지 리소스 그룹(초기 .zip
파일 업로드용), 하나의 글로벌 리소스 그룹(Traffic Manager 및 Admin Dashboard용)을 구독에 포함시켜야 합니다. 스토리지 리소스 그룹은 향후 디플로이에서 재사용할 수 있습니다.
디플로이에 사용되는 리소스 그룹에는 Essentials 영역에 RandomString: xyz
라는 Tag 가 있습니다. 해당 태그를 클릭하면 여러 그룹을 더 쉽게 탐색하고 삭제할 수 있도록 관련된 리소스 그룹만 표시됩니다.
리소스 그룹을 삭제하려면 우선 그룹을 열고 상단에서 Delete resource group 버튼을 클릭합니다. 삭제 여부를 확인합니다. 삭제가 완전히 처리되고 구독에서 그룹이 제거되기까지 약간의 시간이 걸릴 수 있습니다. 필요한 만큼 다른 리소스 그룹에서 삭제를 반복합니다.
커스텀 도메인을 설정하는 경우 DNS 존에 추가된 레코드도 삭제해야 합니다.