329
Amazon GameLift 개발자 안내서 버전

Amazon GameLift - 개발자 안내서 · Amazon GameLift 개발자 안내서 Realtime 서버를 사용하는 관리형 GameLift 주요 기능 •다양한 AWS 리전에 컴퓨팅

  • Upload
    others

  • View
    56

  • Download
    0

Embed Size (px)

Citation preview

Amazon GameLift개발자 안내서

버전

Amazon GameLift 개발자 안내서

Amazon GameLift: 개발자 안내서Copyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Amazon GameLift 개발자 안내서

Table of ContentsAmazon GameLift란 무엇입니까? .......................................................................................................... 1

왜 GameLift를 사용해야 합니까? ................................................................................................... 1GameLift 솔루션 ......................................................................................................................... 1

관리형 GameLift ................................................................................................................. 1Realtime 서버를 사용하는 관리형 GameLift ............................................................................ 2독립형 GameLift FleetIQ[평가판] ........................................................................................... 2

GameLift 작동 방식 ..................................................................................................................... 3핵심 구성 요소 ................................................................................................................... 3게임 서버 호스팅 ................................................................................................................ 4게임 세션 실행 ................................................................................................................... 5플릿 용량 조정 ................................................................................................................... 5플릿 활동 모니터링 및 문제 해결 .......................................................................................... 7AWS 리소스와의 네트워킹 ................................................................................................... 7

Realtime 서버의 작동 방식 ........................................................................................................... 7Realtime 서버란 무엇입니까? ............................................................................................... 8게임의 Realtime 서버 선택 ................................................................................................... 8핵심 구성 요소 ................................................................................................................... 8Realtime 서버가 게임 세션을 관리하는 방법 ........................................................................... 9Realtime 클라이언트와 서버가 상호 작용하는 방식 .................................................................. 9Realtime 서버 사용자 지정 ................................................................................................. 10Realtime 서버 배포 및 업데이트 .......................................................................................... 11

플레이어의 게임 연결 방법 ......................................................................................................... 11게임 및 플레이어 세션 기능 ................................................................................................ 11

GameLiftFlexMatch의 작동 방식 .................................................................................................. 12FlexMatch 주요 기능 ......................................................................................................... 13FlexMatch 구성 요소 ......................................................................................................... 13매치메이킹 프로세스 ......................................................................................................... 14백필 프로세스 .................................................................................................................. 15

관리형 GameLift를 사용한 게임 아키텍처 ..................................................................................... 15Realtime 서버를 사용한 게임 아키텍처 ......................................................................................... 17

설정 ................................................................................................................................................ 20AWS 계정 설정 ........................................................................................................................ 20

IAM 정책 예제 .................................................................................................................. 20Amazon GameLift 액세스를 위한 역할 설정 .................................................................................. 22GameLift SDK .......................................................................................................................... 23

사용자 지정 게임 서버 ....................................................................................................... 26Realtime 서버의 경우 ........................................................................................................ 26클라이언트 서비스 ............................................................................................................ 27

도구 및 리소스 ......................................................................................................................... 27핵심 도구 ......................................................................................................................... 27추가 리소스 ...................................................................................................................... 28

AWS 결제 알림 설정 ................................................................................................................. 29GameLift에서 표현식 사용 .......................................................................................................... 29

시작하기 .......................................................................................................................................... 30GameLift 둘러보기 .................................................................................................................... 30

Realtime 서버 샘플 게임(전체 소스) ..................................................................................... 30사용자 지정 게임 서버 샘플(콘솔 환경) ................................................................................ 30

사용자 지정 서버 시작하기 ......................................................................................................... 31Realtime 서버 시작하기 ............................................................................................................. 32

GameLift 게임 준비 중 ....................................................................................................................... 34사용자 지정 게임 서버에 게임 통합 ............................................................................................. 34

게임 엔진 및 GameLift ....................................................................................................... 34게임 서버 통합 ................................................................................................................. 42게임 클라이언트 통합 ........................................................................................................ 46

버전iii

Amazon GameLift 개발자 안내서

GameLift 상호 작용 ........................................................................................................... 51통합 테스트 ...................................................................................................................... 53

게임에 Realtime 서버 통합 ......................................................................................................... 58게임 클라이언트 통합 ........................................................................................................ 58Realtime 스크립트 사용자 지정 ........................................................................................... 62

FlexMatch 매치메이킹 추가 ........................................................................................................ 68FlexMatch 통합 로드맵 ...................................................................................................... 68게임 클라이언트에 FlexMatch 추가 ...................................................................................... 69게임 서버에 FlexMatch 추가 ............................................................................................... 73기존 게임 채우기 .............................................................................................................. 75

호스팅 리소스 관리 ........................................................................................................................... 81GameLift 호스팅 리소스 정보 ...................................................................................................... 81.............................................................................................................................................. 82

모범 사례 ......................................................................................................................... 83AWS CloudFormation 스택 사용 .......................................................................................... 84빌드 업데이트 .................................................................................................................. 87

빌드 및 스크립트 업로드 ............................................................................................................ 89사용자 지정 서버 빌드 업로드 ............................................................................................. 89Realtime 서버 스크립트 업로드 ........................................................................................... 93

플릿 설정 ................................................................................................................................. 96플릿 설계 가이드 .............................................................................................................. 96사용자 지정 게임 빌드용 플릿 배포 .................................................................................... 101Realtime 서버 플릿 배포 .................................................................................................. 105플릿 관리 ....................................................................................................................... 108플릿에 별칭 추가 ............................................................................................................. 109플릿 문제 디버깅 ............................................................................................................. 110플릿 인스턴스에 원격으로 액세스 ...................................................................................... 113

플릿 용량 조정 ........................................................................................................................ 115콘솔에서 플릿 용량을 설정하려면 ...................................................................................... 116플릿 용량 제한 설정 ........................................................................................................ 116수동으로 플릿 용량 설정 .................................................................................................. 118플릿 용량 Auto-Scale ....................................................................................................... 119

다중 리전 대기열 사용 ............................................................................................................. 124대기열 설계 .................................................................................................................... 124대기열 생성 .................................................................................................................... 129대기열 보기 .................................................................................................................... 131

FlexMatch 매치메이커 설정 ...................................................................................................... 133매치메이커 설계 .............................................................................................................. 133매치메이킹 구성 생성 ...................................................................................................... 135규칙 세트 빌드 ................................................................................................................ 136이벤트 알림 설정 ............................................................................................................. 158

VPC 피어링 ............................................................................................................................ 160기존 플릿용 VPC 피어링을 설정하려면 ............................................................................... 160새 플릿으로 VPC 피어링을 설정하려면 ............................................................................... 161VPC 피어링 문제 해결 ..................................................................................................... 163

게임 데이터 보기 ............................................................................................................................ 164현재 GameLift 상태 보기 .......................................................................................................... 164빌드 보기 ............................................................................................................................... 165

빌드 카탈로그 ................................................................................................................. 165빌드 세부 정보 ................................................................................................................ 166

플릿 보기 ............................................................................................................................... 166플릿 세부 정보 보기 ................................................................................................................ 166

요약 .............................................................................................................................. 167측정치 ........................................................................................................................... 167이벤트 ........................................................................................................................... 168확장 .............................................................................................................................. 168게임 세션 ....................................................................................................................... 169

버전iv

Amazon GameLift 개발자 안내서

빌드 .............................................................................................................................. 169용량 할당 ....................................................................................................................... 169포트 .............................................................................................................................. 169ARN .............................................................................................................................. 169

게임 및 플레이어 정보 보기 ...................................................................................................... 169게임 세션 ....................................................................................................................... 170플레이어 세션 ................................................................................................................. 170플레이어 정보 ................................................................................................................. 171

별칭 보기 ............................................................................................................................... 171별칭 카탈로그 ................................................................................................................. 171별칭 세부 정보 ................................................................................................................ 171

GameLift 모니터링 .......................................................................................................................... 172CloudWatch로 모니터링 ........................................................................................................... 172

플릿에 대한 GameLift 지표 ............................................................................................... 172대기열에 대한 GameLift 지표 ............................................................................................ 176매치메이킹에 대한 GameLift 지표 ...................................................................................... 178FleetIQ에 대한 GameLift 지표 ........................................................................................... 181GameLift 지표 차원 ......................................................................................................... 182

API 호출 로깅 ......................................................................................................................... 183CloudTrail의 Amazon GameLift 정보 .................................................................................. 183Amazon GameLift 로그 파일 항목 이해 ............................................................................... 183

GameLift FleetIQ 가이드[미리 보기] ................................................................................................... 186GameLift FleetIQ 기능 ............................................................................................................. 186............................................................................................................................................ 187

GameLift FleetIQ 로직 ..................................................................................................... 187주요 리소스 및 구성 요소 ................................................................................................. 190

게임 아키텍처 ......................................................................................................................... 191온프레미스 호스팅 보완 ................................................................................................... 191

수명 주기 및 상태 ................................................................................................................... 192스팟 리밸런싱 프로세스 ................................................................................................... 192게임 서버 그룹의 수명 ..................................................................................................... 193게임 서버의 수명 ............................................................................................................. 194

설정 ...................................................................................................................................... 196SDK 및 플랫폼 ............................................................................................................... 196AWS 계정 설정 ............................................................................................................... 197

............................................................................................................................................ 200게임 서버 통합 ................................................................................................................ 201게임 클라이언트 통합 ...................................................................................................... 202게임 서버 그룹 생성 및 업데이트 ....................................................................................... 203

모범 사례 ............................................................................................................................... 204CloudWatch로 모니터링 ........................................................................................................... 205

보안 .............................................................................................................................................. 207데이터 보호 ............................................................................................................................ 207

저장된 암호화 ................................................................................................................. 208전송 중 데이터 암호화 ..................................................................................................... 208인터네트워크 트래픽 개인 정보 보호 .................................................................................. 209

ID 및 액세스 관리 ................................................................................................................... 209대상 .............................................................................................................................. 209자격 증명을 통한 인증 ..................................................................................................... 209정책을 사용하여 액세스 관리 ............................................................................................ 211GameLift에서 IAM를 사용하는 방법 .................................................................................... 212자격 증명 기반 정책 예제 ................................................................................................. 215문제 해결 ....................................................................................................................... 218

GameLift를 사용한 로깅 및 모니터링 .......................................................................................... 220규정 준수 확인 ........................................................................................................................ 220복원성 ................................................................................................................................... 221인프라 보안 ............................................................................................................................ 221

버전v

Amazon GameLift 개발자 안내서

구성 및 취약성 분석 ................................................................................................................ 222보안 모범 사례 ........................................................................................................................ 222

Amazon GameLift 레퍼런스 가이드 .................................................................................................... 223서비스 API 참조(AWS SDK) ..................................................................................................... 223

게임 세션 및 플레이어 작업 .............................................................................................. 223호스팅 리소스 작업 ......................................................................................................... 224FlexMatch 매치메이킹 작업 .............................................................................................. 226GameLift FleetIQ 작업 ..................................................................................................... 227사용 가능한 프로그래밍 언어 ............................................................................................ 227

Realtime 서버 참조 .................................................................................................................. 228Realtime Client API(C#) 참조 ............................................................................................ 228Realtime 서버 스크립트 참조 ............................................................................................ 238

Server SDK 참조 ..................................................................................................................... 243C++용 Server API reference ............................................................................................. 244Server API(C#) Reference ................................................................................................ 259Server API(Unreal Engine) Reference ................................................................................ 273

FlexMatch 참조 ....................................................................................................................... 281규칙 세트 스키마 ............................................................................................................. 281규칙 언어 ....................................................................................................................... 287매치메이킹 이벤트 ........................................................................................................... 291

릴리스 정보 .................................................................................................................................... 300SDK 버전 ............................................................................................................................... 300릴리스 정보 ............................................................................................................................ 301Lumberyard 호환성 .................................................................................................................. 302

문서 기록 ....................................................................................................................................... 303AWS Glossary ................................................................................................................................ 323

버전vi

Amazon GameLift 개발자 안내서왜 GameLift를 사용해야 합니까?

Amazon GameLift란 무엇입니까?Amazon GameLift를 사용하면 개발자가 세션 기반 멀티플레이어 게임을 위해 클라우드에서 저비용 전용 서버를 배포, 운영 및 확장할 수 있습니다. AWS 글로벌 컴퓨팅 인프라를 기반으로 구축된 GameLift는 고성능,높은 안정성, 저비용 게임 서버를 제공하는 동시에 리소스 사용량을 동적으로 조정하여 전 세계 플레이어 수요를 충족할 수 있습니다.

왜 GameLift를 사용해야 합니까?Amazon GameLift의 장점은 다음과 같습니다.

• 완전 사용자 지정 멀티플레이어 게임 서버를 가져오거나 구성이 거의 필요 없고 백엔드 경험이 거의 없거나 전혀 없어 바로 사용할 수 있는 Realtime 서버를 사용합니다.

• 플레이어에게 짧은 지연 시간을 제공하여 빠른 액션 게임 플레이를 지원합니다.• 지능형 대기열, 게임 세션 배치 및 매치 채우기 기능으로 매치메이킹 서비스를 개선합니다.• 게임 서버를 배포하고 운영하는 데 필요한 엔지니어링 및 운영 작업이 적습니다.• 선행 투자 및 장기 약정 없이 빠르게 시작하고 사용량만큼 지불하는 요금제를 적용합니다.• 스팟 인스턴스로 최대 90%까지 비용을 절감합니다• Amazon Web Services(AWS)를 사용합니다. 여기에는 호스팅 용량 관리를 위한 auto-scaling 및 웹 규모의

클라우드 컴퓨팅 리소스를 위한 Amazon Elastic Compute Cloud(Amazon EC2)도 포함됩니다.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

GameLift 솔루션GameLift는 게임 개발자를 위한 다양한 솔루션을 제공합니다.

• 사용자 지정으로 구축된 게임 서버에 대한 관리형 GameLift 호스팅• Realtime 서버를 사용하는 관리형 GameLift 호스팅• Amazon EC2에서의 직접 게임 호스팅을 위한 GameLift FleetIQ 독립형 기능[평가판]

관리형 GameLiftAmazon GameLift는 세션 기반 멀티플레이어 게임 서버를 배포, 운영 및 조정하는 완전관리형 서비스입니다.GameLift는 고유한 사용자 지정 게임 서버를 호스팅하는 데 필요한 작업, 즉 하드웨어 구입 및 설정, 지속적인 활동, 보안, 스토리지, 성능 추적 관리 등을 대체합니다. Auto-scaling 기능은 필요 이상의 리소스 사용 없이 추가적인 보호를 제공하는 동시에 새 플레이어가 항상 최소한의 대기 시간으로 게임에 참여할 수 있도록지원합니다.

관리형 GameLift 솔루션의 작동 방식에 대한 자세한 내용은 Amazon GameLift 작동 방식 (p. 3) 단원을참조하십시오.

버전1

Amazon GameLift 개발자 안내서Realtime 서버를 사용하는 관리형 GameLift

주요 기능

• 다양한 AWS 리전에 컴퓨팅 리소스를 배포하여 전 세계 플레이어에게 고품질 게임 호스팅을 제공합니다.• Amazon Linux 또는 Windows Server 운영 체제에서 실행할 게임 서버를 배포합니다.• FleetIQ에서 저비용 스팟 인스턴스의 사용을 최적화하도록 합니다. FleetIQ만으론 중단 가능성 때문에 게

임 호스팅에 스팟 인스턴스가 항상 실행 가능한 것은 아닙니다. FleetIQ 예측 알고리즘에서 새 게임 세션을호스팅하는 데 가장 적합한 스팟 인스턴스를 찾습니다.

• 자동 조정 도구를 사용하여 실제 플레이어 수요를 충족하도록 게임 호스팅 용량을 조정합니다. 이러한 도구를 사용하면 새 플레이어가 게임에 빠르게 참여할 수 있도록 충분한 용량을 유지하면서 호스팅 비용을적정 수준으로 유지할 수 있습니다.

• FlexMatch를 사용하여 게임을 위한 사용자 지정 매치메이킹 서비스를 구축합니다. 최대 200명의 플레이어에 대한 단일 팀 또는 여러 팀 매치를 생성합니다.

• 게임 세션 및 플레이어 세션을 관리합니다. 허용된 최대 플레이어 수, 참여 규칙, 게임별 속성 등 게임 세션특성을 구성합니다.

• 플레이어가 적합한 게임 세션을 찾을 수 있도록 다양한 옵션 중에서 선택합니다. GameLift 대기열을 사용하여 여러 리전에 새 게임 세션을 지능적으로 배치하거나, 플레이어에게 사용 가능한 게임 세션의 필터링되고 정렬된 목록(“나열 및 선택”)을 제공하거나, FlexMatch를 사용하여 전체 매치메이킹 시스템을 구현합니다.

• Amazon GameLift 콘솔을 이용해 게임 성능을 분석하여 측정치를 추적하고, 게임 세션 로그를 확인하며,개별 게임 세션 및 플레이어 세션에 대한 데이터를 검토합니다.

• 서버 프로세스에 사용자 지정 상태 추적을 설정하여 문제를 빠르게 검색하고 성능이 저하된 프로세스의 문제를 해결합니다.

• GameLift에 대한 AWS CloudFormation 템플릿을 사용하여 게임 리소스를 관리합니다.

Realtime 서버를 사용하는 관리형 GameLiftRealtime 서버를 사용하여 사용자 지정으로 구축된 게임 서버가 필요 없는 게임을 지원합니다. 이 경량 서버솔루션은 게임에 맞게 구성할 수 있는 즉시 사용 가능한 게임 서버를 제공합니다. 최소 구성 설정부터 게임및 플레이어별 사용자 지정 로직에 이르기까지 모든 항목을 사용하여 게임 서버를 배포할 수 있습니다.

Realtime 서버 솔루션을 사용하는 관리형 GameLift의 작동 방식에 대한 자세한 내용은 Realtime 서버의 작동방식 (p. 7) 단원을 참조하십시오.

주요 기능

• Auto Scaling, 다중 리전 대기열, FleetIQ를 사용한 게임 세션 배치, 게임 세션 로깅 및 지표 등의 GameLift관리 기능을 사용합니다.

• GameLift 호스팅 리소스를 사용하여 해당 플릿에 대한 AWS 컴퓨팅 하드웨어 유형을 선택합니다. 스팟 또는 온디맨드 인스턴스를 사용합니다.

• 게임 클라이언트/서버 상호 작용을 위한 전체 네트워크 스택을 활용합니다.• 사용자 지정 가능한 서버 로직으로 핵심 게임 서버 기능을 얻습니다.• Realtime 구성 및 서버 로직에 대한 실시간 업데이트를 수행합니다. 언제든지 Realtime 서버 구성을 업데

이트합니다.• FlexMatch 매치메이킹을 구현합니다.

독립형 GameLift FleetIQ[평가판]GameLift FleetIQ는 클라우드 기반 게임 호스팅을 위한 저비용 스팟 인스턴스의 사용을 최적화합니다. 이 기능을 사용하면 GameLift 최적화를 활용하여 플레이어를 위해 저비용의 탄력적인 게임 호스팅을 제공하는동시에 Amazon EC2 및 Auto Scaling에서 호스팅 리소스를 직접 작업할 수 있습니다. 이 솔루션은 관리형GameLift 솔루션에서 제공되는 것보다 더 많은 유연성을 필요로 하는 게임 개발자를 위해 설계되었습니다.

버전2

Amazon GameLift 개발자 안내서GameLift 작동 방식

독립형 GameLift FleetIQ 솔루션의 작동 방식에 대한 자세한 내용은 GameLift FleetIQ 가이드[공개 미리 보기] (p. 186) 단원을 참조하십시오.

주요 기능

• GameLift FleetIQ 예측 알고리즘을 사용하여 최적화된 스팟 리밸런싱을 얻습니다.• 최고의 플레이어 경험과 리소스 관리를 위해 플레이어 라우팅 기능을 사용합니다.• 플레이어 사용량에 따라 자동으로 조정합니다.• 자체 AWS 계정에서 Amazon EC2 인스턴스를 직접 관리합니다.• Windows, Linux, 컨테이너 및 Kubernetes 등 지원되는 여러 게임 서버 실행 파일 형식 중 하나를 사용합니

다.• 여러 유형의 Amazon EC2 컴퓨팅 리소스 중에서 선택합니다.• 중국을 포함한 15개 리전에 배포하여 전 세계 플레이어를 만납니다.

Amazon GameLift 작동 방식이 주제에서는 관리형 Amazon GameLift 솔루션에 대한 일반적인 개요를 제공합니다. 구체적으로 해당 솔루션의 핵심 구성 요소를 다루며 이러한 서비스를 통해 플레이어가 멀티플레이어 게임 서버를 사용하게되는 방식을 설명합니다. 관리형 GameLift의 역할과 작동 방식에 대해 자세히 알아보려면 이 주제 및 다음관련 주제부터 시작하십시오. 다른 GameLift 솔루션에 대한 자세한 내용은 Amazon GameLift란 무엇입니까? (p. 1) 단원을 참조하십시오.

• 플레이어의 게임 연결 방법 (p. 11)• 게임 엔진 및 Amazon GameLift (p. 34)• 대기열을 사용하는 이유 (p. 124)• Amazon GameLiftFlexMatch의 작동 방식 (p. 12)

GameLift에서 게임을 호스팅할 준비가 되셨습니까? 통합 로드맵을 포함하여 다음 Amazon GameLift 시작하기 (p. 30) 주제를 참조하십시오.

핵심 구성 요소Amazon GameLift가 게임을 호스팅하도록 설정하려면 다음 주요 구성 요소가 필요합니다. 이러한 구성 요소간의 관계는 관리형 GameLift를 사용한 게임 아키텍처 (p. 15)에 설명되어 있습니다.

• 게임 서버는 클라우드에서 실행되는 게임의 서버 소프트웨어입니다. 서버 실행 파일, 지원 자산, 라이브러리 및 종속성이 포함된 완벽한 사용자 지정 게임 서버 빌드가 있을 수 있습니다. Realtime 서버를 사용하는경우에는 일부 선택적 사용자 지정 게임 로직이 포함된 구성 스크립트가 있습니다. 게임 서버 빌드 또는 스크립트를 Amazon GameLift 서비스에 업로드하면 GameLift는 호스팅을 위해 가상 컴퓨팅 리소스에 이 빌드 또는 스크립트를 배포합니다.

• 게임 세션은 Amazon GameLift 리소스에서 실행되는 게임 서버의 인스턴스로, 플레이어가 연결되어 상호작용합니다. 수명 및 플레이어 수와 같은 게임 세션의 기본 특성을 정의합니다.

• Amazon GameLift서비스는 게임 서버를 호스팅하기 위한 컴퓨팅 리소스를 관리하고 플레이어가 게임에연결할 수 있도록 해줍니다. 서비스는 플레이어 요구를 충족하는 데 필요한 리소스를 조절하고, 새로운 게임 세션을 시작하며, 활성 게임 세션에서 플레이어 슬롯을 찾아 예약하여 새 플레이어 요청을 처리합니다.또한 이 서비스는 플레이어 사용률 및 서버 상태에 대한 지표를 수집합니다.

• 게임 클라이언트는 플레이어의 디바이스에서 실행되는 게임 소프트웨어입니다. 게임 클라이언트는 사용가능한 게임 세션에 대해 GameLift 서비스에 요청합니다. 또한 GameLift 서비스로부터 수신하는 정보를사용하여 게임 세션에 직접 연결합니다.

• 게임 서비스는 GameLift와 관련된 특별 작업을 처리하기 위해 생성할 수 있는 추가적인 사용자 지정 서비스입니다. 예를 들어 대부분의 게임은 게임 클라이언트에서 서비스를 직접 호출하는 대신, 클라이언트 서비스를 사용하여 GameLift 서비스와의 통신을 처리합니다.

버전3

Amazon GameLift 개발자 안내서게임 서버 호스팅

이러한 구성 요소가 어떻게 상호 작용하는지에 관한 자세한 설명은 Amazon GameLift와 게임 클라이언트/서버 상호 작용 (p. 51) 단원을 참조하십시오.

게임 서버 호스팅업로드한 게임 서버는 인스턴스라는 Amazon GameLift 가상 컴퓨팅 리소스에 호스팅됩니다. 게임 서버(사용자 지정 게임 서버 또는 구성된 Realtime 서버)를 실행하기 위해 인스턴스의 플릿을 생성하고 배포하여 호스팅 리소스를 설정합니다. 게임의 요구 사항에 맞게 플릿을 설계할 수 있습니다.

플릿 아키텍처

핵심 요구 사항에 적합한 플릿을 빌드합니다.

• 게임에서 필요한 리소스 유형은 무엇입니까? – GameLift는 다양한 운영 체제 및 인스턴스 유형을 지원합니다. 인스턴스 유형은 처리 능력, 메모리 및 네트워킹 용량을 포함하여 사용된 컴퓨팅 하드웨어의 종류를결정합니다. 플릿 비용은 사용하는 인스턴스의 유형과 수를 기반으로 합니다. 게임의 요구 사항에 따라 많은 스물 인스턴스 또는 적지만 보다 강력한 인스턴스를 사용할 수 있습니다. 컴퓨팅 리소스 선택 (p. 97)방법에 대해 자세히 알아보십시오.

• 어디에 게임 서버를 실행하시겠습니까? – 플레이어가 게임에 조인하기 위해 대기 중인 곳이면 어디에서나플릿을 설정합니다. 각 플릿은 단일 AWS 리전에 배포되지만, 필요한 만큼 많은 리전에 플릿을 생성할 수있습니다. Amazon GameLift에 사용 가능한 리전은 AWS 리전 및 엔드포인트에서 확인하십시오.

• 게임 서버 안정성이 얼마나 심각합니까? – 플릿은 스팟 인스턴스 또는 온디맨드 인스턴스를 사용합니다.스팟 인스턴스(EC2의 스팟 인스턴스 기반)는 일반적으로 비용이 적게 들지만, 게임 세션 동안 중단될 수있습니다. 그러나 GameLift에는 게임 세션 중단이 거의 발생하지 않도록 만드는 추가 보안 조치가 있으므로, 대부분의 게임에는 스팟 인스턴스가 있는 플릿이 적합합니다. 반대로 온디맨드 인스턴스는 일관된 가용성을 제공하지만 더 많은 비용이 들 수 있습니다. 이는 게임 세션이 중단될 경우 플레이어가 강한 영향을받는 게임에 적합한 옵션입니다. 스팟 인스턴스 및 온디맨드 인스턴스에 대해 자세히 알아보기

• 얼마나 많은 플레이어를 지원해야 합니까? – 플릿에는 각각 여러 게임 세션을 동시에 호스팅할 수 있는 많은 인스턴스가 있을 수 있습니다. 필요에 따라 인스턴스를 플릿에 추가하거나 플릿에서 제거할 수 있고, 자동 조정을 사용하여 플레이어 수요 변화에 따라 자동으로 조정할 수 있습니다. 플릿 용량 조정 (p. 5)단원에 대해 자세히 알아봅니다.

서버 런타임 구성

플릿 인스턴스는 여러 프로세스를 동시에 실행할 수 있고, 게임 서버 빌드에서 모든 실행 파일을 실행할 수있습니다. 각 인스턴스에서 프로세스를 어떻게 실행해야 하는지 결정하기 위해 런타임 구성을 생성합니다.구성에서는 (1) 실행할 실행 파일, (2) 동시에 실행할 각 실행 파일의 프로세스 수 및 (3) 각 실행 파일을 시작할 때 사용할 시작 파라미터를 지정합니다. 인스턴스가 동시에 실행할 수 있는 프로세스 수는 인스턴스의컴퓨팅 파워(인스턴스 유형)와 게임 서버 빌드의 요구 사항에 따라 달라집니다. 플릿에서 여러 프로세스 실행 (p. 98)에 대해 자세히 알아보십시오. 플릿의 전체 수명 동안 런타임 구성을 업데이트할 수 있습니다.

런타임 구성은 새로운 게임 세션이 인스턴스에서 시작되는 방법에도 영향을 줄 수 있습니다. 일부 게임은 스타트업 단계 동안 많은 리소스가 필요하므로 한 번에 새로운 게임 세션을 활성화하는 데 사용되는 인스턴스리소스를 제한하는 것이 좋은 방법일 수 있습니다. 인스턴스당 최대 동시 게임 세션 활성화 수를 지정할 수있습니다. 또한 활성화되지 못한 게임 세션을 신속하게 감지하고 종료하기 위해 각 게임 세션 활성화에 대한시간을 제한할 수 있습니다.

서버 보안

플릿에 대해 PKI 리소스 생성을 활성화합니다. 이 기능이 활성화되면 GameLift는 플릿용 TLS 인증서를 생성하고 플릿의 각 인스턴스에 대한 DNS 항목을 만듭니다. 이러한 리소스가 있으면 게임은 클라이언트 및 서버연결을 인증하고 모든 게임 클라이언트/서버 통신을 암호화할 수 있습니다. 이 기능은 모바일 멀티플레이어게임을 배포할 때 특히 유용합니다. 이러한 서비스는 AWS Certificate Manager(ACM)를 통해 제공되며 현재추가 비용 없이 사용할 수 있습니다.

플릿 별칭

버전4

Amazon GameLift 개발자 안내서게임 세션 실행

별칭은 실제 플릿 간에 전송할 수 있는 명칭으로, 이를 사용하면 플릿 위치를 편리하게 일반화할 수 있습니다. 예를 들어, 게임 클라이언트는 새로운 게임 세션을 배치할 위치(플릿)를 지정해야 합니다. 별칭을 사용하면 게임 클라이언트를 변경하지 않고도 게임 클라이언트에서 사용하는 플릿을 전환할 수 있습니다. 플릿 또는 별칭을 지정할 수 있는 옵션이 있는 여러 GameLift 기능이 있습니다. 또한 "터미널" 별칭을 만들어 서버에연결하는 대신 콘텐츠(예: URL)를 가리킬 수 있습니다. 이 기능은 예를 들어 플레이어에게 클라이언트를 업그레이드하라는 메시지를 표시하는 데 유용할 수 있습니다.

게임 세션 실행게임 서버 빌드가 플릿에 성공적으로 배포되면 플릿은 게임 세션을 호스팅할 준비가 완료된 것입니다. 하나이상의 플레이어를 위해 새로운 게임 세션을 시작하려면 게임 클라이언트가 GameLift 서비스에 요청을 보냅니다(게임 서비스를 통해). 요청이 수신되면 GameLift는 FleetIQ라는 기능을 사용하여 “가능한 최고” 플릿으로 새로운 게임 세션을 배치합니다.

“가능한 최고 플릿”의 의미는 게임 세션 대기열을 정의할 때 게임 우선 순위를 기반으로 사용자가 정의합니다. 대기열은 하나 이상의 플릿으로 구성된 그룹을 생성하고 그룹에서 새로운 게임 세션에 가장 적합한 플릿을 선택하는 방법을 정의합니다. 대기열은 다른 리전에 있는 플릿을 포함할 수 있습니다. 새로운 게임 세션요청에 따라 사용할 대기열이 지정되며, GameLift는 대기열에서 사용 가능한 플릿을 사용하여 새로운 게임세션을 배치할 수 있습니다. 예를 들어, 다섯 개의 각 북아메리카 리전에서 플릿이 포함된 대기열을 사용할수 있습니다. 이 다중 리전 대기열 유형을 사용하면 GameLift는 과도한 트래픽이 발생하는 경우에도 사용 가능한 리소스를 찾고 신속하게 새 게임 세션을 시작할 수 있습니다. 플릿 가용성은 플릿의 어딘가에 새로운 게임 세션을 호스팅할 수 있는 게임 서버 프로세스가 있는 인스턴스가 하나 이상 있음을 의미합니다.

새로운 게임 세션에 가능한 최고 배치를 선택할 때 FleetIQ는 다음 두 가지 방법 중 하나를 사용합니다.

• 플레이어 지연 시간 평가 – 새로운 게임 세션에 대한 요청에는 요청의 각 플레이어를 위한 ping 시간이 포함될 수 있습니다. 이 데이터가 제공되면 FleetIQ는 어떤 리전이 플레이어에게 가능한 최저 지연 시간을 제공할지를 결정합니다. GameLift는 이 정보를 사용하여 새로운 게임 세션을 배치합니다. 또한 플레이어가허용할 수 없는 지연 시간이 있는 게임 세션에 배치되지 않도록 지연 시간 정책을 정의할 수 있습니다.

• 우선 순위가 지정된 플릿 목록 사용 – 플레이어 지연 시간 데이터가 포함되지 않은 요청의 경우 FleetIQ는플릿이 대기열에 나열되는 순서에 따라 새로운 게임 세션을 배치합니다. 플릿 목록 순서 상단에 배치하여대기열에 있는 플릿의 우선 순위를 지정할 수 있습니다 이 방법을 사용하면 모든 게임 세션이 첫 번째 나열된 플릿에 배치되며, 나머지 플릿은 첫 번째 플릿이 가득 찼을 때를 대비한 백업 역할을 합니다.

대기열은 다양한 용량 및 가용성 문제를 해결하는 데 사용할 수 있는 강력한 개념입니다. 대기열을 사용하면리전별 리소스 사용의 균형을 맞추고, 예상치 못한 사용률 급증 시 플레이어의 대기 시간을 줄이며, 리전 감속 또는 정전을 완화할 수 있습니다. 또한 이를 사용하여 여러 리전을 포괄하는 플레이어 풀을 만들 수 있으므로 다른 리전의 플레이어가 함께 플레이할 수 있습니다. 대기열은 FlexMatch 매치메이킹 및 GameLift 스팟플릿을 사용할 때 필수적입니다. 게임 세션 대기열 설계 (p. 124) 방법에 대해 자세히 알아보십시오.

게임 세션이 플릿 인스턴스에서 시작되면 GameLift 서비스가 IP 주소 또는 DNS 이름 및 포트의 형식으로 연결 정보를 게임 클라이언트에 제공합니다. 게임 클라이언트는 이 정보를 사용하여 게임 서버에 연결합니다.게임 서버를 설정하는 방법에 따라 연결 시 GameLift 서비스와 통신하여 플레이어를 확인하고 플레이어 연결 상태를 보고할 수 있습니다.

TLS 인증서를 사용하여 플릿을 생성한 경우 게임 클라이언트 및 서버는 이 인증서를 사용하여 보안 연결을설정할 수 있습니다.

플릿 용량 조정플릿이 활성화되고 게임 세션을 호스팅할 준비가 되면 플레이어 요구에 맞게 플릿 용량을 조정할 수 있습니다. 호스팅 비용은 사용하는 용량을 기반으로 결정되므로, 들어오는 모든 플레이어가 게임을 찾을 수 있도록보장하는 것과 유휴 상태로 남아 있는 리소스에 과도한 비용을 지출하는 것 사이에 균형을 찾아야 합니다.

플릿에 있는 인스턴스 수를 조정하여 플릿의 규모를 조정합니다. 런타임 구성에 따라 각 인스턴스에 호스팅할 수 있는 게임 세션 및 플레이어 수가 결정되므로, 인스턴스를 조정하여 게임 세션 및 플레이어를 위한 가

버전5

Amazon GameLift 개발자 안내서플릿 용량 조정

용성을 늘리거나 줄입니다. GameLift에서 제공하는 매우 효과적인 Auto Scaling 도구를 사용하거나, 플릿 용량을 수동으로 설정할 수 있습니다. GameLift 플릿 용량 조정 (p. 115) 방법에 대해 자세히 알아보십시오.

Auto ScalingAuto Scaling이 활성화되면 GameLift는 플릿의 호스팅 지표를 추적하고 사용자가 정의하는 지침 세트를 기반으로 인스턴스를 언제 추가하거나 제거할지를 결정합니다. 적절한 Auto Scaling 정책을 설정하면GameLift는 플레이어 수요 변경에 대응하여 용량을 직접 조정할 수 있습니다. 자동 조정을 사용하여 비용 효율성을 향상시키는 방법에 대해 자세히 알아보십시오.

다음 두 가지 Auto Scaling 방법을 사용할 수 있습니다.

• 대상 기반 조정 – 이 방법을 사용하는 경우 원하는 결과를 지정하면 GameLift가 플릿을 확장 또는 축소하여 해당 결과를 달성합니다. 대상 추적에는 "사용 가능한 게임 세션 백분율" 지표가 사용됩니다. 이 지표는게임 세션을 현재 호스팅하고 있지 않은 정상 서버 프로세스의 백분율입니다. 사용 가능한 게임 세션은 버퍼, 다시 말해서 최소한의 대기 시간으로 게임에 참가할 수 있는 새로운 게임 세션 및 새로운 플레이어 수를 나타냅니다. 대상 추적을 통해 게임에 적합한 버퍼 크기를 선택합니다. 예를 들어, 매우 휘발성 높은 수요가 있는 게임의 경우 더 큰 버퍼 크기가 필요할 수 있습니다. 이 방법은 더 간단하고 더 많은 게임에 더 효과적이기 때문에 선호되는 옵션입니다. 대상 추적 작동 방식에 대해 알아보십시오.

• 규칙 기반 조정 – 이 방법을 선택하면 조정 작업을 더 세밀하게 제어할 수 있습니다. 또한 설정하고 관리하는 작업이 더 복잡하며 예상치 않은 결과가 나올 가능성이 더 높습니다. 각 정책은 조정 이벤트를 언제 트리거하고 그에 대응하여 어떤 조치를 취해야 하는지를 지정합니다. 예를 들어, “연속 10분 동안 유휴 인스턴스가 20개 미만으로 감소하면 용량을 10% 늘린다”는 정책이 있을 수 있습니다. 대다수 플릿의 경우 플릿용량을 효과적으로 관리하려면 여러 개의 정책이 필요하지만, 여러 개의 정책이 있으면 예상치 않은 복합적인 영향이 발생하여 복잡성이 추가될 수 있습니다. 규칙 기반 정책을 사용한 Auto-Scale (p. 121) 방법에 대해 알아봅니다.

플릿 축소 작업Auto-scaling이나 수동 조정을 통해 원하는 용량으로 변경을 하거나 상태 등의 이유로 인스턴스가 종료되었을 때 등 몇 가지 방식으로 플릿 조정 이벤트가 트리거 될 수 있습니다. 플릿의 원하는 인스턴스 수가 활성 인스턴스 수와 일치하지 않을 때 조정 이벤트가 트리거됩니다. 이런 상황에서는 Amazon GameLift이 활성 인스턴스 수를 원하는 인스턴스 수에 맞추기 위해 필요에 따라 인스턴스를 추가하거나 제거합니다.

• 원하는 인스턴스 수가 활성 인스턴스 수를 초과하는 경우 Amazon GameLift은 추가 인스턴스를 요청하며,인스턴스를 사용할 수 있게 되면 새 인스턴스에 개임 서버 빌드를 설치하고 게임 서버 프로세스를 시작하는 프로세스를 시작합니다. 하나의 서버 프로세스가 활성인 즉시 인스턴스에 대한 활성 인스턴스 수를 1씩증가됩니다. Amazon GameLift 계속해서 2개의 개수 값은 모두 짝수 때까지 인스턴스를 추가합니다.

• 활성 인스턴스 수가 원하는 인스턴스 수를 초과하는 경우 Amazon GameLift는 제거할 수 있는 인스턴스를검색하기 시작합니다. (게임 세션이 호스팅되지 않은)사용 가능한 인스턴스는 물론이고, 활성화된 게임 세션을 호스팅한 경우에도 보호가 해제된 인스턴스는 종료될 수 있습니다. 제거할 수 없는 인스턴스가 없는경우 축소 이벤트가 실패합니다. 이러한 경우 원하는 인스턴스 수와 활성 인스턴스 수의 차이 때문에 인스턴스가 삭제 가능할 때까지 축소 이벤트가 계속해서 트리거됩니다. 그런 다음 Amazon GameLift는 정상 종료를 시작하기 위해 해당 인스턴스의 모든 서버 프로세스에 통지하는 종료 프로세스를 시작합니다. 해당인스턴스가 종료되면 활성 인스턴스 수가 1씩 감소합니다. Amazon GameLift는 두 값이 짝수가 될 때까지인스턴스 제거를 계속합니다.

추가 조정 기능플릿 용량 및 조정과 관련된 추가 기능:

• 게임 세션 보호 – 축소 이벤트 동안 활성 플레이어를 호스팅 한 게임 세션이 종료되는 것을 방지합니다. 플릿 전체나 개별 게임 세션에 대해 게임 세션 보호 기능을 켤 수 있습니다. 서버 프로세스가 보호된 게임 세션을 호스팅하고 있는 경우에는 인스턴스가 종료되지 않습니다. 상태나 spot-instance-related 장애의 경우보호된 게임 세션도 종료됩니다(참조: 온디맨드 인스턴스 및 스팟 인스턴스 (p. 97)).

버전6

Amazon GameLift 개발자 안내서플릿 활동 모니터링 및 문제 해결

• 조정 제한 – 플릿의 최소 및 최대 인스턴스 수를 제한해 인스턴스 사용량을 제어합니다. 용량을 auto-scaling 하거나 수동 설정할 때 이런 제한이 적용됩니다.

• Auto-scaling 활성화/비활성화 – Auto-scaling 정책을 변경 또는 삭제하지 않은 상태에서 플릿 수준에서auto-scaling을 켜거나 끌 수 있습니다. 이 기능을 사용하면 필요에 따라 수동으로 플릿을 임시 조정할 수있습니다.

• 조정 지표 – 그래프 형식으로 플릿의 용량 및 조정 이벤트 기록을 추적합니다. 플릿 사용률 지표와 함께 용량을 확인해서 조정이 효과적인지 평가할 수 있습니다. 다음은 대상 추적의 버퍼가 15%로 설정된 플릿에대한 그래프입니다. 플릿 용량(파란색과 주황색) 변경에 따라 사용할 수 있는 게임 슬롯(녹색)의 비율이 자동으로 조정됩니다.

플릿 활동 모니터링 및 문제 해결집합을 실행 중인 경우, Amazon GameLift가 다양한 정보를 수집하여 이미 배포한 게임 서버의 성능을 모니터링하는 데 도움을 줍니다. 이 정보를 이용하여 리소스 사용을 최적화하고 문제를 해결하는 한편, 플레이어의 게임 플레이에 대한 통찰을 얻으십시오.

• 플릿, 게임 세션 및 플레이어 세션 세부 정보 –이 데이터에는 상태 문제뿐만 아니라 게임 세션 길이 및 플레이어 연결 시간 등의 세부 정보를 식별하는 데 유용한 상태 정보가 포함됩니다.

• 사용률 측정치 – Amazon GameLift가 시간 경과에 따라 집합 측정치를 추적합니다.• 예: 네트워크 활동 및 CPU 사용률• 서버 프로세스의 경우: 활성 프로세스 수, 새로운 활성화 및 종료• 게임 및 플레이어의 경우: 활성 게임 세션 및 플레이어 세션 수

• 서버 프로세스 상태 – Amazon GameLift는 정상 프로세스 수, 정상적인 활성 프로세스의 비율, 비정상 종료 횟수 등 플릿에서 실행 중인 각 서버 프로세스의 상태를 추적합니다.

• 게임 세션 로그 – 게임 서버 로그 세션 데이터를 확보하고, 게임 세션 종료 시 Amazon GameLift가 이 데이터의 로그를 수집하고 저장하도록 설정할 수 있습니다. 로그는 나중에 서비스에서 다운로드할 수 있습니다.

이 모든 데이터는 Amazon GameLift콘솔에서 확인할 수 있습니다. 콘솔 대시보드에는 모든 빌드와 플릿에서이루어진 활동의 개요뿐만 아니라, 세부 정보로 드릴다운할 수 있는 옵션도 제공되어 있습니다.

AWS 리소스와의 네트워킹많은 경우 호스팅된 게임 서버 및 애플리케이션이 다른 AWS 리소스와 통신할 수 있기를 원합니다. 예를 들어 플레이어 인증 또는 소셜 네트워킹 등과 같이 게임을 지원하는 다양한 웹 서비스를 이용할 수 있습니다.이러한 유형의 통신에서는 소유권 문제로 인해 어려움이 있습니다. Amazon GameLift를 사용하여 게임 서버를 배포할 경우 플릿 및 인스턴스가 계정에 할당되지만 Amazon GameLift 서비스에서 플릿 및 인스턴스를 소유하고 관리합니다. 따라서 AWS 계정에서 관리하는 AWS 리소스에 액세스하려면 Amazon GameLift 서비스의 액세스를 명시적으로 허용해야 합니다.

Amazon GameLift에서는 이러한 유형의 액세스를 관리할 수 있는 다양한 옵션을 제공합니다. 플릿에서 AWS리소스에 액세스 (p. 45) 방법에 대해 자세히 알아보십시오.

Realtime 서버의 작동 방식이 주제에서는 Realtime 서버 솔루션을 사용하는 관리형 Amazon GameLift에 대한 개요를 제공합니다. 여기서는 게임에 대해 해당 솔루션이 적합한 경우와 Realtime 서버에서 멀티플레이어 게임을 지원하는 방법을 설명합니다. 다른 GameLift 솔루션에 대한 자세한 내용은 Amazon GameLift란 무엇입니까? (p. 1) 단원을참조하십시오.

버전7

Amazon GameLift 개발자 안내서Realtime 서버란 무엇입니까?

Realtime 서버란 무엇입니까?Realtime 서버는 멀티플레이어 게임에 사용할 수 있도록 GameLift에서 제공되는 가볍고 바로 사용 가능한 게임 서버입니다. 많은 게임에는 복잡한 물리 및 계산을 처리하기 위해 사용자 지정 게임 서버가 필요하지만,이 서버는 다른 대다수 게임에 필요 이상의 성능을 갖추고 있습니다. Realtime 서버를 사용하면 사용자 지정게임 서버를 개발, 테스트 및 배포할 필요가 없으므로, 이 솔루션을 선택하면 게임을 완성하는 데 필요한 시간과 노력을 최소화할 수 있습니다.

이 기능은 다음과 같습니다.

• 게임 클라이언트/서버 상호 작용을 위한 전체 네트워크 스택. Realtime 서버는 TCP 및 UDP 채널을 메시징에 이용합니다. 또한 GameLift에서 생성된 TLS 인증서를 활성화하여 기본 제공 서버 인증 및 데이터 패킷암호화를 사용하도록 선택할 수 있습니다.

• 핵심 게임 서버 기능. Realtime 서버는 게임 세션을 시작(및 중지)하고, 게임 및 매치 데이터를 관리하며, 클라이언트 연결을 수락합니다. 게임 서버는 각 클라이언트에서 게임 상태 정보를 수신하고 게임 세션의 다른 클라이언트에 해당 정보를 릴레이하여 동기화된 게임 세션 상태를 유지합니다.

• GameLift 서비스와 통합됨. Realtime 서버는 GameLift 서비스와 통신하도록 설정됩니다. 이 서비스는Realtime 서버를 트리거하여 게임 세션을 시작하고, 플레이어가 연결할 때 플레이어를 확인하며, 게임 서버에서 플레이어 연결 상태 및 게임 상태 확인을 수집합니다. 반면, 이 기능은 사용자 지정 게임 서버에서구현해야 합니다.

• 사용자 지정 가능한 서버 로직. 게임에 가장 적합한 서버 측 게임 로직을 사용하여 Realtime 서버를 구성하고 사용자 지정할 수 있습니다. 또는 최소한의 구성을 제공하고 간단한 릴레이 서버로 사용할 수 있습니다Realtime 서버 사용자 지정 (p. 10) 단원에 대해 자세히 알아봅니다.

• Realtime 구성 및 서버 로직으로 라이브 업데이트. 언제든지Realtime 서버 구성을 업데이트합니다.GameLift는 업데이트된 구성 스크립트를 정기적으로 확인하므로, 새 버전을 업로드한 후에는 새 버전이플릿에 빠르게 배포되고 모든 새 게임 세션에 사용됩니다.

• FlexMatch 매치 메이킹. Realtime 서버를 사용하는 게임 클라이언트는 대규모 매치를 포함하여 모든FlexMatch 매치메이킹 기능을 이용할 수 있습니다.

• 호스팅 리소스의 유연한 제어. Realtime 서버를 사용하여 배포된 게임의 경우 Auto Scaling, 다중 리전 대기열, FleetIQ를 통한 게임 세션 배치, 게임 세션 로깅 및 지표를 포함한 모든 GameLift 관리 기능을 사용할수 있습니다. 호스팅 리소스가 활용되는 방식을 결정합니다.

• 컴퓨팅 리소스 옵션의 범위. Realtime 서버는 Linux에서 실행됩니다. 플릿의 컴퓨팅 하드웨어 유형을 선택하고 스팟 인스턴스를 사용할지 또는 온디맨드 인스턴스를 사용할지를 선택합니다.

• AWS 안정성. 모든 GameLift와 마찬가지로, Realtime 서버를 사용하는 호스팅 리소스는 AWS가 제공하는높은 수준의 품질, 보안 및 안정성을 이용할 수 있습니다.

호스팅 리소스의 플릿을 만들고 구성 스크립트를 제공하여 Realtime 서버를 설정합니다. Realtime 서버를 만드는 방법과 Realtime 서버 시작하기 (p. 32)에서 게임 클라이언트를 준비하는 방법에 대해 자세히 알아봅니다.

게임의 Realtime 서버 선택사용자 지정 게임 서버를 빌드하는 대신 Realtime 서버를 선택하려면 게임에 서버 복잡성이 필요한지 여부를먼저 결정해야 합니다. 게임에 복잡한 서버 측 게임 로직, 게임 플레이 물리에 대한 분할 초 계산 또는 기타 사용자 지정 기능이 필요하지 않은 한, Realtime 서버는 게임에 더 좋은 솔루션일 수 있습니다. Realtime 서버를가장 효과적으로 사용하는 게임에는 경량 게임 또는 게임 클라이언트에서 더 많은 비율의 컴퓨팅 작업을 관리하는 게임이 포함됩니다. 예를 들면 메시징 게임, 턴 기반 전략 게임, 다양한 유형의 모바일 게임이 있습니다. FleetIQ 사용과 결합하면 Realtime 서버는 거의 모든 게임 유형에 적합한 플레이어 지연 시간을 최소화할수 있는 효과적인 도구를 제공합니다.

핵심 구성 요소Realtime 서버로 작업할 때 사용하는 구성 요소는 다음과 같습니다. Realtime 서버를 사용한 게임 아키텍처 (p. 17)에서 이러한 구성 요소와 이러한 구성 요소가 함께 작동하는 방식에 대해 자세히 알아보십시오.

버전8

Amazon GameLift 개발자 안내서Realtime 서버가 게임 세션을 관리하는 방법

• Realtime 서버는 게임을 위한 클라이언트/서버 네트워킹을 제공합니다. 이 서버는 GameLift 서비스에서 트리거될 때 게임 세션을 시작하고, 플레이어가 연결할 때 플레이어에 대한 확인을 요청하며, 플레이어 연결상태 및 게임 상태를 보고합니다. 이 서버는 연결된 모든 플레이어 간에 게임 상태 데이터를 릴레이하고,제공되는 경우 사용자 지정 게임 로직을 실행합니다.

• 게임 클라이언트는 플레이어의 디바이스에서 실행되는 게임 소프트웨어입니다. 게임 클라이언트는 클라이언트 서비스를 통해 GameLift 서비스를 요청하여 참가할 게임 세션을 찾거나 새 게임 세션을 시작하고,Realtime 서버에 연결하여 게임에 참여합니다. 연결되면 게임 클라이언트는 Realtime 서버를 통해 게임의다른 플레이와 데이터를 주고 받습니다.

• Realtime 스크립트는 게임에 대한 구성 설정과 선택적 사용자 지정 게임 로직을 제공합니다. 이 스크립트에는 최소 구성 설정이 포함되거나 더 복잡한 게임 로직이 있을 수 있습니다. Realtime 스크립트는 새 호스팅 리소스를 시작할 때 Realtime 서버와 함께 배포됩니다. 스크립트는 Node.js 기반 JavaScript로 작성됩니다.

• GameLift 서비스는 Realtime 서버를 호스팅하는 데 필요한 컴퓨팅 리소스를 관리하고 플레이어가 게임에연결할 수 있도록 합니다. 이 서비스는 플레이어 수요에 맞게 리소스 수를 조절하고, 활성 게임 세션에서플레이어 슬롯을 찾아 예약하여 플레이어 참가 요청을 처리하며, Realtime 서버를 트리거하여 게임 세션을시작하고, 플레이어가 게임 서버에 연결할 때 플레이어를 확인합니다. 또한 이 서비스는 Realtime 서버 상태 및 플레이어 사용률에 대한 지표를 수집합니다.

• 게임 세션은 Realtime 서버에서 실행되는 게임의 인스턴스입니다. 플레이어는 게임 세션에 연결하여 게임을 플레이하고 다른 플레이어들과 상호 작용합니다.

Realtime 서버가 게임 세션을 관리하는 방법GameLift는 완전 사용자 지정 게임 서버를 사용하여 게임 세션을 처리하는 것과 동일한 방식으로 Realtime서버를 사용하여 게임 세션을 관리합니다. 플레이어는 게임 클라이언트를 사용하여 요청을 전송함으로써 새로운 게임 세션을 생성하거나, 기존 게임 세션을 검색하고 참여합니다. 게임 세션 배치, FlexMatch 매치메이킹 등을 비롯하여 게임 세션을 만드는 대부분의 방법을 Realtime 서버에서 사용할 수 있습니다(매치 채우기는 아직 사용할 수 없음).

Realtime 서버는 호스팅 인스턴스의 플릿에 배포된 후 GameLift 서비스를 사용하여 통신을 유지 관리합니다. Realtime 서버는 GameLift 서비스에서 메시지가 나타날 때 게임 세션을 시작하고 서비스에서 매치 메이킹 데이터를 포함하여 사용 가능한 게임 세션 및 플레이어 데이터를 수신합니다. 게임이 플레이어 세션을사용하여 게임 슬롯을 예약하거나 플레이어 연결을 인증하는 경우 플레이어가 연결할 때 Realtime 서버는GameLift 서비스에 확인 요청을 보낼 수 있습니다. 또한 Realtime 서버는 다시 GameLift 서비스에 상태 확인을 보고하고, 플레이어가 연결/연결 해제할 때 및 게임 세션이 종료될 때 서비스에 알립니다. 또한 이 서버는GameLift의 메시지에 응답하여 게임 세션을 강제로 종료합니다. GameLift 서비스와 이러한 상호 작용은 모든 Realtime 서버에 완전히 기본 제공됩니다.

로직을 Realtime 스크립트로 빌드하여 게임 세션 관리에 대한 사용자 지정 로직을 추가할 수 있습니다. 코드를 작성하여 서버별 객체에 액세스하거나, 콜백을 사용하여 이벤트 중심 로직을 추가하거나, 타이머 또는 상태 확인과 같은 비 이벤트 시나리오를 기반으로 로직을 추가할 수도 있습니다. 예를 들어, 게임 세션 객체에액세스하거나, 게임 세션이 시작 또는 종료될 때 작업을 트리거해야 할 수 있습니다.

Realtime 클라이언트와 서버가 상호 작용하는 방식게임 세션 중에 게임 내 게임 클라이언트 간의 상호 작용은 메시징을 통해 수행됩니다. 게임 클라이언트는메시지를 사용하여 활동, 게임 상태 및 관련 게임 데이터를 교환합니다. 게임 클라이언트는 Realtime 서버에 메시지를 보냅니다. 그러면 이 서버는 게임 클라이언트 간에 메시지를 릴레이합니다. 게임 클라이언트는Realtime 클라이언트 SDK를 사용하여 서버와 통신합니다. 이 SDK를 게임 클라이언트에 통합해야 합니다.클라이언트 SDK는 클라이언트가 게임에 연결하고 메시지를 전송 및 수신하며 게임 연결을 해제하기 위해사용할 수 있는 동기식 API 호출 세트를 정의합니다. 또한 클라이언트가 특정 이벤트에 응답할 수 있도록 게임 클라이언트에서 구현할 수 있는 비동기 콜백 세트도 정의합니다.

추가로, 게임 로직을 Realtime 스크립트에 추가하여 클라이언트와 서버가 상호 작용하는 방식을 사용자 지정할 수 있습니다. 사용자 지정 게임 로직을 사용하면 Realtime는 이벤트 중심 응답을 트리거하는 콜백을 구

버전9

Amazon GameLift 개발자 안내서Realtime 서버 사용자 지정

현할 수 있습니다. 예를 들어, 게임 클라이언트가 서버에게 특정 성과에 도달했음을 알리면 서버는 다른 게임클라이언트에 메시지를 전송하여 공지를 표시합니다.

통신 프로토콜

Realtime 서버와 연결된 게임 클라이언트 간의 통신은 안정적인 전송을 위한 TCP 연결과 빠른 전송을 위한UDP 채널이라는 두 개의 채널을 사용합니다. 메시지를 생성할 때 게임 클라이언트는 메시지의 특성에 따라어떤 프로토콜을 사용할지를 선택합니다. 메시지 전송은 기본적으로 UDP로 설정됩니다. UDP 채널이 설정되지 않거나 사용 가능하지 않으면 모든 메시지가 TCP를 대체 채널로 사용하여 전송됩니다.

메시지 콘텐츠

메시지 콘텐츠는 필요한 작동 코드(opCode)와 페이로드(선택 사항)의 두 가지 요소로 구성됩니다. 메시지의opCode는 특정 플레이어 활동 또는 게임 이벤트를 식별하는 반면, 페이로드는 필요 시 작업 코드에 관련된추가 데이터를 제공합니다. 이 두 요소는 모두 개발자가 정의합니다. 즉, 어떤 작업이 어떤 opCode에 매핑되는지 그리고 메시지 페이로드가 필요한지를 정의합니다. 게임 클라이언트는 수신하는 메시지의 opCodes를기반으로 조치를 취합니다.

플레이어 그룹

Realtime 서버는 플레이어 그룹을 관리하기 위한 기능을 제공합니다. 기본적으로 게임에 연결된 모든 플레이어는 "모든 플레이어" 그룹에 배치됩니다. 또한, 개발자는 게임을 위한 기타 그룹을 설정할 수 있으며, 플레이어는 동시에 여러 그룹의 멤버일 수 있습니다. 그룹 멤버는 그룹의 모든 플레이어에게 메시지를 전송하거나게임 데이터를 그룹과 공유할 수 있습니다. 그룹에 가능한 한 가지 사용은 플레이어 팀을 설정하고 팀 통신을관리하는 것입니다.

TLS 인증서가 있는 Realtime 서버

TLS 인증서 생성이 켜져 있는 상태에서 Realtime 서버 플릿을 만들 수 있습니다. GameLift는 플릿용 TLS 인증서를 생성하고 플릿의 각 인스턴스에 대한 DNS 항목을 만듭니다. 이렇게 하면 게임은 클라이언트/서버 연결을 인증하고 모든 게임 클라이언트/서버 통신을 암호화할 수 있습니다. 이 기능을 사용하면 강화된 보안과암호화된 통신이 필요한 모바일을 포함한 다양한 플랫폼에서 게임을 게시할 수 있습니다. 이 기능을 통해 게임 클라이언트(및 플레이어)를 서버 스푸핑 공격으로부터 보호하고, 악의적인 사용자가 데이터 전송을 추적하거나 모니터링하는 것을 방지할 수 있습니다. 이러한 서비스는 AWS Certificate Manager(ACM)를 통해 제공되며 현재 추가 비용 없이 사용할 수 있습니다.

Realtime 서버를 사용하면 서버 인증 및 데이터 패킷 암호화가 이미 서비스에 기본 제공되며, TLS 인증서 생성을 켤 때 이러한 기능이 활성화됩니다. 게임 클라이언트가 Realtime 서버와 연결하려고 하면 서버는 TLS인증서를 사용하여 자동으로 응답하며 클라이언트가 이러한 작업을 확인합니다. TCP(Websocket) 통신에는TLS를 사용하고 UDP 트래픽에는 DTLS를 사용하여 암호화가 처리합니다.

Realtime 서버 사용자 지정대부분의 기본 형식에서 Realtime 서버는 상태 비저장 릴레이 서버 역할을 수행합니다. Realtime 서버는 게임에 연결된 게임 클라이언트 간에 메시지 및 게임 데이터 패킷을 릴레이하지만, 메시지를 평가하거나 데이터를 처리하거나 게임 플레이 로직을 수행하지 않습니다. 이 방식으로 사용되는 각 게임 클라이언트는 게임상태 보기를 유지하고 릴레이 서버를 통해 다른 플레이어에게 업데이트를 제공합니다. 각 게임 클라이언트는이러한 업데이트를 통합하고 자체 게임 상태를 조정합니다.

그 대신 Realtime 스크립트 기능을 빌드하여 서버를 사용자 지정할 수 있습니다. Realtime 서버 기능의 단순함을 활용하면서도 다양한 서버 측 프로세스를 선택하여 구현할 수 있습니다. 예를 들어, 게임 로직을 사용하면 서버 권한이 있는 게임 상태 보기와 함께 상태 저장 게임을 빌드할 수 있습니다.

Realtime 스크립트에 대해 일련의 서버 측 콜백이 정의됩니다. 이러한 콜백을 구현하여 이벤트 중심 기능을서버에 추가합니다. 예를 들어 다음과 같이 할 수 있습니다.

• 게임 클라이언트가 서버에 연결하려고 할 때 플레이어를 인증합니다.• 요청될 때 플레이어가 그룹에 참가할 수 있는지 여부를 확인합니다.

버전10

Amazon GameLift 개발자 안내서Realtime 서버 배포 및 업데이트

• 특정 플레이어에서 또는 대상 플레이어로 메시지를 언제 전송할지를 평가하거나, 응답에서 추가 처리를 수행합니다.

• 플레이어가 그룹에서 나가거나 서버에서 연결이 제거되면 모든 플레이어에게 알리는 등의 조치를 취합니다.

• 게임 세션 개체 또는 메시지 객체의 콘텐츠를 평가하고 데이터를 사용합니다.

Realtime 서버 배포 및 업데이트Realtime 서버는 GameLift의 전용 서버 리소스로 구동됩니다. 제공되는 안정성과 보안에는 차이가 없습니다.모든 서버와 마찬가지로 GameLift의 매치 메이킹 및 대기열을 플레이어 위치에 따라 게임 세션 배치를 최적화하는 Fleet IQ와 함께 사용하여 지연 시간을 최소화할 수 있습니다.

GameLift를 사용하여 Realtime 서버 게임을 배포할 때 프로세스는 GameLift에서 기존 게임 서버를 배포할때와 거의 동일합니다. 구성 세부 정보와 선택적 사용자 지정 로직이 포함된 Realtime 스크립트를 사용하여 컴퓨팅 리소스 플릿을 만들고 이 플릿을 배포합니다. GameLift를 사용하면 사용할 플릿의 유형를 선택하고, 플릿 용량을 관리하며, 게임 서버 프로세스가 시작되고 플릿에서 실행되는 방식을 제어합니다. AmazonGameLift 작동 방식 (p. 3)의 게임 호스팅에 대한 자세한 설명은 Realtime 서버 및 사용자 지정 게임을 사용한 게임 호스팅을 나타냅니다.

Realtime 서버의 주요 장점은 언제든지 스크립트를 업데이트할 수 있는 기능입니다. 새로운 플릿을 만들지않아도 업데이트된 스크립트를 배포할 수 있습니다. 스크립트를 업데이트하면 단 몇 분 내에 새로운 버전이모든 호스팅 리소스에 전파됩니다. 새로운 스크립트가 배포되면, 해당 시점 이후에 만든 모든 새로운 게임 세션은 새로운 스크립트 버전을 사용합니다. 기존 게임 세션은 원래 버전을 계속 사용합니다.

플레이어의 게임 연결 방법게임 세션은 Amazon GameLift에서 실행되는 게임의 인스턴스입니다. 게임을 플레이하려면 플레이어가 기존 게임 세션을 검색하여 참여하거나 새 게임 세션을 만들고 참여할 수 있습니다. 플레이어는 게임 세션에 대해 플레이어 세션을 만들어 참여합니다. 게임 세션이 플레이어—에게 개방되어 있으면(즉 게임 세션이 새 플레이어를 수락하고 열린 플레이어 슬롯이 있음) —Amazon GameLift는 플레이어를 위해 슬롯을 예약하고 플레이어에게 연결 정보를 제공합니다. 그러면 플레이어가 게임 세션에 연결하고 예약된 슬롯을 클레임할 수있습니다.

게임 세션 및 플레이어 세션을 만들고 관리하는 방법에 대한 자세한 내용은 게임 클라이언트에 AmazonGameLift 추가 (p. 47) 단원을 참조하십시오.

게임 및 플레이어 세션 기능Amazon GameLift는 게임 및 플레이어 세션과 관련된 여러 가지 기능을 제공합니다.

여러 리전에서 최상의 가용 리소스에서 게임 세션 호스트Amazon GameLift가 새 게임 세션을 호스트할 리소스를 선택하는 방법을 구성할 때 여러 가지 옵션 중에서선택합니다. 둘 이상의 리전에서 여러 플릿을 실행 중인 경우, 리전에 상관없이 어떤 플릿에도 새 게임 세션을 배치할 수 있는 게임 세션 대기열을 설정할 수 있습니다. 이 기능은 효율적으로 리소스 사용량의 균형을맞추고 플레이어 요구의 변화, 용량 감소, 중단 이벤트 및 기타 문제에 대응하는 Amazon GameLift 서비스의기능을 크게 향상시킬 수 있습니다. 따라서 대기열을 사용하면 리소스를 모니터링하고 균형을 맞추는 데 필요한 수동 오버헤드를 줄일 수 있습니다. Amazon GameLift 콘솔에서 대기열을 관리하고 대기열 성능 측정치를 추적할 수 있습니다.

대기열 기능을 사용하면 플레이어 지연 시간 정보를 기반으로 게임 세션을 배치할 수 있습니다. 이 기능은매치메이킹 서비스를 지원할 때 특히 효과적입니다. 새 게임 세션 요청은 한 명 이상의 플레이어에 대한 새

버전11

Amazon GameLift 개발자 안내서GameLiftFlexMatch의 작동 방식

플레이어 세션도 요청할 수 있습니다. 리전별로 각 플레이어마다 지연 시간 데이터를 포함시키면 AmazonGameLift는 모든 플레이어에게 가능한 최상의 경험을 제공하는 리전의 플릿을 선택할 수 있습니다.

게임 세션에 대한 플레이어 액세스를 제어게임 세션을 설정하여 현재 연결된 플레이어 수와 상관없이 새 플레이어의 참여 요청을 허용하거나 거부합니다. 문제 해결 등의 이유로 액세스를 제한하기 위해 이 기능을 사용하여 프라이빗 세션을 활성화할 수 있습니다.

사용자 지정 게임 및 플레이어 데이터를 추가사용자 지정 데이터를 게임 세션 및 플레이어 세션 객체에 추가할 수 있습니다. 이 데이터에 세션에 대한 모든 설정 및 메타데이터가 포함됩니다. 사용자 지정 데이터는 Amazon GameLift에 저장되며 필요에 따라 다른구성 요소가 검색할 수 있습니다. Amazon GameLift 서비스는 새 게임 세션을 시작할 때 게임 세션 데이터를게임 서버로 전달하며, 플레이어가 게임 세션에 연결할 때 플레이어 세션 데이터를 게임 서버로 전달합니다.사용자 지정 게임 및 플레이어 데이터는 Amazon GameLift에서 사용하지 않으며, 필요에 따라 게임 클라이언트, 게임 서버 또는 다른 게임 서비스가 사용할 수 있도록 형식을 지정할 수 있습니다.

게임 데이터는 다양한 이유에서 유용할 수 있습니다. 예를 들어 잠재 플레이어를 게임 세션에 매칭할 때 게임이 게임 속성을 사용하여 최상의 매칭 알고리즘을 알려주거나 플레이어가 게임 세션 목록에서 선택하도록 도울 수 있습니다. 또는 게임 속성을 사용하여 게임 모드 또는 맵과 같이 게임 서버가 새 게임 세션을 설정할 때필요로 하는 정보를 전달할 수 있습니다.

플레이어 데이터도 다양한 용도로 사용됩니다. 예를 들어 매치메이킹 서비스가 플레이어 데이터를 사용하여최상의 게임 상대 또는 팀 배치를 선택할 수 있습니다. 게임 서버는 길드 멤버십을 기반으로 플레이어의 환경을 사용자 지정할 수 있습니다.

사용 가능한 게임 세션을 필터링 및 정렬세션 검색 및 정렬을 사용하여 잠재 플레이어에게 가장 적합한 게임 상대를 검색하거나 플레이어가 사용 가능한 게임 세션 목록을 찾아보도록 허용할 수 있습니다. 이 기능을 사용하면 플레이어를 만족스러운 게임 경험을 제공할 가능성이 가장 높은 세션으로 효과적으로 안내할 수 있습니다. 예를 들어 게임에 최소 인원의 플레이어가 필요한 경우, 배치가 거의 완료된 게임으로 새 플레이어를 안내하면 모든 플레이어의 지연 시간이최소화됩니다. 또는 거의 완료된 세션을 숨기려고 할 수도 있습니다. 세션 검색은 플레이어를 빠르게 긍정적인 게임 경험에 참여시키는 잘 작성된 검색 및 정렬 표현식으로 지원되는 "지금 참여" 기능을 구현하는 데 매우 유용할 수 있습니다. 세션 검색 및 정렬을 사용하여 세션 연령, 사용 가능한 플레이어 슬롯, 현재 플레이어수, 최대 허용 플레이어, 사용자 지정 게임 세션 데이터와 같은 특성을 기반으로 게임 세션을 찾을 수 있습니다. 자체 사용자 지정 게임 데이터를 기반으로 검색하고 정렬할 수도 있습니다.

게임 및 플레이어 사용 데이터를 추적완료된 게임 세션의 로그를 Amazon GameLift가 자동으로 저장하도록 합니다. Amazon GameLift를 게임 서버에 통합할 때 로그 스토리지를 설정합니다. Amazon GameLift 콘솔을 사용을 통해 또는 Amazon GameLift용 AWS SDK를 사용한 프로그래밍 방식으로 저장된 로그를 다운로드하여 액세스할 수 있습니다.

Amazon GameLift 콘솔을 사용하여 세션 메타데이터, 설정, 플레이어 세션 데이터 등 게임 세션에 대한 세부정보를 확인합니다. 각 게임 세션의 총 플레이 시간과 플레이어 세션 목록을 볼 수 있습니다. 시간 경과에 따라 활성 게임 세션과 플레이어 세션 수를 추적한 측정치 데이터와 그래프도 볼 수 있습니다. 자세한 내용은게임과 플레이어 세션에 대한 데이터 보기 (p. 169) 및 측정치 (p. 167)에서 확인하십시오.

Amazon GameLiftFlexMatch의 작동 방식이 주제에서는 관리형 GameLift 솔루션의 일부로 사용할 수 있는 FlexMatch 매치메이킹 시스템의 개요를 제공합니다. 이 주제에서는 주요 기능, 구성 요소 및 매치메이킹 프로세스의 작동 방식을 설명합니다. 매치메이

버전12

Amazon GameLift 개발자 안내서FlexMatch 주요 기능

커를 설정하고 플레이어 매칭을 지정하는 방식을 포함하여 FlexMatch를 게임에 추가하는 방법에 대한 자세한 정보는 FlexMatch 매치메이킹 추가 (p. 68) 단원을 참조하십시오.

GameLift FlexMatch는 사용자 지정 가능한 매치메이킹 서비스입니다. 게임에 가장 적합한 방식으로 완전한매치메이킹 경험을 관리할 수 있는 유연한 도구를 제공합니다. FlexMatch를 사용하면 게임 매치를 위한 팀을빌드하고, 호환 가능한 플레이어를 선택하고, 최적의 플레이어 경험을 위해 최상의 호스팅 리소스를 찾을 수있습니다. 또한 FlexMatch 채우기를 사용하여 기존 게임의 새 플레이어를 찾을 수 있으므로 플레이어가 최상의 경험을 할 수 있도록 게임 세션 동안 게임이 호환 가능한 플레이어로 계속 채워집니다.

FlexMatch를 사용하면 게임 모드와 플레이어에 맞게 여러 매치메이커를 만들고 실행할 수 있습니다. 예를 들어 난투 및 케이지 매치를 위한 팀을 빌드하는 여러 매치메이커가 있을 수 있습니다.

FlexMatch 주요 기능• 사용자 지정 플레이어 매칭. 플레이어가 가장 공감할 수 있는 유형의 멀티플레이어 경험을 설계하고 구축

합니다. 각 게임 모드에 대해 팀 구성을 정의하고 다른 게임 속성을 설정합니다. 플레이어 속성(예: 스킬 레벨 또는 역할)을 평가하기 위한 사용자 지정 규칙 세트를 구축하고 게임에서 가능한 최선의 플레이어 매치를 형성합니다. 이 규칙을 사용하여 새로운 매치에 플레이어를 그룹화하거나 기존 매치의 열린 슬롯을 채울 플레이어를 찾습니다("매치 채우기").

• 라지 매치 생성. FlexMatch는 매칭 프로세스를 간소화하는 라지 매치 알고리즘을 사용하여 41명 ~ 200명의 플레이어로 구성된 매우 큰 매치를 생성하는 데 사용될 수 있습니다. 라지 매치를 생성할 때 우선 순위를 보다 유사한 플레이어로 구성된 보다 큰 매치를 생성하는 데 둘지 아니면 모든 플레이어가 최상의 플레이어 지연 시간 경험을 하는 매치를 생성하는 데 둘지를 선택할 수 있습니다.

• 플레이어 수락 얻기. 모든 플레이어가 게임 시작 전에 제안된 매치를 수락하도록 요구합니다. 이 기능을 활성화하면 FlexMatch가 매치에 배정된 모든 플레이어가 매치 시작 전에 매치를 수락할 때까지 기다립니다.

같은 팀에서 함께 플레이하고자 하는 플레이어 그룹을 위한 매치를 생성합니다. 추가 플레이어를 찾아 필요에 따라 매치를 충원합니다.

• 플레이어 지연 시간 정보를 활용하여 매치된 플레이어의 응답 시간이 비슷하도록 합니다. 이 기능은 일부플레이어에게 부당한 이득을 줄 수 있는 시간의 차이를 방지합니다. 여러 지리적 영역에 걸쳐 있는 매치를만들 때 특히 유용합니다.

• 시간 경과에 따라 플레이어 매칭 규칙 완화. 가능한 최상의 플레이어 매치를 생성하고 빠른 시간 내에 양호한 플레이어 매치를 이루는 것 간에 적절한 균형을 확보합니다. 최단 시간 내에 플레이어를 게임에 배치하기 위해 언제 어느 경우에 엄격한 매칭 규칙을 완화할지 결정할 수 있습니다.

• 가장 적합한 호스팅 리소스 찾기. 게임 및 플레이어 정보를 사용하여 최적의 게임 플레이 경험을 위해 매치를 호스팅할 수 있는 최상의 리소스를 선택합니다.

• 매치된 플레이어로 게임 채우기. FlexMatch FlexMatch 채우기 기능을 사용하여 게임 세션의 수명 전반에새로운 플레이어와 잘 매치하는 빈 플레이어 슬롯을 채웁니다. 자동 채우기를 사용하거나 채우기를 수동으로 관리하기 위해 코드를 게임에 추가하도록 선택할 수 있습니다.

FlexMatch 구성 요소Amazon GameLift FlexMatch에서는 다음 세 가지 주요 구성 요소가 함께 작동해야 합니다.

• 플레이어 매치메이킹을 트리거하는 메커니즘. 첫 번째 메커니즘은 플레이어에 대해 매치메이킹을 시작하는 시기를 결정합니다. 두 번째(선택 사항) 메커니즘은 기존 매치에서 빈 슬롯에 대해 새로운 플레이어를찾을 시기를 결정합니다(채우기). 매치메이킹 및 매치 채우기 요청은 매치메이커에게 전달되어 처리됩니다.

• FlexMatch플레이어를 평가하고 매치를 생성하는 매치메이커. 매치메이커는 접수한 요청을 통해 가능한최상의 플레이어 매치를 빌드합니다. 매치의 팀 구성을 정의하고 매치를 평가할 때 사용할 기준을 설정하는 규칙 세트를 가집니다. 게임에는 여러 매치메이커가 있을 수 있으며 각각 다른 유형의 매치가 있도록 빌드할 수 있습니다.

• 새 매치를 배치하는 게임 세션 대기열. 게임 세션 대기열은 사용 가능한 컴퓨팅 리소스를 찾아 매치를 호스팅합니다. 리소스를 찾을 위치(리전)와 각 매치에 사용 가능한 호스트를 선택하는 방법을 결정합니다.

버전13

Amazon GameLift 개발자 안내서매치메이킹 프로세스

다음 단원에서는 매치메이킹에서 새로운 게임 매치를 형성하거나 기존 게임 매치를 위해 새로운 플레이어를찾는 방법에 대해 자세히 설명합니다.

매치메이킹 프로세스새로운 게임 매치 요청이 FlexMatch를 통해 처리되는 방법은 다음과 같습니다. 이 설명은 클라이언트 측 게임 서비스가 매치메이킹 요청을 시작하고 매치메이킹 티켓 상태를 추적한다고 가정합니다.

1. 매치메이킹 요청. 플레이어는 게임에서 "Join Now" 버튼이나 파티를 구성하는 플레이어 그룹을 클릭하는것처럼 매치메이킹을 트리거하는 일부 작업을 수행합니다. 게임은 매치메이킹 요청을 시작하여 사용할 매치메이커를 식별하고 매치할 하나 이상의 플레이어를 포함합니다. 요청에는 매치메이커가 매치를 빌드하는 데 필요한 스킬 레벨이나 기본 설정과 같은 플레이어 정보가 포함됩니다. 각 요청은 게임에서 요청 상태를 추적하고 필요에 따라 작업을 수행하기 위해 사용하는 매치메이킹 티켓 ID를 얻습니다.

2. 잠재적 매치 파악. 모든 매치메이킹 티켓은 지정된 매치메이커에게 전달되고 티켓 풀에 배치되어 처리됩니다. 매치가 성사되거나 매치메이커의 최대 제한 시간에 도달할 때까지 티켓은 티켓 풀에 남아 있습니다.

일반(비라지) 매치를 위한 플레이어 매치를 찾기 위해 매치메이커는 티켓 풀을 계속 통과합니다. 각각이통과되면 매치메이커는 풀에서 가장 오래된 티켓으로 시작해서 최상의 티켓을 찾기 위해 다른 티켓을 평가합니다. 매치메이커의 규칙 세트에서는 (1) 매치에 대해 생성할 팀의 수, (2) 각 팀에 대해 배정할 플레이어 수, (3) 예상 플레이어를 평가하는 방법을 결정합니다. 규칙은 개별 플레이어, 팀 또는 매치에 대한 요구사항을 설정할 수 있습니다. 예를 들어 규칙에 따라 모든 매치 플레이어에게 특정 능력이 있어야 하거나팀에서 한 명 이상의 플레이어가 특정 캐릭터를 플레이해야 할 수도 있습니다. 일반적으로 사용되는 규칙은 매치의 모든 플레이어가 비슷한 스킬 등급을 갖는 것입니다.

라지 매치의 경우 이 프로세스는 약간 다릅니다. FlexMatch는 규칙 세트에 대해 각 플레이어를 평가하는대신 단일 키 밸런싱 속성에 대해 사용 가능한 매치메이킹 티켓에 가중치를 두고 속성 값이 유사한 플레이어를 그룹화합니다. 또한 지연 시간 요구 사항을 적용합니다. 플레이어 간에 유사성이 더 큰 보다 큰 매치를 생성할지 아니면 플레이어를 플레이어에게 최상의 지연 시간 경험을 제공하는 매치에 배치할지를 선택할 수 있습니다. 초기 매치가 검색되면 FlexMatch에서 일련의 테스트를 수행하여 최종 매치가 최상의 솔루션인지 확인합니다.

매치메이커가 티켓을 평가할 때 전체 티켓이 합격하거나 불합격합니다. 복수의 플레이어가 있는 티켓의경우 매치메이커는 이 플레이어가 함께 플레이하기를 원하는 것으로 간주하고 모두 동일한 매치에 배치하려고 시도합니다. 즉, 잠재적인 모든 매치에서 티켓의 모든 플레이어가 수락될 수 있어야 합니다. 규칙에맞지 않는 플레이어가 있는 경우 티켓 전체가 일치하지 않는 것으로 간주됩니다. 실패한 티켓은 티켓 풀에남아 있으며 다음 통과 시 다시 평가됩니다. 일단 잠재적 매치에 플레이어가 충원되면 제안된 매치에 속한모든 티켓 상태가 업데이트됩니다.

3. 플레이어 수락 얻기. 매치메이커에서 플레이어가 잠재적인 매치를 수락해야 하는 경우, FlexMatch는 모든플레이어가 수락할 때까지 매치를 진행할 수 없습니다. 매치메이킹 티켓 상태는 수락이 필요하다고 표시하여 게임이 일치하는 각 매치 티켓의 모든 플레이어에게 수락을 요청하도록 변경됩니다.

플레이어는 잠재적인 매치를 수락 또는 거부할지 선택할 수 있습니다. 게임은 플레이어 응답을 수집하여FlexMatch에 다시 보고합니다. 잠재적인 매치의 모든 플레이어는 계속하려면 일정한 제한 시간 내에 매치를 수락해야 합니다. 한 플레이어라도 매치를 거부하거나 제한 시간 내에 응답하지 못하면 매치메이커는해당 잠재적 매치를 취소합니다. 매치를 수락한 플레이어의 티켓은 매치메이커의 티켓 풀로 반환되고 매치를 수락하지 않은 플레이어의 티켓은 실패 상태로 변경되어 더 이상 처리되지 않습니다.

4. 매치를 호스팅할 리소스 찾기. 잠재적 매치가 이루어지고 수락되면 FlexMatch는 사용 가능한 호스팅 리소스를 통해 매치를 배치하려고 시도합니다. 매치메이커는 특정 게임 세션 대기열을 사용하도록 구성되며잠재적 매치를 배치 대기열로 전달합니다. 대기열은 규칙 세트를 사용하여 최적의 서버 프로세스에 대해리전 및 플릿을 검색하여 매치를 호스팅합니다. 원래 매치메이킹 요청에 플레이어 지연 시간 데이터가 포함되어 있는 경우, 대기열은 이 정보를 사용하여 지연 시간이 가장 짧고 매치에서 가장 일관적인 게임 플레이 경험을 제공하는 리소스를 찾습니다.

사용 가능한 서버 프로세스가 배치되면, Amazon GameLift는 팀 구성 및 크기, 플레이어 배정 및 관련 플레이어 특성을 포함하여 게임 속성 및 매치메이커 데이터가 포함된 게임 세션 레코드를 생성합니다.

5. 새 게임 세션 시작. 새로운 게임 세션을 시작할 때 Amazon GameLift는 게임 세션 및 매치메이커 정보와함께 서버 프로세스에 시작 요청을 전송합니다. 서버 프로세스는 정보를 가져와서 매치 게임에 대한 새 게

버전14

Amazon GameLift 개발자 안내서백필 프로세스

임 세션을 시작하는 데 해당 정보를 사용합니다. 게임 세션이 플레이어를 받아들일 준비가 되면 서버 프로세스가 Amazon GameLift에 알립니다.

6. 새 게임 세션에 플레이어 연결. 게임 세션이 플레이어를 받아들일 준비가 되면 Amazon GameLift는 매치의 모든 플레이어에 대해 새로운 플레이어 세션을 생성합니다. 그런 다음 모든 매치 메이킹 티켓을 업데이트하고 티켓 상태를 변경하여 성공 여부를 나타내며 모든 플레이어에 대한 연결 정보를 추가합니다. 티켓상태가 이렇게 변경되면 게임에 게임 클라이언트에 대한 연결 정보를 전달하라고 표시합니다. 플레이어는이제 게임에 참여하고 매치 및 팀 배정에서 슬롯을 신청할 수 있습니다.

백필 프로세스다음은 FlexMatch를 통해 기존 매치의 새로운 플레이어를 찾는 방법입니다. 매치 채우기 기능에는 게임 세션의 플레이어 슬롯 가용성에 대한 최신 정보가 필요하기 때문에 게임 서버에서 매치 채우기 요청을 시작하는것이 좋습니다. 또 다른 옵션은 게임 세션 및 플레이어 활동을 추적하는 세션 디렉터리 서비스와 같은 클라이언트 측 게임 서비스를 사용하는 것입니다. FlexMatch를 사용하여 기존 게임 채우기 (p. 75) 단원에서 게임에 매치 채우기 기능을 추가하는 방법에 대한 자세한 내용을 확인하십시오.

매치메이킹 구성에 자동 채우기가 사용되는 경우 프로세스가 유사합니다. 초기 채우기 요청이 코드가 아닌GameLift에 의해 생성된다는 점만 다릅니다. 자동 채우기 요청은 게임 세션에 열린 플레이어 슬롯이 있을 때트리거됩니다.

1. 매치메이킹 채우기 요청. 매치 게임에는 채워야 할 빈 플레이어 슬롯이 있습니다. 게임은 채우기 요청을시작하여 사용할 매치메이커를 식별하고 게임 세션의 현재 플레이어를 설명합니다. 각 요청은 게임에서요청 상태를 추적하고 필요에 따라 작업을 수행하기 위해 사용하는 매치메이킹 티켓 ID를 갖습니다. 자동채우기를 사용하면 이 티켓 ID가 게임 세션의 매치메이킹 데이터에 추가됩니다.

2. 잠재적 매치 파악. 채우기 기능에 대한 매치메이킹 티켓은 지정된 매치메이커에게 전달되고 새로운 매치티켓과 동일한 풀에 배치됩니다. 라지 매치의 경우에만 새 매치에 대한 티켓보다 채우기 티켓의 우선 순위가 높습니다.

매치메이커는 티켓이 새 플레이어용인지 아니면 채우기 요청용인지에 상관없이 티켓과 플레이어를 동등하게 평가합니다. 한 가지 예외는 잠재적 매치가 둘 이상의 채우기 티켓을 가질 수 없다는 것입니다. 매치메이커의 규칙에 따라 빈 플레이어 슬롯으로 매치가 완료되는 경우에도, 채우기 티켓은 성공적으로 완료되기 위해 하나 이상의 다른 티켓과 일치해야 합니다. 일단 잠재적 매치에 플레이어가 충원되면 제안된 매치에 속한 모든 티켓 상태가 업데이트됩니다.

3. 플레이어 수락 얻기. 수락이 필요한 경우 새 플레이어만 매치 채우기를 수락해야 하며 이 단계는 매치메이킹 요청에 설명된 대로 처리됩니다. 현재 플레이어는 이미 플레이하고 있는 매치를 수락할 필요가 없습니다. 따라서 채우기 요청의 티켓 상태에서 수락이 필요하다고 나타내는 경우에도 게임에서 작업을 수행할필요가 없습니다.

제안된 새 플레이어 중 한 명이 제한 시간 내에 매치를 수락하지 못하면 잠재적 매치가 중단되고 새로운플레이어가 기존 매치에 추가되지 않습니다. 이 경우 채우기 요청 티켓은 풀로 반환되어 처리됩니다.

4. 기존 게임 세션을 새로운 매치 데이터로 업데이트. 매치 채우기가 성공적으로 이루어지면 새로운 게임 세션을 시작할 필요가 없습니다. 대신 기존 게임 세션의 매치 데이터를 Amazon GameLift 업데이트하여 새플레이어 및 팀 배정을 추가합니다. 기존 게임을 호스팅하는 서버 프로세스로 업데이트된 게임 세션 정보를 Amazon GameLift 보냅니다.

5. 는 새 플레이어를 기존 게임 세션에 연결합니다.Amazon GameLift는 새 플레이어에 대한 플레이어 세션을생성하고 현재 상태, 플레이어 세션 및 연결 정보로 매치메이킹 티켓을 업데이트합니다. 새 플레이어의 티켓 상태를 추적하는 클라이언트 게임 서비스는 연결 정보를 게임 클라이언트에 전달합니다. 플레이어는이제 기존 게임에 참여하고 플레이어 슬롯을 신청할 수 있습니다.

관리형 GameLift를 사용한 게임 아키텍처아래 표시된 다이어그램은 관리형 GameLift 솔루션을 사용하여 호스팅되는 게임 아키텍처의 주요 구성 요소를 보여줍니다.

버전15

Amazon GameLift 개발자 안내서관리형 GameLift를 사용한 게임 아키텍처

다음은 주요 구성 요소에 대한 설명입니다.

게임 클라이언트

GameLift에 호스팅되는 게임에 참가하려면 먼저 게임 클라이언트가 사용 가능한 게임 세션을 찾아야 합니다. 게임 클라이언트는 GameLift 서비스와 통신하여 기존 게임 세션을 검색하거나, 매치메이킹을 요청하거나, 새 게임 세션을 시작합니다. 이 통신은 게임 소유자가 게임 서버와 호스팅 리소스에 대한 보안 제어를 유지할 수 있도록 백엔드 클라이언트 서비스를 통해 수행됩니다. 클라이언트 서비스는 GameLift 서비스에 대한 요청을 수행하고 응답에서 연결 세부 정보를 포함한 게임 세션 정보를 수신하며, 이 정보를 다시 게임 클라이언트에 전달합니다. 그런 다음 게임 클라이언트는 이 정보를 사용하여 게임 서버에 직접 연결하고 게임에 참가합니다. 녹색 화살표는 게임 플레이 중에 게임 클라이언트와 게임 서버 간의 직접적인 연결을 나타냅니다.

클라이언트 서비스

백엔드 클라이언트 서비스는 AWS SDK에서 GameLift 서비스 API를 호출하여 게임 클라이언트와 GameLift서비스 간의 통신을 처리합니다. 또한 클라이언트 서비스는 플레이어 인증 및 권한 부여, 인벤토리 또는 통화제어와 같은 기타 게임별 작업에도 사용될 수 있습니다. 예를 들어, 플레이어가 게임에 참가할 때 먼저 게임클라이언트가 인증 서비스를 호출하여 먼저 플레이어의 자격 증명을 확인한 다음에만 플레이어 슬롯 요청을GameLift 서비스에 전송할 수 있습니다. 연결 세부 정보와 같은 관련 정보가 다시 게임 클라이언트에 릴레이됩니다.

외부 서비스

버전16

Amazon GameLift 개발자 안내서Realtime 서버를 사용한 게임 아키텍처

게임에서 구독 멤버십 확인 등과 같은 작업 시 외부 서비스를 사용할 수도 있습니다. 아키텍처 다이어그램에서처럼 외부 서비스의 정보는 게임 클라이언트를 거치지 않고 클라이언트 서비스 및 GameLift 서비스를 통해 게임 서버로 전달될 수 있습니다.

게임 서버

게임 서버 소프트웨어는 게임 세션을 호스팅하고 플레이어 연결을 수락하기 위해 GameLift 서비스에 업로드되고 호스팅 시스템에 배포됩니다. 게임 서버는 요청을 교환하는 GameLift Server SDK를 통해 GameLift 서비스와 통신하여 새 게임 세션을 시작하고 새로 연결된 플레이어를 확인하며 게임 세션, 플레이어 연결 및 가용 리소스의 상태를 보고합니다. 게임 클라이언트는 GameLift 서비스에서 연결 세부 정보를 수신한 후 게임서버에 직접 연결합니다.

GameLift 서비스

GameLift 서비스는 게임 서버를 호스팅할 리소스 플릿을 배포 및 관리하고, 사용 가능한 리소스에 게임 세션이 배치되는 방식을 조정하며, 게임 세션을 시작 및 중지하고, 플레이어 트래픽이 변동할 때 게임 가용성을유지할 수 있도록 게임 서버 상태 및 활동을 추적합니다. 호스팅 리소스를 설정하고 관리할 때 게임 소유자는 AWS SDK 및 CLI에서 GameLift 서비스 API를 사용하여 게임 서버 빌드를 업로드하고 플릿을 생성 및 구성하며 플릿 용량을 관리합니다. 클라이언트 서비스는 AWS SDK에서 GameLift 서비스 API를 호출하여 새게임 세션을 시작하고 매치메이킹을 요청하며 플레이어를 게임 세션에 넣습니다. GameLift 플릿에 배포되는게임 서버는 GameLift Server SDK를 사용하여 GameLift 서비스와의 통신을 유지하면서 게임 세션을 시작및 중지하고, 서버 상태를 보고하며, 필요에 따라 게임 및 플레이어 데이터를 교환하는 등의 작업을 수행합니다.

호스팅 관리 도구

AWS SDK의 GameLift 도구 세트는 게임 호스팅 리소스를 구성하고, 플레이어 수요에 맞게 용량을 조정하며,리소스의 현재 상태를 모니터링하고, 게임 서버 성능과 게임 및 플레이어 활동에 대한 지표를 추적하는 다양한 방법을 제공합니다. 또한 문제 해결을 위해 개별 게임 서버에 원격으로 액세스할 수 있습니다.

Realtime 서버를 사용한 게임 아키텍처아래 표시된 다이어그램은 Realtime 서버 솔루션을 사용하는 관리형 GameLift를 사용하여 호스팅되는 게임아키텍처의 주요 구성 요소를 보여줍니다.

버전17

Amazon GameLift 개발자 안내서Realtime 서버를 사용한 게임 아키텍처

다음은 주요 구성 요소의 정의입니다.

게임 클라이언트

GameLift에 호스팅되는 게임에 참가하려면 먼저 게임 클라이언트가 사용 가능한 게임 세션을 찾아야 합니다. 게임 클라이언트는 GameLift 서비스와 통신하여 기존 게임 세션을 검색하거나, 매치메이킹을 요청하거나, 새 게임 세션을 시작합니다. 이 통신은 게임 소유자가 게임 서버와 호스팅 리소스에 대한 보안제어를 유지할 수 있도록 백엔드 클라이언트 서비스를 통해 수행됩니다. 클라이언트 서비스는 GameLift서비스에 대한 요청을 수행하고 응답에서 연결 세부 정보를 포함한 게임 세션 정보를 수신하며, 클라이언트 서비스는 이 정보를 다시 게임 클라이언트에 전달합니다. 그런 다음 게임 클라이언트는 RealtimeClient SDK와 함께 이 정보를 사용하여 게임 서버에 직접 연결합니다. 연결된 후 게임 클라이언트는 게임에 참가하고 게임에서 게임 상태 업데이트를 다른 플레이어와 교환할 수 있습니다. 녹색 화살표는 게임 플레이 중에 게임 클라이언트와 게임 서버 간의 직접적인 연결을 나타냅니다.

클라이언트 서비스

백엔드 클라이언트 서비스는 AWS SDK에서 GameLift 서비스 API를 호출하여 게임 클라이언트와GameLift 서비스 간의 통신을 처리합니다. 또한 클라이언트 서비스는 플레이어 인증 및 권한 부여, 인벤토리 또는 통화 제어와 같은 기타 게임별 작업에도 사용될 수 있습니다. 예를 들어, 플레이어가 게임에참가할 때 먼저 게임 클라이언트가 인증 클라이언트 서비스를 호출하여 플레이어의 자격 증명을 확인한다음에만 플레이어 세션 요청을 GameLift 서비스에 전송할 수 있습니다. 클라이언트 서비스가 GameLift서비스에서 수신하는 연결 세부 정보와 같은 관련 정보는 다시 게임 클라이언트에 전달됩니다.

버전18

Amazon GameLift 개발자 안내서Realtime 서버를 사용한 게임 아키텍처

외부 서비스

게임에서 구독 멤버십 확인 등과 같은 작업 시 외부 서비스를 사용할 수도 있습니다. 아키텍처 다이어그램에서처럼 외부 서비스의 정보는 게임 클라이언트를 거치지 않고 클라이언트 서비스 및 GameLift 서비스를 통해 게임 서버로 전달될 수 있습니다.

Realtime 서버

게임 세션을 호스팅하려면 게임에 구성된 Realtime 서버 플릿을 생성합니다. Realtime 서버는 완전한통합 게임 서버를 대신하여, 게임에 맞게 사용자 지정하는 스크립트를 실행하고 GameLift로 업로드합니다. Realtime 서버는 게임 세션에 대한 플레이어 연결을 추적하며 플레이어 사이의 게임 데이터를 전달하여 각 플레이어의 게임 상태를 계속 동기화합니다. 그리고 GameLift 서비스와 통신하여 새 게임 세션을 시작하고 새로 연결된 플레이어를 확인하며 게임 세션 상태, 플레이어 연결 상태 및 가용 리소스를 보고합니다. 게임에 참가하면 게임 클라이언트가 GameLift 서비스에서 연결 세부 정보를 수신한 후Realtime 서버에 직접 연결합니다.

GameLift 서비스

GameLift 서비스는 Realtime 서버를 호스팅할 리소스 플릿을 배포 및 관리하고, 사용 가능한 리소스에서 게임 세션이 배치되는 방식을 조정하며, 게임 세션을 시작 및 중지하고, 플레이어 트래픽이 변동할 때게임 가용성을 유지할 수 있도록 게임 서버 상태 및 활동을 추적하는 핵심 서비스입니다. 호스팅 리소스를 설정하고 관리할 때 게임 소유자는 AWS SDK 및 CLI에서 GameLift 서비스 API를 사용하여 게임 서버 빌드 및 스크립트를 업로드하고 플릿을 생성 및 구성하며 플릿 용량을 관리합니다. 클라이언트 서비스는 AWS SDK에서 GameLift 서비스 API를 호출하여 새 게임 세션을 시작하고 매치메이킹을 요청하며플레이어를 게임 세션에 넣습니다.

호스팅 관리 도구

AWS SDK의 GameLift 도구 세트는 게임 호스팅 리소스를 구성하고, 플레이어 수요에 맞게 용량을 조정하며, 리소스의 현재 상태를 모니터링하고, 게임 서버 성능과 게임 및 플레이어 활동에 대한 지표를 추적하는 다양한 방법을 제공합니다. 또한 문제 해결을 위해 개별 게임 서버에 원격으로 액세스할 수 있습니다.

버전19

Amazon GameLift 개발자 안내서AWS 계정 설정

설정이 단원의 항목을 읽으면 GameLift 서비스에서 AWS 계정을 설정하는 방법 및 GameLift를 사용하여 멀티플레이어 게임을 호스팅하는 데 필요한 도구를 구하는 방법을 찾을 수 있습니다.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

주제• AWS 계정 설정 (p. 20)• Amazon GameLift 액세스를 위한 역할 설정 (p. 22)• Amazon GameLift SDK (p. 23)• 도구 및 리소스 (p. 27)• AWS 결제 알림 설정 (p. 29)• Amazon GameLift에서 표현식 사용 (p. 29)

AWS 계정 설정Amazon GameLift는 AWS 서비스이므로 Amazon GameLift를 사용하려면 AWS 계정이 있어야 합니다. AWS계정 생성은 무료입니다.

AWS 계정으로 수행할 수 있는 작업에 대한 정보는 AWS 시작하기를 참조하십시오.

Amazon GameLift 계정 설정

1. 계정을 만듭니다. Amazon Web Services를 열고 Sign In to the Console(콘솔에 로그인)을 선택합니다.메시지를 따라 새 계정을 만들거나 기존 계정으로 로그인합니다.

2. 사용자 그룹 및 액세스 권한을 설정합니다. AWS Identity and Access Management (IAM) 서비스 콘솔을열고 다음 단계를 수행하여 사용자 또는 사용자 그룹 집합을 정의하고 이 집합에 액세스 권한을 할당합니다. IAM 정책을 연결하면 사용자 또는 사용자 그룹으로 권한이 확장됩니다. 이 정책은 사용자에게 액세스 권한이 있어야 하는 AWS 서비스 및 작업 집합을 지정합니다. 콘솔(또는 AWS CLI나 기타 도구)을사용하여 사용자 그룹을 설정하는 방법에 대한 자세한 지침은 IAM 사용자 생성 단원을 참조하십시오.

a. 관리 사용자 및 사용자 그룹을 생성합니다. 관리 사용자에는 빌드 및 집합과 같은 핵심 AmazonGameLift 리소스를 관리하는 사용자가 포함됩니다. 권한을 설정하려면, 자신의 고유 정책을 처음부터 설정해야 합니다. 이 예 (p. 20)에서는 Amazon GameLift 서비스에 대한 관리자 정책을 보여줍니다.

b. 플레이어 사용자를 생성합니다. 플레이어 사용자는 게임 클라이언트를 나타냅니다. 이 사용자는 게임 세션 정보 표시 및 플레이어를 게임에 참여시키기와 같은 Amazon GameLift 클라이언트 기능에액세스할 수 있습니다. Amazon GameLift 서비스와 통신할 때는 게임 클라이언트에서 플레이어 사용자 자격 증명을 사용해야 합니다. 권한을 설정하려면, 자신의 고유 정책을 처음부터 설정해야 합니다. 이 예 (p. 20)에서는 Amazon GameLift 서비스에 대한 플레이어 정책을 보여줍니다.

GameLift의 IAM 정책 예제다음 예제를 이용하여 인라인 정책을 만들고 IAM 사용자 또는 사용자 그룹에 적절한 권한을 추가할 수 있습니다.

GameLift FleetIQ를 독립 실행형 솔루션으로 사용 중인 경우 GameLift FleetIQ에 대한 AWS 계정 설정 (p. 197) 단원을 참조하십시오.

버전20

Amazon GameLift 개발자 안내서IAM 정책 예제

관리자를 위한 간단한 정책이 정책은 사용자에게 모든 관리 액세스를 제공합니다. 사용자 또는 사용자 그룹에 연결하여 모든 GameLift리소스(플릿, 별칭, 게임 세션, 플레이어 세션 등)에서 모든 GameLift 작업을 허용합니다.

{"Version": "2012-10-17","Statement": { "Effect": "Allow", "Action": "gamelift:*", "Resource": "*" }}

플레이어를 위한 간단한 정책 예제다음 정책 예제는 게임 클라이언트 및/또는 게임 클라이언트 서비스에서 플레이어를 게임 세션에 배치하는기능을 활성화하는 방법을 보여줍니다. 이들 예제는 게임이 새 게임 세션을 시작하고 플레이어를 사용 가능한 플레이어 슬롯에 할당하는 데 사용할 수 있는 주요 시나리오를 다룹니다.

게임 세션 배치를 위한 정책

이 정책 예제는 게임 세션 대기열 및 배치를 사용하여 새 게임 세션을 시작하는 게임 클라이언트 서비스를 위한 것입니다. 플레이어는 초기 배치 요청 시 또는 기존 게임 세션에 대한 새 플레이어 세션을 생성하여 게임세션에 추가될 수 있습니다.

{"Version": "2012-10-17","Statement": { "SID": "PlayerPermissionsForGameSessionPlacements", "Effect": "Allow", "Action": [ "gamelift:StartGameSessionPlacement", "gamelift:DescribeGameSessionPlacement", "gamelift:StopGameSessionPlacement", "gamelift:CreatePlayerSession", "gamelift:CreatePlayerSessions", "gamelift:DescribeGameSessions" ], "Resource": "*" }}

매치메이킹 관련 정책

이 정책 예제는 GameLift FlexMatch 매치메이킹을 사용하는 게임 클라이언트 또는 클라이언트 서비스를 위한 것입니다. 플레이어는 매치되어 새 게임 세션에 배치되거나 백필 프로세스를 통해 기존 게임 세션에 추가될 수 있습니다.

{"Version": "2012-10-17","Statement": { "SID": "PlayerPermissionsForGameSessionMatchmaking", "Effect": "Allow", "Action": [ "gamelift:StartMatchmaking", "gamelift:DescribeMatchmaking", "gamelift:StopMatchmaking", "gamelift:AcceptMatch",

버전21

Amazon GameLift 개발자 안내서Amazon GameLift 액세스를 위한 역할 설정

"gamelift:StartMatchBackfill", "gamelift:DescribeGameSessions" ], "Resource": "*" }}

수동 게임 세션 배치를 위한 정책

이 정책 예제는 특정 플릿에 새 게임 세션을 생성하고 특정 게임 세션에서 새 플레이어 세션을 생성할 수 있는 게임 클라이언트 또는 클라이언트 서비스를 위한 것입니다. 이 시나리오는 플레이어가 사용 가능한 게임세션 목록에서 선택할 수 있도록 “목록 및 선택” 방법을 사용하는 게임을 지원합니다.

{"Version": "2012-10-17","Statement": { "SID": "PlayerPermissionsForManualGameSessions", "Effect": "Allow", "Action": [ "gamelift:CreateGameSession", "gamelift:DescribeGameSessions", "gamelift:SearchGameSessions", "gamelift:CreatePlayerSession", "gamelift:CreatePlayerSessions", "gamelift:DescribePlayerSessions" ], "Resource": "*" }}

Amazon GameLift 액세스를 위한 역할 설정이 주제는 관리형 GameLift 솔루션의 사용을 나타냅니다. GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 GameLift FleetIQ에 대한 AWS 계정 설정 (p. 197) 단원을 참조하십시오.

일부 GameLift 기능을 사용하려면 해당 AWS 리소스에 대해 제한된 액세스 권한을 확장해야 합니다. 이를 위해 AWS Identity and Access Management(IAM) 역할을 생성합니다. 역할은 (1) 역할을 맡을 수 있는 주체와(2) 역할을 사용하여 주체가 제어할 수 있는 리소스를 지정합니다. 이 단원에서는 Amazon GameLift 서비스에 대한 액세스를 확장하는 역할을 설정하는 방법을 알아봅니다.

GameLift 서비스에 대한 IAM 역할을 설정하려면

GameLift에 대한 역할을 생성하여, GameLift 서비스 또는 GameLift에서 실행하는 애플리케이션(게임 서버등)이 액세스할 수 있는 AWS 리소스를 정의합니다.

현재 Amazon GameLift에 대한 서비스별 역할은 인라인 권한과 신뢰 정책을 사용하여 수동으로 구성해야 합니다. 콘솔이나 AWS CLI를 통해 IAM 서비스를 사용하여 언제든지 역할을 업데이트할 수 있습니다.

1. AWS CLI를 사용하여 IAM 역할을 생성합니다. (IAM 콘솔에서는 일반 서비스 역할을 생성하고 정책을 추가하거나 편집할 수 없습니다.) 자세한 내용은 IAM 사용 설명서의 서비스에 대한 역할 생성(AWS CLI)단원에 나오는 설명을 참조하십시오. GameLift를 관리할 때 사용하는 AWS 계정 밑에 역할을 생성하여정확한 AWS 계정 자격 증명을 사용하고 있는지 확인할 수 있도록 해야 합니다.

2. 인라인 권한 정책을 생성하여 역할에 연결합니다. 권한 정책을 사용하여 역할에 포함되는 액세스 수준을지정합니다. 서비스 및 리소스(예: Amazon S3 버킷)에 대한 액세스 권한을 지정하고 권한을 특정 작업으로 제한할 수 있습니다. 서로 다른 권한 세트마다 서로 다른 IAM 역할을 생성하여 취약성을 제한하도록 선택할 수 있습니다. 액세스 권한 위임을 위한 정책의 예를 참조하십시오. 정책 구문을 정의한 후 1단계에 연결된 지침의 설명에 따라 정책 구문을 서비스에 연결합니다.

3. 신뢰 정책을 생성하여 역할에 연결합니다. 신뢰 정책은 역할을 맡을 수 있는 AWS 서비스를 지정합니다.다음 구문을 사용합니다.

버전22

Amazon GameLift 개발자 안내서GameLift SDK

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "gamelift.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

4. 역할을 생성하면 IAM 콘솔에서 해당 역할을 볼 수 있습니다. 새 역할을 ARN을 메모합니다. 이 정보는GameLift 기능을 설정할 때 사용해야 할 수 있습니다.

Amazon GameLift SDK이 주제에서는 사용자 지정 게임 서버 빌드 및 Realtime 서버를 위한 관리형 GameLift 솔루션과 함께 사용할 SDK에 대해 설명합니다. 다른 GameLift 솔루션에 대한 자세한 내용은 Amazon GameLift란 무엇입니까? (p. 1) 단원을 참조하십시오.

GameLift 소프트웨어 개발 키트(SDK)를 사용하여 GameLift 서비스와 통신해야 하는 GameLift 지원 멀티플레이어 게임 서버, 게임 클라이언트 및 게임 서비스를 개발합니다.

게임 엔진과 함께 GameLift SDK를 사용하는 방법에 대한 자세한 내용은 게임 엔진 및 AmazonGameLift (p. 34) 단원을 참조하십시오. SDK 및 GameLift SDK 호환성에 대한 최신 버전 정보는

GameLift 릴리스 정보는 서비스와 관련된 새로운 기능, 업데이트, 수정 사항에 대한 세부 정보를제공합니다. 또한 다음 구성 요소에 대한 변경 사항이 포함될 수 있습니다.

• AWS SDK GameLift API 및 CLI 명령• 관리형 GameLift 및 사용자 지정 게임 서버에 사용할 GameLift Server SDK• Realtime 서버에 사용할 GameLift Client SDK• GameLift 콘솔

SDK 버전다음 탭에는 SDK 버전과 함께 모든 GameLift 릴리스가 나열되어 있습니다. 게임 서버 및 클라이언트 통합에 대해 비교 가능한 SDK를 사용할 필요는 없지만 SDK의 이전 버전은 다른 SDK에서최신 기능의 사용을 완전히 지원하지 않을 수 있습니다.

현재 버전2020-04-16 (p. 301)1.7.310 이상 4.0.0 1.1.0 1.0.0

릴리스: AWS SDK 버전: Server SDK 버전:

Realtime ClientSDK 버전:

GameLift Local

버전23

Amazon GameLift 개발자 안내서SDK 버전

이전 버전2020년 4월 2일 (p. 301)

1.7.310 이상 3.4.0 1.1.0 1.0.0

2019년 12월 19일

1.7.249 이상 3.4.0 1.1.0 1.0.0

2019-11-15 1.7.210 이상 3.4.0 1.1.0 1.0.0

2019-10-24 1.7.210 이상 3.4.0 1.1.0 1.0.0

2019-09-03 1.7.175 이상 3.4.0 1.1.0 1.0.0

2019-07-09 1.7.140 이상 3.3.0 1.0.0 1.0.0

2019-04-25 1.7.91 이상 3.3.0 1.0.0 1.0.0

2019-03-07 1.7.65 이상 3.3.0   1.0.0

2019-02-07 1.7.45 이상 3.3.0   1.0.0

2018-12-14 1.6.20 이상 3.3.0   1.0.0

2018-09-27 1.6.20 이상 3.2.1   1.0.0

2018-06-14 1.4.47 이상 3.2.1   1.0.0

2018-05-10 1.4.47 이상 3.2.1   1.0.0

2018-02-15 1.3.58 이상 3.2.1   1.0.0

2018-02-08 1.3.52 이상 3.2.0   1.0.0

2017-09-03 1.1.43 이상 3.1.7   1.0.0

2017-08-16 1.1.31 이상 3.1.7   1.0.0

2017-05-16 1.0.122 이상 3.1.5   1.0.0

2017-04-11 1.0.103 이상 3.1.5   1.0.0

2017-02-21 1.0.72 이상 3.1.5    

2016-11-18 1.0.31 이상 3.1.0(C++만 해당)

   

2016-10-13 1.0.17 이상 3.1.0(C++만 해당)

   

2016-09-01 0.14.9 이상 3.1.0(C++만 해당)

   

2016-08-04 0.12.16 이상 3.0.7(C++만 해당)

   

릴리스: AWS SDK 버전: Server SDK 버전:

Realtime ClientSDK 버전:

GameLift Local

버전24

Amazon GameLift 개발자 안내서릴리스 정보

릴리스 정보다음 릴리스 정보는 시간 순서로 나열되어 있으며 최신 업데이트가 먼저 나열됩니다. GameLift는 2016년에 처음 릴리스되었습니다. 여기에 나열된 릴리스 정보보다 이전 릴리스 정보는??? (p. 300)에서 릴리스 날짜 링크를 참조하십시오.

2020년 4월 16일: GameLift에서 Unity 및 Unreal Engine에대한 Server SDK를 업데이트함Amazon GameLift는 Unity 2019 및 Unreal Engine 4.24를 통한 게임 서버 개발을 지원하기 위해업데이트된 Server SDK를 릴리스했습니다.

릴리스 날짜: 2020년 4월 16일

업데이트된 SDK 버전: GameLift Server SDK 4.0.0

최신 버전의 GameLift Server SDK에는 다음과 같은 업데이트된 구성 요소가 포함되어 있습니다.

• Unity 2019에 대해 업데이트된 C# SDK 버전 4.0.0

• Unreal Engine 4.22, 4.23 및 4.24에 대해 업데이트된 Unreal 플러그인 버전 3.3.1• C# 서버 SDK v 4.0.0을 사용하는 통합을 테스트하도록 업데이트된 GameLift Local 버전 1.0.5최신 버전의 GameLift Server SDK는 Amazon GameLift 시작하기에서 다운로드합니다.

2020년 4월 2일: EC2에서 게임 호스팅에 GameLift FleetIQ사용 가능(공개 미리 보기)Amazon GameLift는 스팟 인스턴스 최적화를 위해 FleetIQ를 확장합니다.

릴리스 날짜: 2020년 4월 2일

업데이트된 SDK 버전: GameLift Server SDK 3.4.0

GameLift FleetIQ 기능은 게임 호스팅에 사용할 수 있도록 저렴한 스팟 인스턴스의 실행 가능성을 최적화합니다. 이제 관리형 GameLift 서비스를 이용하지 않고 호스팅 리소스를 직접 관리하려는 고객을 위해 이 기능을 확장했습니다. 이 솔루션은 컨테이너 또는 다른 AWS 서비스(예: AWSShield, Amazon Elastic Container Service (Amazon ECS) 등)의 사용을 지원합니다.

새로운 GameLift FleetIQ 독립 실행형 솔루션에 대한 자세한 내용은 GameTech 블로그 게시물및 GameLift FleetIQ 가이드[공개 미리 보기] (p. 186) 단원을 참조하십시오.

Lumberyard 호환성Amazon Lumberyard 사용자의 경우 다음 표에는 Lumberyard 게임 엔진에 함께 제공되거나 호환되는 GameLift SDK 버전이 나열되어 있습니다.1.4~1.5(베타) • Server SDK: 3.0.7

• AWS SDK: 0.12.16

버전25

Amazon GameLift 개발자 안내서사용자 지정 게임 서버

1.6~1.7(베타) • Server SDK: 3.1.0

• AWS SDK: 0.14.9

1.8~1.14(베타) • Server SDK: 3.1.5• AWS SDK: 1.0.72~1.1.13

1.15 이상(베타) • Server SDK: 3.2.1• AWS SDK: 1.4.34 이상

Amazon Lumberyard 버전: GameLift SDK 버전에 함께 제공됨: (p. 300) 단원을 참조하십시오.

사용자 지정 게임 서버GameLift Server SDK로 64비트 사용자 지정 게임 서버를 생성하고 배포합니다. 이 SDK를 통해 GameLift서비스는 GameLift 호스팅 리소스 전체에 걸쳐 게임 서버 프로세스를 배포하고 관리할 수 있습니다. ServerSDK를 다운로드하고 게임 서버에 Amazon GameLift 추가 (p. 42) 프로젝트 방법을 알아보십시오. 버전별정보는 GameLift 릴리스 정보를 참조하십시오.

SDK 지원

GameLift Server SDK 다운로드에는 다음 버전의 원본이 포함됩니다. 게임에 필요한 버전을 빌드합니다. 빌드 지침 및 최소 요구 사항에 대해서는 각 버전의 README 파일을 참조하십시오.

• C++• Unreal Engine(플러그인)용 C++• C#(.NET)

개발 환경

지원되는 이러한 개발 운영 체제와 게임 엔진에 필요하다면 원본에서 SDK를 빌드합니다.

• 운영 체제 – Windows, Linux• 게임 엔진 – Amazon Lumberyard, Unreal Engine, Unity 및 C++ 또는 C# 라이브러리를 지원하는 엔진

게임 서버 운영 체제

GameLift Server SDK를 사용하여 다음 플랫폼에서 실행되는 게임 서버를 생성합니다.

• Windows Server 2012 R2• Amazon Linux• Amazon Linux 2

Realtime 서버의 경우멀티플레이어 게임을 호스팅하는 Realtime 서버를 구성하고 배포한 후 GameLift Realtime Client SDK를사용하여 게임 클라이언트가 이 서버에 연결하도록 활성화합니다. 게임 클라이언트는 이 SDK를 사용하여Realtime 서버 및 이 서버에 연결된 다른 게임 클라이언트와 메시지를 교환합니다. Realtime Client SDK를다운로드한 후 게임 클라이언트에 이를 사용하는 방법 (p. 58)을 알아봅니다.

SDK 지원

버전26

Amazon GameLift 개발자 안내서클라이언트 서비스

Realtime Client SDK에는 다음 언어를 위한 소스가 들어 있습니다.

• C#(.NET)

개발 환경

지원되는 이러한 개발 운영 체제와 게임 엔진에 필요하다면 원본에서 SDK를 빌드합니다.

• 운영 체제 – Windows, Linux, Android, iOS.• 게임 엔진 – Unity, C# 라이브러리를 지원하는 엔진

게임 서버 운영 체제

Realtime 서버는 다음 플랫폼을 실행하는 호스팅 리소스에 배포됩니다.

• Amazon Linux• Amazon Linux 2

클라이언트 서비스GameLift API와 함께 AWS SDK를 사용하여 64비트 클라이언트 서비스를 생성합니다. 이 SDK를 통해 클라이언트 서비스는 게임 세션을 찾거나 생성하고 GameLift에서 호스팅 중인 게임에 플레이어를 참가시킬 수있습니다. AWS SDK를 다운로드하거나 GameLift API 참조 문서를 봅니다.

SDK 지원

AWS SDK Amazon GameLift는 다음 언어로 제공됩니다. 개발 환경 지원에 대한 자세한 내용은 각 언어로 된설명서를 참조하십시오.

• C++(SDK docs)(Amazon GameLift)• Java(SDK docs)(Amazon GameLift)• .NET(SDK docs)(Amazon GameLift)• Go(SDK docs)(Amazon GameLift)• Python(SDK docs)(Amazon GameLift)• Ruby(SDK docs)(Amazon GameLift)• PHP(SDK docs)(Amazon GameLift)• JavaScript/Node.js(SDK docs)(Amazon GameLift)

도구 및 리소스Amazon GameLift는 유용한 도구와 리소스 모음을 제공합니다.

핵심 도구이 도구를 이용해 Amazon GameLift에서 작업합니다.

Amazon GameLift SDK

Amazon GameLift SDK에는 게임 클라이언트, 게임 서버, 게임 서비스에서 Amazon GameLift 서비스와통신하는 데 필요한 라이브러리가 포함되어 있습니다. 이 SDK 버전은 Lumberyard와 함께 제공되며 별도로 최신 버전을 다운로드할 수도 있습니다. 자세한 내용은 Amazon GameLift SDK (p. 23) 단원을참조하십시오.

버전27

Amazon GameLift 개발자 안내서추가 리소스

Amazon GameLift용 Realtime Client SDK

Realtime 서버를 사용하는 게임의 경우 Realtime Client SDK를 사용하여, 게임 클라이언트를 배포된Realtime 서버에 연결하고 게임 세션에 참여하며 게임 상태를 게임의 다른 참가자와 동기화된 상태로 유지할 수 있습니다. SDK를 다운로드하고, Realtime 서버 Client API(C#) 참조 (p. 228)를 사용하여 API호출을 수행하는 것에 대해 알아봅니다.

Amazon GameLift용 AWS 콘솔

Amazon GameLift의 AWS Management 콘솔을 사용하여 게임 배포를 관리하고 리소스를 구성하고 플레이어 사용량 및 성능 지표를 추적합니다. Amazon GameLift 콘솔은 AWS SDK를 통한 프로그래밍 방식의 리소스 관리를 대신할 GUI를 제공합니다.

Amazon GameLift용 AWS CLI

AWS SDK API를 포함해 Amazon GameLift를 호출하려면 이 명령줄 도구를 사용합니다. AWSCommand Line Interface 다운로드를 받아 다음 지침에 따라 설치합니다. Amazon GameLift를 비롯한모든 AWS 서비스에 대한 AWS CLI 명령 참조 설명서를 볼 수도 있습니다.

Amazon GameLift Local

이 클라이언트 측 디버깅 도구는 로컬 개발 머신에서 Amazon GameLift API 하위 집합을 에뮬레이션합니다. 게임 서버를 업로드하여 Amazon GameLift 인스턴스에서 실행할 필요 없이 반복 코드 변경 내용을 테스트할 수 있습니다. Windows 및 Linux 장치에서 Amazon GameLift Local을 사용하여 AmazonGameLift SDK를 사용하는 게임 클라이언트와 서버를 테스트할 수 있습니다. Amazon GameLift Local은Server SDK 다운로드에서 제공됩니다. 자세한 내용은 통합 테스트 (p. 53) 단원을 참조하십시오.

추가 리소스이 리소스를 이용해 멀티플레이어 게임에 Amazon GameLift를 사용하는 법을 익히고 시험해 보십시오.

5-Click 샘플

샘플 멀티플레이어 게임(클라이언트 및 사용자 지정 게임 서버)를 받아 1시간 내에 Amazon GameLift에서 실행해 봅니다. 이 샘플을 사용하여, Amazon GameLift 도구를 간편하게 사용해 보고, 플릿을 설정하고 호스팅을 위해 게임 서버를 배포하며, 자동 조정을 설정하고, 게임 활동과 성능을 추적할 수 있습니다. 이 샘플은 Amazon GameLift 콘솔에서 찾아볼 수 있습니다. GameLift 소개 페이지에서 "AmazonGameLift 테스트"를 클릭하거나, 다른 콘솔 페이지의 Amazon GameLift 탐색 메뉴에서 "샘플 게임"을 선택합니다.

Amazon GameLift 포럼

Amazon GameLift 포럼을 통해 아이디어와 지식을 교환하고 유용한 팁을 얻는 동시에, 문제 해결을 위한도움을 받으십시오.

GameTech 블로그

이 게임 개발자 블로그를 확인하여 Amazon GameLift, Amazon Lumberyard에 대한 새로운 기능을 학습하고, AWS를 통한 게임 개발에 대해 자세히 알아보며, 팀으로부터 전문적인 팁을 얻으십시오.

GitHub의 AWS 샘플

AWS 샘플에 게시된 모든 AWS 서비스에 대한 대규모 코드 샘플 모음을 확인할 수 있습니다.시작하기 자습서

이 자습서를 통해 Amazon GameLift를 이용한 샘플 멀티플레이어 게임 개발 및 구현 프로세스를 알아봅니다. 시리즈를 마치면 게임을 이용해 자동 조정, 성능 측정치 등 다른 Amazon GameLift 기능과 도구를탐색할 수 있습니다(프리 티어 사용 시 무료).

Amazon GameLift제품 정보

서비스 개요, FAQ 및 요금 내역을 포함하여 Amazon GameLift에 대한 자세한 설명은 이러한 페이지를확인하십시오.

버전28

Amazon GameLift 개발자 안내서AWS 결제 알림 설정

Amazon Lumberyard 게임 엔진

Amazon Lumberyard에는 Amazon GameLift SDK가 내장되어 있으며 통합은 자동으로 처리됩니다.Lumberyard를 사용하여 게임을 Amazon GameLift과 통합하는 방법을 보여 주는 샘플 멀티플레이어 게임과 함께 제공됩니다. 이 샘플 프로젝트에 대한 자세한 정보는 Lumberyard사용 설명서를 참조하십시오.

AWS 결제 알림 설정결제 이벤트를 알리도록 결제 알림을 설정하고 구성할 수 있습니다. 자세한 내용은 결제 경보 만들기를 참조하십시오.

결제 알림을 받을 수 있을 뿐만 아니라, Billing and Cost Managemen 콘솔에서 GameLift의 현재 예상 청구액을 확인할 수 있습니다(https://console.aws.amazon.com/billing/ 참조). 이는 리소스 소비를 검토하고, 향후 사용에 관한 결정을 내리며, 조정 요구를 결정하는 데 도움이 됩니다.

불필요한 요금이 발생하지 않게 하려면 사용하지 않는 동안 플릿 규모를 축소 (p. 118)해야 할 수 있습니다.

Amazon GameLift에서 표현식 사용Amazon GameLift는 여러 AWS 리전에서 사용할 수 있습니다. 전체 AWS 리전 및 엔드포인드 목록은 AWS리전 및 엔드포인트를 참조하십시오. Global AWS 계정으로 대부분의 리전에서 리소스와 작업할 수 있습니다.

Sinnet에서 구동되는 중국(북경) 지역에서의 리소스용 Amazon GameLift을 사용하려면 별도의 AWS(중국)계정이 필요합니다. 또한 리전 간 상호 작용을 처리하는 Amazon GameLift방법을 포함하여 구현 방법에 몇가지 차이점이 있습니다. 중국(북경) 지역에서의 Amazon GameLift 사용에 대한 자세한 내용은 다음 리소스를 참조하십시오.

• AWS, 중국• 중국 Amazon GameLift

버전29

Amazon GameLift 개발자 안내서GameLift 둘러보기

Amazon GameLift 시작하기이 단원의 리소스는 사용자 지정 게임 서버 및 Realtime 서버에 대한 관리형 GameLift 솔루션을 시작하는 데도움이 됩니다.

주제• Amazon GameLift 둘러보기 (p. 30)• 사용자 지정 서버 시작하기 (p. 31)• Realtime 서버 시작하기 (p. 32)

Amazon GameLift 둘러보기게임을 즐기기 전에 Amazon GameLift 기능을 체험하고 싶은 경우, 이러한 샘플 경험을 해보십시오. 콘솔샘플을 통해 GameLift 콘솔에서의 게임 호스팅을 직접 경험할 수 있습니다. 소스 코드 예제 및 연습에서는Realtime 서버를 사용하여 게임 호스팅을 준비하는 방법을 보여줍니다.

Realtime 서버 샘플 게임(전체 소스)Mega Frog Race는 소스 코드가 있는 완전한 멀티플레이어 게임 샘플입니다. GameLift Realtime 서버를 사용하여 샘플을 온라인으로 실행하도록 준비하는 방법을 알려주는 실습 자습서를 참조하십시오. 이 샘플을 통해 게임 클라이언트가 GameLift Realtime 서버 작업을 준비할 수 있는 방법을 보다 잘 이해할 수 있습니다.또한 이 샘플을 통해 FlexMatch와 같은 다른 GameLift 기능을 처음으로 경험할 수 있습니다.

실습 자습서를 읽으려면 GameTech 블로그 게시물인 Creating Servers for Multiplayer Mobile Games withJust a Few Lines of JavaScript를 참조하십시오.

소스 코드를 얻으려면 GitHub 리포지토리로 이동합니다.

MegaFrogRace 샘플에 대한 소스 자료에는 Realtime 서버로 호스팅된 멀티플레이어 게임을 배포하는 모든요소가 포함됩니다.

• 게임 클라이언트 – Unity에서 생성된 C++ 게임 클라이언트에 대한 소스 코드입니다. GameLift에서 게임 세션 연결 정보를 가져오고, Realtime 서버에 연결하고, Realtime 서버를 통해 게임 업데이트를 다른 플레이어와 교환하는 방법을 설명합니다.

• 클라이언트 서비스 – GameLift 서비스에 대한 직접 API 호출을 관리하는 AWS Lambda 함수에 대한 소스(노드 기반 JavaScript에 있음)입니다. 서비스가 게임 클라이언트에 의해 호출되면 새 게임 세션을 찾거나시작하고 플레이어를 할당하는 호출을 수행한 다음 연결 세부 정보를 게임 클라이언트에 다시 반환합니다.

• Realtime 스크립트 – 게임에 대한 Realtime 서버 플릿을 구성하는 소스 스크립트 파일(노드 기반JavaScript에 있음)입니다. 이 스크립트에는 Realtime 서버에서 GameLift 서비스와 통신하고 게임 세션을시작하고 중지할 수 있는 최소 구성이 포함되며, 샘플 게임에 대한 일부 사용자 지정 로직도 포함됩니다.

사용자 지정 게임 서버 샘플(콘솔 환경)이 샘플 환경을 통해 GameLift에서 바로 실시간 게임을 할 수 있습니다. 샘플 게임 빌드를 업로드하고, 게임서버를 실행할 플릿을 생성하고, 샘플 게임 클라이언트에서 이 플릿에 연결합니다. 여러 게임 클라이언트를시작하고 플레이하여 호스팅 데이터를 생성할 수 있습니다. 몇 가지 데이터가 있으면 GameLift 콘솔을 탐색하여 호스팅 리소스를 보고, 지표를 추적하고, 호스팅 용량을 확장하는 방법을 경험합니다.

버전30

Amazon GameLift 개발자 안내서사용자 지정 서버 시작하기

샘플 마법사에 액세스하려면 GameLift 콘솔에 로그인하고, Amazon GameLift 메뉴를 열고, Custom gameserver sample(사용자 지정 게임 서버 샘플)을 선택합니다.

샘플 게임 정보

샘플 게임은 Amazon Lumberyard 게임 엔진을 사용하여 개발됩니다. 게임 클라이언트를 실행하려면Windows 7 64비트 시스템 및 300MB의 공간이 필요합니다. 추가 요구 사항을 참조하십시오.

사용자 지정 서버 시작하기이 로드맵에서는 사용자 지정 게임 서버에 대한 관리형 GameLift 솔루션을 사용하여 사용자 지정 게임 서버가 있는 멀티플레이어 게임을 시작하고 실행하는 주요 단계를 간략하게 설명합니다. 배포 준비된 게임 서버와 함께 게임 클라이언트를 배포할 수 있는 GameLift Realtime 서버 사용에 관심이 있으면 Realtime 서버 시작하기 (p. 32) 단원을 참조하십시오. 다른 GameLift 솔루션에 대한 자세한 내용은 Amazon GameLift란무엇입니까? (p. 1) 단원을 참조하십시오.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

GameLift를 처음 사용하는 경우 Amazon GameLift란 무엇입니까? (p. 1) 단원을 읽어 보는 것이 좋습니다.GameLift가 운영 체제와 개발 환경을 지원하는지 잘 모르겠다면 Amazon GameLift SDK (p. 23) 및 게임 엔진및 Amazon GameLift (p. 34) 주제를 참조하십시오.

통합을 시작하기 전에 AWS 계정이 있어야 하며 Amazon GameLift에 맞게 계정을 구성해야 합니다. 자세히알아보려면 AWS 계정 설정 (p. 20) 단원을 참조하십시오. 게임 서버를 만들고 관리하는 데 필요한 모든 작업은 Amazon GameLift 콘솔을 사용하여 수행할 수 있지만 AWS Command Line Interface 도구를 다운로드하여 설치합니다.를 사용할 수도 있습니다.

1. Amazon GameLift에서 호스팅하기 위한 사용자 지정 게임 서버를 준비합니다.

• Amazon GameLift Server SDK를 받아서 원하는 프로그래밍 언어와 게임 엔진에 맞게 빌드합니다.Amazon Lumberyard 게임 엔진을 사용하는 경우, 해당 SDK 버전이 내장되어 있습니다. AmazonGameLift SDK 사용자 지정 게임 서버 (p. 26) 및 게임 엔진 및 Amazon GameLift (p. 34) 단원을 참조하십시오.

• 게임 서버 프로젝트에 코드를 추가하여 Amazon GameLift 서비스와 통신을 설정합니다. 게임 서버는Amazon GameLift에 해당 상태를 알리고, 프롬프트가 표시될 때 게임 서버를 시작/중지할 수 있으며기타 작업을 수행할 수 있습니다. 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

2. 호스팅 게임 세션Amazon GameLift에 게임 클라이언트 연결을 준비합니다.

• 게임 클라이언트가 메시지를 표시하면 게임 세션을 시작하고 플레이어를 게임에 배치하기 위해Amazon GameLift 서비스와 통신할 클라이언트 서비스를 설정합니다.• AWS SDK를 클라이언트 서비스 프로젝트에 추가합니다. 자세한 내용은 Amazon GameLiftSDL클

라이언트 서비스 (p. 27)를 참조하십시오.• 게임 세션에 대한 정보를 검색하고, 새 게임 세션을 배치하고, 게임 세션에서 플레이어를 위한 공간

을 예약(선택 사항)하는 기능을 추가합니다. 게임 클라이언트에 Amazon GameLift 추가 (p. 47)단원을 참조하십시오. 권장: 게임 세션 배치를 사용하면 FleetIQ를 활용하고 리소스 사용량과 플레이어 경험을 최적화할 수 있습니다. 이 옵션은 FlexMatch를 사용할 때 필요합니다.

• (선택 사항) 클라이언트 서비스가 FlexMatch를 사용하여 플레이어 매치메이킹을 요청하도록 활성화합니다. FlexMatch 통합 로드맵 (p. 68) 단원에서 자세히 알아보십시오.

• 호스팅된 게임 세션과 직접 연결할 게임 클라이언트를 활성화합니다. 코드를 추가하여 게임 세션 및예약된 플레이어 세션(선택 사항)에 대한 연결 정보를 획득합니다. 이 연결 정보와 플레이어 ID를 사용하여 게임 서버와 통신하고 게임에 참가합니다. 게임 세션에 플레이어 참여 (p. 49) 단원을 참조하십시오.

버전31

Amazon GameLift 개발자 안내서Realtime 서버 시작하기

3. Amazon GameLift 통합을 테스트합니다.

• Amazon GameLift Local로 로컬에서 실행되는 Amazon GameLift 버전을 사용하여 게임 클라이언트및 게임 서버 통합을 테스트합니다. 이 도구를 사용하면 게임 빌드를 업로드하고 플릿을 설정할 필요없이 통합을 테스트할 수 있습니다. 게임 구성 요소가 Amazon GameLift 서비스와 통신하는지 확인하고 핵심 기능을 테스트할 수 있습니다. 통합 테스트 (p. 53) 단원을 참조하십시오.

4. 게임을 호스팅할 가상 컴퓨팅 리소스 플릿을 빌드합니다.

• 사용자 지정 게임 서버 빌드를 패키징하여 Amazon GameLift 서비스에 업로드합니다. 게임을 배포하려는 각 리전에 빌드를 업로드해야 합니다. GameLift에 사용자 지정 서버 빌드 업로드 (p. 89) 단원을 참조하십시오.

• 게임의 플릿 구성을 설계합니다. 예를 들어 사용할 컴퓨팅 리소스의 유형, 배포할 리전, 대기열 사용여부 및 기타 옵션을 결정합니다. GameLift 플릿 설계 가이드 (p. 96) 단원을 참조하십시오.

• 플릿을 생성하여 사용자 게임 서버와 함께 배포합니다. 플릿이 활성화되면 게임 세션을 호스팅하고 플레이어를 수락할 준비가 됩니다. GameLift 플릿 설정 (p. 96) 단원을 참조하십시오.

• Amazon GameLift 플릿 구성 설정을 실험하고 필요에 따라 미세 조정하여 플릿 리소스 사용법을 최적화합니다. 각 인스턴스에서 동시에 실행되도록 게임 세션 수를 조정하거나 게임 세션 활성화 제한을설정합니다. GameLift 플릿 설계 가이드 (p. 96) 단원을 참조하십시오. GameLift 플릿 인스턴스에원격으로 액세스 (p. 113) 방법 단원을 참조하십시오.

• 사용 가능한 호스팅 리소스로 새로운 게임 세션을 배치하는 방법을 관리하는 대기열을 만듭니다. 게임세션 대기열 설계 (p. 124) 단원을 참조하십시오.

• 예상되는 플레이어 수요에 맞게 플릿의 호스팅 용량을 관리하려면 Auto Scaling을 사용합니다.GameLift 플릿 용량 조정 (p. 115) 단원을 참조하십시오.

• (선택 사항) 게임에 대한 사용자 지정 매치메이킹 규칙을 사용하여 FlexMatch 매치메이커를 설정합니다. FlexMatch 통합 로드맵 (p. 68) 단원에서 자세히 알아보십시오.

Note

대기열을 생성한 후, 요청 게임 세션 배치 및/또는 매치메이킹을 수행할 때 올바른 대기열 ID를사용하도록 클라이언트 서비스를 업데이트해야 합니다.

Amazon GameLift를 게임 구성 요소에 완전히 통합한 후에는 장기적으로 최적의 가용성 및 성능을 제공하도록 게임 서버 플릿을 관리하는 것이 관건입니다. Amazon GameLift 도구를 사용하여 얼마나 빠르고 효율적으로 플레이어를 검색하고 게임 세션에 연결할 수 있는지, 시간 경과에 따른 게임 서버의 성능, 플레이어 사용패턴과 같은 사항을 추적합니다. 콘솔에서 게임 데이터 보기 (p. 164) 단원을 참조하십시오.

Realtime 서버 시작하기이 로드맵에서는 Realtime 서버에서 관리형 GameLift 솔루션을 사용하여 멀티플레이어 게임 클라이언트를 시작하고 실행하는 주요 단계를 간략하게 설명합니다. 사용자 지정 게임 서버를 사용하는 게임이 있으면사용자 지정 서버 시작하기 (p. 31) 단원을 참조하십시오. 다른 GameLift 솔루션에 대한 자세한 내용은Amazon GameLift란 무엇입니까? (p. 1) 단원을 참조하십시오.

Realtime 서버를 처음 사용하거나 이 기능이 게임에 적합한지 여부에 대해 잘 모르는 경우 Realtime 서버의작동 방식 (p. 7) 단원을 읽어보는 것이 좋습니다.

Note

GameLift를 사용하여 게임을 통합하고 배포하는 방법에 익숙한 사용자에게 다음은 Realtime 서버와의 차이점에 대한 간략한 요약입니다.

• Realtime 서버 인스턴스에서 게임 세션을 실행하는 선택적 게임 로직과 함께 Realtime 스크립트를 생성하고 업로드합니다. 더 이상 사용자 지정 게임 서버를 개발하고 이를 GameLift ServerSDK와 통합할 필요가 없습니다.

버전32

Amazon GameLift 개발자 안내서Realtime 서버 시작하기

• 게임 세션을 호스팅할 플릿을 생성할 때 게임 서버 빌드 대신 Realtime 스크립트를 사용하여 플릿을 배포합니다.

• 게임 클라이언트를 Realtime Client SDK와 통합하여 게임 세션에 대한 연결을 관리합니다.

통합을 시작하기 전에 AWS 계정이 있어야 하며 GameLift에 맞게 계정을 구성해야 합니다. 자세히 알아보려면 AWS 계정 설정 (p. 20) 단원을 참조하십시오. 게임 서버를 만들고 관리하는 데 필요한 모든 작업은GameLift 콘솔을 사용하여 수행할 수 있지만 AWS Command Line Interface 도구를 다운로드하여 설치합니다.를 사용할 수도 있습니다.

1. GameLift에서 호스팅하기 위해 Realtime 스크립트를 생성합니다.

• 해당 서버 구성 및 사용자 지정 게임 로직(선택 사항)으로 Realtime 스크립트를 생성합니다. Realtime서버는 게임 세션을 시작 및 중지하고, 플레이어 연결을 허용하며, GameLift 서비스를 사용하는 통신 및 게임의 플레이어 간 통신을 관리하도록 이미 빌드되어 있습니다. 게임용으로 사용자 지정된 로직을 추가할 수 있는 후크도 있습니다. Realtime 서버는 Node.js를 기반으로 하며 서버 스크립트는JavaScript로 작성됩니다. Realtime 스크립트 만들기 (p. 62) 단원을 참조하십시오.

2. 게임을 호스팅할 가상 컴퓨팅 리소스 플릿을 빌드합니다.

• Realtime 스크립트를 GameLift 서비스에 업로드합니다. 게임을 배포하려는 각 리전에 스크립트를 업로드해야 합니다. Realtime 서버 스크립트를 Amazon GameLift에 업로드 (p. 93) 단원을 참조하십시오.

게임의 플릿 구성을 설계합니다. 예를 들어 사용할 컴퓨팅 리소스의 유형, 배포할 리전, 대기열 사용여부 및 기타 옵션을 결정합니다. GameLift 플릿 설계 가이드 (p. 96) 단원을 참조하십시오.

• Realtime 서버 플릿을 생성하고 Realtime 스크립트를 사용하여 배포합니다. 플릿이 활성화되면 게임세션을 호스팅하고 플레이어를 수락할 준비가 됩니다. GameLift 플릿 설정 (p. 96) 단원을 참조하십시오.

• GameLift 플릿 구성 설정을 실험하고 필요에 따라 미세 조정하여 플릿 리소스 사용법을 최적화합니다. 각 인스턴스에서 동시에 실행되도록 게임 세션 수를 조정하거나 게임 세션 활성화 제한을 설정합니다. GameLift 플릿 설계 가이드 (p. 96) 단원을 참조하십시오. GameLift 플릿 인스턴스에 원격으로 액세스 (p. 113) 방법 단원을 참조하십시오.

• 사용 가능한 호스팅 리소스로 새로운 게임 세션을 배치하는 방법을 관리하는 대기열을 만듭니다. 게임세션 대기열 설계 (p. 124) 단원을 참조하십시오.

• 예상되는 플레이어 수요에 맞게 플릿의 호스팅 용량을 관리하려면 Auto Scaling을 사용합니다.GameLift 플릿 용량 조정 (p. 115) 단원을 참조하십시오.

• (선택 사항) 게임에 대한 사용자 지정 매치메이킹 규칙을 사용하여 FlexMatch 매치메이커를 설정합니다. FlexMatch 통합 로드맵 (p. 68) 단원에서 자세히 알아보십시오.

3. GameLift 호스팅 게임 세션에 참가하도록 게임 클라이언트를 준비합니다.

• GameLift에 사용할 고유한 플레이어 ID를 할당하는 메커니즘을 생성합니다.• 새 게임 세션에 대한 요청을 GameLift에 보내고 기존 게임 세션에서 플레이어를 위한 공간을 예약하

도록 클라이언트 서비스를 설정합니다. 게임 클라이언트에 Amazon GameLift 추가 (p. 47) 단원을참조하십시오.

• (선택 사항) 클라이언트 서비스가 FlexMatch를 사용하여 플레이어 매치메이킹을 요청하도록 활성화합니다. FlexMatch 통합 로드맵 (p. 68) 단원에서 자세히 알아보십시오.

• 게임 클라이언트를 활성화하여 Realtime 서버에서 실행하고 호스팅되는 게임 세션과 직접 연결하고,메시징을 통해 정보를 교환합니다. Realtime 서버에 대해 게임 클라이언트 통합 (p. 58) 단원을 참조하십시오.

GameLift 및 Realtime 서버를 게임 구성 요소에 완전히 통합한 후에는 장기적으로 최적의 가용성 및 성능을제공하도록 게임 서버 플릿을 관리하는 것이 관건입니다. GameLift 도구를 사용하여 플레이어가 얼마나 빠르고 효율적으로 게임 세션을 찾고 연결할 수 있는지, 시간 경과에 따른 게임 서버의 전체 성능 및 플레이어사용 패턴과 같은 사항을 추적합니다. 콘솔에서 게임 데이터 보기 (p. 164) 단원을 참조하십시오.

버전33

Amazon GameLift 개발자 안내서사용자 지정 게임 서버에 게임 통합

Amazon GameLift 게임 준비 중멀티플레이어 게임을 관리형 GameLift 서비스에서 시작하고 실행하려면 해당 게임과 GameLift 서비스 사이의 통신을 설정하는 몇 가지 작업을 수행해야 합니다. 이 단원의 가이드에서는 사용자 지정 게임 서버를 배포하든, GameLift 구축 완료 Realtime 서버를 사용하든 게임을 GameLift와 통합하는 방법과 FlexMatch을 사용하여 매치메이킹 서비스를 추가하는 방법을 상세하게 설명합니다.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

주제• 사용자 지정 게임 서버에 게임 통합 (p. 34)• 게임에 Amazon GameLiftRealtime 서버 통합 (p. 58)• FlexMatch 매치메이킹 추가 (p. 68)

사용자 지정 게임 서버에 게임 통합Amazon GameLift는 멀티플레이어 게임과 사용자 지정 게임 서버를 관리형 GameLift 서비스에서 실행하도록 준비할 때 필요한 전체 도구 세트를 제공합니다. GameLift SDK에는 게임 클라이언트와 서버가 GameLift 서비스와 통신하는 데 필요한 라이브러리가 있습니다. SDK는 직접 다운로드할 수 있으며,Amazon Lumberyard 게임 엔진에도 포함되어 있습니다. SDK와 다운로드 경로에 대한 자세한 내용은Amazon GameLift SDK (p. 23) 단원을 참조하십시오.

이 단원의 주제에서는 GameLift에서 배포하기 전에 게임 클라이언트와 게임 서버에 필요한 GameLift 기능을추가하는 방법을 상세히 설명합니다. GameLift에서 게임을 시작하고 실행하는 완전한 로드맵은 사용자 지정서버 시작하기 (p. 31) 단원을 참조하십시오.

주제• 게임 엔진 및 Amazon GameLift (p. 34)• Amazon GameLift에 게임 서버 통합 (p. 42)• Amazon GameLift에 게임 클라이언트 통합 (p. 46)• Amazon GameLift와 게임 클라이언트/서버 상호 작용 (p. 51)• 통합 테스트 (p. 53)

게임 엔진 및 Amazon GameLiftC++ 또는 C# 라이브러리를 지원하는 가장 많이 사용되는 게임 엔진(Amazon Lumberyard, Unreal Engine 및Unity 등)과 함께 관리형 GameLift 서비스를 사용할 수 있습니다. 게임에 필요한 버전을 빌드합니다. 빌드 지침 및 최소 요구 사항에 대해서는 각 버전의 README 파일을 참조하십시오. 사용 가능한 GameLift SDK, 지원되는 개발 플랫폼, 운영 체제에 대한 자세한 내용은 게임 서버의 Amazon GameLift SDK (p. 23) 단원을 참조하십시오.

이 주제에서 제공되는 엔진별 정보 외에도 다음 주제에 나오는 GameLift를 게임 서버, 클라이언트 및 서비스에 통합하는 작업과 관련된 추가 도움말을 참조하십시오.

버전34

Amazon GameLift 개발자 안내서게임 엔진 및 GameLift

• 사용자 지정 서버 시작하기 (p. 31) – 성공적으로 GameLift를 게임에 통합하고 호스팅 리소스를 설정하기위한 여섯 단계로 구성된 워크플로입니다.

• 게임 서버에 Amazon GameLift 추가 (p. 42) – GameLift를 게임 서버에 통합하는 방법에 대한 자세한 지침입니다.

• 게임 클라이언트에 Amazon GameLift 추가 (p. 47) 게임 세션을 생성하고 플레이어를 게임에 참가시키는 등 게임과의 통합에 대한 자세한 지침. –

Amazon LumberyardLumberyard 제품에는 GameLift SDK 및 기능이 완전히 통합되어 있습니다.

게임 서버

C++용 GameLift Server SDK (p. 244)를 사용하여 GameLift에서 호스팅할 게임 서버를 준비합니다. 필요한기능을 게임 서버에 통합하는 방법에 대한 도움을 얻으려면 게임 서버에 Amazon GameLift 추가 (p. 42)를참조하십시오.

게임 클라이언트와 서비스

게임 클라이언트 및/또는 게임 서비스가 사용할 수 있는 게임 세션 찾기 또는 새 게임 세션 생성 등 GameLift서비스와 상호 작용하고 게임에 플레이어를 추가할 수 있습니다. 핵심 클라이언트 기능은 C++용 AWSSDK에서 제공됩니다. GameLift를 Lumberyard 게임 프로젝트에 통합하려면 Amazon Lumberyard 게임 클라이언트에 GameLift 추가 (p. 36) 및 게임 클라이언트에 Amazon GameLift 추가 (p. 47) 단원을 참조하십시오.

Unreal Engine게임 서버

Unreal Engine용 GameLift Server SDK (p. 273)를 프로젝트에 추가하고 필요한 서버 기능을 구현하여GameLift에서 호스팅할 게임 서버를 준비합니다. Unreal Engine 플러그인 설정 및 GameLift 코드 추가에 대한 도움말은 Unreal Engine 게임 서버 프로젝트에 Amazon GameLift 추가 (p. 36) 단원을 참조하십시오.

게임 클라이언트와 서비스

게임 클라이언트 및/또는 게임 서비스가 사용할 수 있는 게임 세션 찾기 또는 새 게임 세션 생성 등 GameLift서비스와 상호 작용하고 게임에 플레이어를 추가할 수 있습니다. 핵심 클라이언트 기능은 C++용 AWSSDK에서 제공됩니다. GameLift를 Unreal Engine 게임 프로젝트에 통합하려면 게임 클라이언트에 AmazonGameLift 추가 (p. 47) 단원을 참조하십시오.

Unity게임 서버

C#용 GameLift Server SDK (p. 259)를 프로젝트에 추가하고 필요한 서버 기능을 구현하여 GameLift에서호스팅할 게임 서버를 준비합니다. Unity를 통한 설정 및 GameLift 코드 추가에 대한 도움말은 Unity: 게임 서버 프로젝트에 Amazon GameLift 추가 (p. 40) 단원을 참조하십시오.

게임 클라이언트와 서비스

게임 클라이언트 및/또는 게임 서비스가 사용할 수 있는 게임 세션 찾기 또는 새 게임 세션 생성 등 GameLift서비스와 상호 작용하고 게임에 플레이어를 추가할 수 있습니다. 핵심 클라이언트 기능은 .NET용 AWSSDK에서 제공됩니다. GameLift를 Unity 게임 프로젝트에 통합하려면 게임 클라이언트에 Amazon GameLift추가 (p. 47) 단원을 참조하십시오.

버전35

Amazon GameLift 개발자 안내서게임 엔진 및 GameLift

기타 엔진게임 서버 및 클라이언트에 사용할 수 있는 전체 GameLift SDK 목록은 the section called “GameLiftSDK” (p. 23) 단원을 참조하십시오.

Amazon Lumberyard 게임 클라이언트에 GameLift 추가사용할 플릿의 세부 정보, 액세스 자격 증명, 연결 방법 등을 포함해 관리형 GameLift 서비스와 통신할 수 있도록 모든 게임 클라이언트를 구성해야 합니다. 가장 간단한 방법은 아래 콘솔 변수를 설정하는 배치 파일을생성하는 것입니다.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

게임 클라이언트를 준비하려면

1. 배치 파일에서 다음 콘솔 변수가 게임 클라이언트를 시작하도록 설정합니다. 다음 변수가 \dev\Code\CryEngine\CryNetwork\Lobby\LobbyCvars에 추가되었습니다.

• gamelift_aws_access_key = AWS 계정 내 "플레이어" 액세스 권한이 있는 사용자에 대한 IAM 보안 자격 증명 (p. 20)의 일부

• gamelift_aws_secret_key = AWS 계정 내 "플레이어" 액세스 권한이 있는 사용자에 대한 IAM 보안 자격 증명 (p. 20)의 일부

• gamelift_fleet_id = 연결할 활성 플릿의 고유한 ID• gamelift_alias_id = 연결할 플릿을 가리키는 별칭의 고유 ID• (선택 사항) gamelift_endpoint = GameLift 서버 엔드포인트입니다. 기본값은 gamelift.us-west-2.amazonaws.com입니다.

• (선택 사항) gamelift_aws_region = AWS 리전 이름. 기본 값은 us-west-2입니다.• (선택 사항) gamelift_player_id = 플레이어를 고유하게 식별 (p. 50)하기 위해 생성하는 ID

2. 다음 명령을 추가하여 서버 브라우저를 시작합니다.

GameLift 플릿 ID(gamelift_fleet_id)를 사용할 때 이 패턴을 따릅니다.

.\Bin64\[your game executable] +gamelift_fleet_id [your fleet ID] +gamelift_aws_region us-west-2 +gamelift_aws_access_key [your AWS access key] +gamelift_aws_secret_key [your AWS secret key] +sv_port 64091 +map [map name]

GameLift 별칭 ID(gamelift_alias_id)를 사용할 때 이 패턴을 따릅니다.

.\Bin64\[your game executable] +gamelift_alias_id [your alias ID] +gamelift_aws_region us-west-2 +gamelift_aws_access_key [your AWS access key] +gamelift_aws_secret_key [your AWS secret key] +sv_port 64091 +map [map name]

Unreal Engine 게임 서버 프로젝트에 Amazon GameLift 추가이 주제는 게임 서버 프로젝트에 Unreal Engine용 GameLift Server SDK 플러그인을 설정 및 사용하는 데 도움이 됩니다. 사용 중인 운영 체제를 GameLift 서비스에서 지원하는지 여부가 확실하지 않는 경우 사용자 지정 게임 서버 (p. 26) 단원을 참조하십시오.

Unreal Engine Server SDK 플러그인 설정다음 단계를 따라 Unreal Engine용 GameLift Server SDK 플러그인을 게임 서버 프로젝트에 사용할 준비를합니다.

버전36

Amazon GameLift 개발자 안내서게임 엔진 및 GameLift

Unreal Engine용 GameLift SDK 플러그인을 설정하려면

1. GameLift Server SDK를 다운로드합니다. 게임 시스템 요구 사항이 지원되는지 확인하려면 AmazonGameLift SDK (p. 23) 단원을 참조하십시오.

2. C++ Server SDK for Unreal 라이브러리를 빌드합니다. SDK 다운로드에는 C++용 소스 코드(GameLift_<release date>\GameLift-SDK-Release-<version>\GameLift-cpp-ServerSDK-<version> 참조)가 포함되어 있습니다. SDK를 빌드하기 전에 이 디렉터리에서 최소 요구 사항 및 추가 정보에 대한 README 파일을 선택하십시오.

SDK 라이브러리를 빌드하려면 GameLift-cpp-ServerSDK-<version> 디렉터리로 이동하고 플래그-DBUILD_FOR_UNREAL를 true로 설정하여 소스를 컴파일합니다. 다음 지침에서는 cmake를 사용하여 컴파일하는 방법을 보여 줍니다.

Linux 사용자의 경우:

mkdir outcd outcmake -DBUILD_FOR_UNREAL=1 ..make

다음의 바이너리 파일이 생성됩니다.

• out/prefix/lib/libaws-cpp-sdk-gamelift-server.so

Windows 사용자의 경우:

mkdir outcd outcmake -G "Visual Studio 15 2017 Win64" -DBUILD_FOR_UNREAL=1 ..msbuild ALL_BUILD.vcxproj /p:Configuration=Release

다음의 바이너리 파일이 생성됩니다.

• out\prefix\bin\aws-cpp-sdk-gamelift-server.dll

• out\prefix\lib\aws-cpp-sdk-gamelift-server.lib

최소 요구 사항 및 빌드 옵션을 비롯해 C++ SDK 빌드에 대한 자세한 내용은 다운로드에 포함된README.md 파일을 참조하십시오.

3. GameLift 플러그인 파일에 바이너리를 추가합니다. 작업 중인 UE4의 플러그인 버전 디렉터리를 엽니다(예: GameLift-SDK-Release-3.3.0\GameLift-Unreal-plugin-3.3.0\UE4.21.1\GameLiftServerSDK). 2단계에서 생성한 바이너리 파일을 Unreal 플러그인의 ThirdParty 디렉터리에 복사합니다.

Linux의 경우 다음 경로를 사용합니다.

• .../ThirdParty/GameLiftServerSDK/Linux/x86_64-unknown-linux-gnu/aws-cpp-sdk-gamelift-server.so

Windows의 경우 다음 경로를 사용합니다.

• ...\ThirdParty\GameLiftServerSDK\Win64\aws-cpp-sdk-gamelift-server.dll

• ...\ThirdParty\GameLiftServerSDK\Win64\aws-cpp-sdk-gamelift-server.lib

4. GameLift 플러그인을 프로젝트로 가져옵니다. Unreal Engine으로 플러그인을 가져오는 방법은 여러 가지가 있습니다. 다음 방법은 Unreal Editor가 필요하지 않습니다.

버전37

Amazon GameLift 개발자 안내서게임 엔진 및 GameLift

a. 플러그인을 게임 프로젝트에 추가합니다. 플러그인 파일은 생성된 바이너리 파일을 비롯해 플러그인의 GameLiftServerSDK 디렉터리에 위치하는 모든 파일을 포함해야 합니다.

b. 플러그인을 게임의 .uproject 파일에 추가합니다.

"Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true }]

c. 플러그인 이름을 게임의 ModuleRules 목록에 종속성으로 추가합니다. 다음 예제에서는 GameLift플러그인이 추가된 모듈 이름의 샘플 목록을 보여줍니다.

using UnrealBuildTool;

public class MyAwesomeGame : ModuleRules{ public MyAwesomeGame(TargetInfo Target) { PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }); }}

GameLift 코드 추가GameLift 기능 추가에 대한 자세한 내용은 다음 주제를 참조하십시오.

• 게임 서버에 Amazon GameLift 추가 (p. 42)• Amazon GameLiftUnreal Engine용 Server API Reference (p. 273)

GameLift 고유 코드를 Unreal Engine 게임 프로젝트에 추가할 때 프리프로세서 플래그WITH_GAMELIFT=1을 사용하여 코드를 묶습니다. 이 플래그를 사용하면 서버 빌드만 GameLift 백플레인API를 호출할 수 있으며, 사용자가 생성할 수도 있는 빌드 대상 유형과 상관없이 올바르게 실행되는 코드를작성할 수 있습니다.

WITH_GAMELIFT=1 플래그로 묶인 코드는 다음이 true인 경우에만 처리됩니다.

• 플러그인이 GameLift Server SDK 바이너리 파일을 찾았습니다.• 빌드가 게임 서버: Target.Type == TargetRules.TargetType.Server

다음 코드 조각은 GameLift를 사용하여 Unreal Engine 게임 서버를 초기화하는 방법을 보여줍니다.

//This is an example of a simple integration with GameLift server SDK that makes game server //processes go active on Amazon GameLift

// Include game project files. "GameLiftFPS" is a sample game name, replace with file names from your own game project#include "GameLiftFPSGameMode.h"#include "GameLiftFPS.h"#include "Engine.h"#include "EngineGlobals.h"#include "GameLiftFPSHUD.h"#include "GameLiftFPSCharacter.h"

버전38

Amazon GameLift 개발자 안내서게임 엔진 및 GameLift

#include "GameLiftServerSDK.h"

AGameLiftFPSGameMode::AGameLiftFPSGameMode() : Super(){

//Let's run this code only if GAMELIFT is enabled. Only with Server targets!#if WITH_GAMELIFT

//Getting the module first. FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));

//InitSDK establishes a local connection with GameLift's agent to enable communication. gameLiftSdkModule->InitSDK();

//Respond to new game session activation request. GameLift sends activation request //to the game server along with a game session object containing game properties //and other settings. Once the game server is ready to receive player connections, //invoke GameLiftServerAPI.ActivateGameSession() auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession) { gameLiftSdkModule->ActivateGameSession(); }; FProcessParameters* params = new FProcessParameters(); params->OnStartGameSession.BindLambda(onGameSession);

//OnProcessTerminate callback. GameLift invokes this before shutting down the instance //that is hosting this game server to give it time to gracefully shut down on its own. //In this example, we simply tell GameLift we are indeed going to shut down. params->OnTerminate.BindLambda([=](){gameLiftSdkModule->ProcessEnding();});

//HealthCheck callback. GameLift invokes this callback about every 60 seconds. By default, //GameLift API automatically responds 'true'. A game can optionally perform checks on //dependencies and such and report status based on this info. If no response is received //within 60 seconds, health status is recorded as 'false'. //In this example, we're always healthy! params->OnHealthCheck.BindLambda([](){return true; });

//Here, the game server tells GameLift what port it is listening on for incoming player //connections. In this example, the port is hardcoded for simplicity. Since active game //that are on the same instance must have unique ports, you may want to assign port values //from a range, such as: //const int32 port = FURL::UrlConfig.DefaultPort; //params->port; params->port = 7777;

//Here, the game server tells GameLift what set of files to upload when the game session //ends. GameLift uploads everything specified here for the developers to fetch later. TArray<FString> logfiles; logfiles.Add(TEXT("aLogFile.txt")); params->logParameters = logfiles;

//Call ProcessReady to tell GameLift this game server is ready to receive game sessions! gameLiftSdkModule->ProcessReady(*params);#endif}

버전39

Amazon GameLift 개발자 안내서게임 엔진 및 GameLift

Unity: 게임 서버 프로젝트에 Amazon GameLift 추가이 주제는 Unity 게임 서버 프로젝트에서 GameLift C# Server SDK를 설정하는 데 도움이 됩니다. 관리형GameLift 서비스가 사용 중인 운영 체제를 지원하는지 확실하지 않은 경우 사용자 지정 게임 서버 (p. 26) 단원을 참조하십시오.

Unity용 C# Server SDK 설정다음 단계를 따라 C#용 GameLift Server SDK를 빌드하고 Unity 게임 서버 프로젝트에 추가합니다.

Unity용 GameLift Server SDK를 설정하려면

1. GameLift Server SDK를 다운로드합니다. 게임 시스템 요구 사항이 지원되는지 확인하려면 AmazonGameLift SDK (p. 23) 단원을 참조하십시오.

2. C# SDK 라이브러리를 빌드합니다. README.md 최소 요구 사항과 추가 빌드 옵션은 C# Server SDK의 파일을 참조하십시오. IDE에서 사용할 솔루션 파일을 로드합니다. SDK 라이브러리를 생성하려면NuGet 패키지를 복원하고 솔루션을 빌드합니다.

3. 구성 설정을 확인합니다. Unity Editor에서 [File], [Build Settings], [Player Settings]로 이동합니다. OtherSettings(기타 설정), Configuration(구성)에서 다음 설정을 확인합니다.

• 스크립팅 실행 시간 버전: 사용 중인 .NET 솔루션으로 설정합니다.4. GameLift 라이브러리를 Unity에 추가합니다. Unity Editor에서 빌드를 통해 생성된 라이브러리를 프로젝

트의 Assets/Plugins 디렉터리로 가져옵니다. 사용 중인 SDK 버전에 대한 전체 라이브러리 목록은README.md 파일을 참조하십시오.

GameLift 서버 코드 추가GameLift 기능 추가에 대한 자세한 내용은 다음 주제를 참조하십시오.

• 게임 서버에 Amazon GameLift 추가 (p. 42)• Amazon GameLiftServer API(C#) Reference (p. 259)

다음 코드 예제는 MonoBehavior를 사용하여 GameLift를 사용한 간단한 게임 서버 초기화를 보여줍니다.

using UnityEngine;using Aws.GameLift.Server;using System.Collections.Generic;

public class GameLiftServerExampleBehavior : MonoBehaviour{ //This is an example of a simple integration with GameLift server SDK that makes game server //processes go active on Amazon GameLift public void Start() { //Set the port that your game service is listening on for incoming player connections (hard-coded here for simplicity) var listeningPort = 7777;

//InitSDK establishes a local connection with the Amazon GameLift agent to enable //further communication. var initSDKOutcome = GameLiftServerAPI.InitSDK(); if (initSDKOutcome.Success) { ProcessParameters processParameters = new ProcessParameters( (gameSession) => { //Respond to new game session activation request. GameLift sends activation request

버전40

Amazon GameLift 개발자 안내서게임 엔진 및 GameLift

//to the game server along with a game session object containing game properties //and other settings. Once the game server is ready to receive player connections, //invoke GameLiftServerAPI.ActivateGameSession() GameLiftServerAPI.ActivateGameSession(); }, () => { //OnProcessTerminate callback. GameLift invokes this callback before shutting down //an instance hosting this game server. It gives this game server a chance to save //its state, communicate with services, etc., before being shut down. //In this case, we simply tell GameLift we are indeed going to shut down. GameLiftServerAPI.ProcessEnding(); }, () => { //This is the HealthCheck callback. //GameLift invokes this callback every 60 seconds or so. //Here, a game server might want to check the health of dependencies and such. //Simply return true if healthy, false otherwise. //The game server has 60 seconds to respond with its health status. //GameLift will default to 'false' if the game server doesn't respond in time. //In this case, we're always healthy! return true; }, //Here, the game server tells GameLift what port it is listening on for incoming player //connections. In this example, the port is hardcoded for simplicity. Active game //that are on the same instance must have unique ports. listeningPort, new LogParameters(new List<string>() { //Here, the game server tells GameLift what set of files to upload when the game session ends. //GameLift uploads everything specified here for the developers to fetch later. "/local/game/logs/myserver.log" }));

//Calling ProcessReady tells GameLift this game server is ready to receive incoming game sessions! var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters); if (processReadyOutcome.Success) { print("ProcessReady success."); } else { print("ProcessReady failure : " + processReadyOutcome.Error.ToString()); } } else { print("InitSDK failure : " + initSDKOutcome.Error.ToString()); } }

void OnApplicationQuit() { //Make sure to call GameLiftServerAPI.Destroy() when the application quits. //This resets the local connection with GameLift's agent.

버전41

Amazon GameLift 개발자 안내서게임 서버 통합

GameLiftServerAPI.Destroy(); }}

Amazon GameLift에 게임 서버 통합이 단원의 주제는 관리형 GameLift를 멀티플레이어 게임 서버에 통합하는 방법을 설명합니다.

GameLift를 게임 서버에 추가하는 것은 사용자 지정 서버 시작하기 (p. 31) 로드맵의 2단계에 해당합니다. 이섹션의 통합 주제는 개발자가 AWS 계정을 이미 생성했고 기존 게임 서버 프로젝트를 가지고 있는 것으로 가정합니다.

주제

• 게임 서버에 Amazon GameLift 추가 (p. 42)• C++용 GameLift Server API reference (p. 244)• Amazon GameLiftServer API(C#) Reference (p. 259)• Amazon GameLiftUnreal Engine용 Server API Reference (p. 273)

게임 서버에 Amazon GameLift 추가사용자 지정 게임 서버를 GameLift 인스턴스에서 배포한 후 실행했으면 관리형 GameLift 서비스와 통신해야 합니다. 각 게임 서버 프로세스는 GameLift 서비스에서 트리거될 때 이벤트에 응답하고 서버 프로세스 상태 및 필요할 경우 플레이어 연결에 관한 정보를 지속적으로 GameLift에 제공해야 합니다. 자세한 내용은Amazon GameLift와 게임 클라이언트/서버 상호 작용 (p. 51) 단원을 참조하십시오.

GameLift Server SDK를 게임 서버에 통합합니다. Amazon GameLift SDK (p. 23) 단원을 참조하여 ServerSDK에 대해 자세히 알아보고 최신 버전을 다운로드하십시오. Server SDK는 다양한 언어로 제공됩니다. 자세한 내용은 다음 API 참조를 참조하십시오.

• C++ Server API Reference (p. 244)• C# Server API Reference (p. 259)• Unreal Engine Plugin API Reference (p. 273)

GameLift를 게임 서버에 통합하려면 게임 서버 프로젝트에 GameLift Server SDK를 추가하고 이 주제에서설명한 기본 기능을 구축합니다.

서버 프로세스 준비GameLift 클라이언트를 초기화하고 해당 서버가 게임 세션을 호스팅할 준비가 되었음을 GameLift 서비스에알리는 코드를 추가합니다. 이 코드는 시작 시점 등 어떠한 GameLift 종속 코드보다 앞서 자동으로 실행되어야 합니다.

Note

서버 API 작업 이름은 사용 가능한 모든 언어에서 동일합니다.

1. Server SDK를 초기화합니다. InitSdk()을 호출합니다.2. GameLift에 게임 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. GameLift 인스턴스

에서 시작되는 각 서버 프로세스는 다음 정보를 사용하여 ProcessReady()를 호출해야 합니다.

• 서버 프로세스에서 사용 중인 포트 번호. 이 포트 번호는 IP 주소와 함께 게임 세션 객체에 저장되며,이 객체는 게임 클라이언트가 활성 게임 세션에 연결할 때 사용합니다.

• 활성 게임 세션 도중 생성되며 GameLift가 보유하도록 하는 파일(예: 게임 세션 로그)의 위치. 게임 세션을 호스팅할 때 서버 프로세스에 의해 생성된 파일은 GameLift 인스턴스에 저장되지만 인스턴스가

버전42

Amazon GameLift 개발자 안내서게임 서버 통합

종료되면 손실됩니다. GameLift는 요청된 이러한 파일을 업로드합니다. 이러한 파일이 업로드되면GameLift 콘솔을 통해 또는 GameLift API GetGameSessionLogUrl()을 호출하여 액세스할 수 있습니다. 플릿이 인스턴스당 여러 동시 서버 프로세스를 실행하도록 구성된 경우, 게임 세션을 고유하게 식별하는 파일 이름 지정 체계를 사용하는 것이 좋습니다.

• GameLift가 서버 프로세스에서 특정 작업을 트리거하기 위해 사용하는 콜백 함수의 이름. 이러한 함수 구현에 대한 자세한 내용은 다음 섹션 및 ProcessParameters (p. 257)에 나와 있습니다.• onHealthCheck(필수): 서버 프로세스에 정상 상태 보고를 요청하기 위해 정기적으로 호출됩니다.• onStartGameSession(필수): GameLift 서비스가 새 게임 세션 시작 요청(CreateGameSession())

을 수신하면 호출됩니다.• onProcessTerminate(필수): GameLift 서비스가 서버 프로세스의 종료를 강제하여 서버 프로세

스를 정상적으로 종료해야 할 때 호출됩니다.• onUpdateGameSession(선택 사항): GameLift 서비스가 업데이트된 게임 세션 객체를 게임 서

버에 전달하거나 매치 채우기 요청에 대한 상태 업데이트를 제공할 때 호출됩니다. 이 콜백은FlexMatch 채우기 (p. 15) 기능을 사용 중인 경우에만 필요합니다. 게임 서버의 매치 데이터 업데이트 (p. 80)에서 이 콜백 함수를 구현하는 방법에 대해 자세히 알아보십시오.

플릿을 구성하는 방식에 따라 하나의 플릿 인스턴스에 여러 서버 프로세스가 동시 실행될 수 있습니다.인스턴스에서 한 서버 프로세스가 ProcessReady()를 성공적으로 호출하면 GameLift 서비스가 인스턴스의 상태를 ACTIVE로 설정합니다.

다른 AWS 서비스의 리소스에 안전하게 액세스하도록 게임 서버를 설정할 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 플릿에서 AWS 리소스에 액세스 (p. 45) 단원을 참조하십시오.

서버 프로세스 상태 보고

코드를 추가하여 콜백 함수 onHealthCheck()를 구현합니다. 이 함수는 서버 프로세스로부터 상태 지표를수집하기 위해 GameLift 서비스가 정기적으로 호출합니다. 상태 확인에 대한 서버 프로세스의 응답은 이진,즉 정상 또는 비정상으로 구성됩니다. 이 콜백 함수를 구현하려면 다음을 수행하십시오.

• 게임의 특성에 걸맞은 기준을 적용하여 서버 프로세스의 상태를 평가합니다. 예를 들어, 외부 종속성에 오류가 있거나 메모리 용량 등의 측정치가 정의된 한도를 벗어나는 경우 서버 프로세스의 상태를 비정상으로보고할 수 있습니다.

• 상태 평가를 완료하고 60초 내에 콜백에 응답합니다. GameLift 서비스가 60초 내에 응답을 수신하지 못하면 자동으로 서버 프로세스를 비정상으로 간주합니다.

• 정상에 대해 true, 비정상에 대해 false 부울 값을 반환합니다.

상태 확인 콜백을 구현하지 않으면 GameLift 서비스가 서버 프로세스를 항상 정상으로 간주합니다. 단 프로세스가 응답하지 않을 경우 비정상으로 간주합니다.

서버 프로세스 상태는 GameLift가 효율적으로 비정상 프로세스를 종료하고 리소스를 확보하는 데 사용됩니다. 서버 프로세스가 계속 비정상으로 보고되거나 세 번 연속 상태 확인에 응답이 없으면 GameLift 서비스가해당 프로세스를 종료하고 새 프로세스를 시작할 수 있습니다. 플릿의 서버 프로세스 상태 지표는 GameLift콘솔에서 수집되고 표시 가능합니다.

게임 세션 시작

코드를 추가하여 콜백 함수 onStartGameSession를 구현합니다. 이 함수는 새 게임 세션을 생성할 때GameLift 서비스에 의해 호출되며, 이는 CreateGameSession() 요청에 대한 응답 또는 게임 세션 배치나 매치메이킹 활동의 일환으로 발생할 수 있습니다.

onStartGameSession 함수는 GameLift 서비스가 제공한 GameSession 객체를 입력 파라미터로 사용합니다. 이 객체에는 게임 세션 ID와 요청된 게임 세션을 정의하는 기타 정보가 포함됩니다. 함수는 다음 작업을완수해야 합니다.

버전43

Amazon GameLift 개발자 안내서게임 서버 통합

• 새 게임 세션을 만드는 데 필요한 모든 조치를 취합니다. 새 게임 세션은 지정된 최대 플레이어 수에 적합한 슬롯을 만들고 게임 세션 이름과 ID를 참조하는 등 GameSession 객체를 반영해야 합니다. GameLift서비스는 게임 클라이언트에 동일한 게임 세션 정보를 제공합니다.

• 요청을 통해 게임 클라이언트가 지정한 게임 속성 값을 처리합니다. 게임 속성은 GameSession 객체에 포함됩니다.

• 새 게임 세션이 플레이어를 수락할 준비가 된 후에는 서버 프로세스가 서버 API 작업ActivateGameSession()을 호출해야 합니다. 성공적인 호출에 대한 응답으로 GameLift 서비스가 게임세션 상태를 ACTIVE로 변경합니다.

TLS 인증서 검색TLS 인증서 생성이 활성화된 플릿에서 게임 서버가 실행 중인 경우 TLS 인증서를 검색할 수 있으며 이 인증서를 사용하여 게임 클라이언트와 보안 연결을 설정하고 클라이언트/서버 통신을 암호화할 수 있습니다. 인증서 복사본이 인스턴스에 저장됩니다. 파일 위치를 가져오려면 the section called“GetInstanceCertificate()” (p. 247)를 호출합니다.

새로운 플레이어 확인코드를 추가하여 플레이어의 GameLift 서비스 연결 요청을 확인합니다. 이 코드는 새로운 플레이어가 서버프로세스에 연결을 시도할 때마다, 그리고 연결을 수락하기 전에 실행해야 합니다.

게임 클라이언트의 연결 요청은 플레이어 세션 ID를 참조해야 합니다. 이 ID는 GameLift 서비스에서 발급하며, 게임 세션에 플레이어 슬롯을 예약하는 데 사용됩니다(CreatePlayerSession()에 대한 AWS SDK 호출의응답). 게임 서버는 참조된 플레이어 세션 ID로 AcceptPlayerSession()을 호출하여 연결 요청이 승인된플레이어로부터 오는지 확인해야 합니다.

플레이어 세션 ID를 GameLift 서비스에서 확인하면 서버 프로세스가 연결을 수락하고 플레이어를 게임 세션에 참여시킬 수 있습니다. 플레이어 세션 ID를 GameLift 서비스에서 확인하지 못하면 서버 프로세스가 연결을 거부해야 합니다.

게임 세션과 연결된 플레이어 데이터를 가져오려면 DescribePlayerSessions()를 호출하십시오.

플레이어 세션 종료 보고플레이어와 게임 세션 연결이 해제되면 GameLift 서비스에 알리도록 코드를 추가합니다. 이 코드는 서버 프로세스가 끊어진 연결을 감지할 때마다 실행되어야 합니다.

끊어진 연결을 처리하는 코드에서, 끊어진 연결에 해당하는 플레이어 세션 ID로 서버 API 작업RemovePlayerSession()에 대한 호출을 추가합니다. 이 알림을 통해 GameLift 서비스에서 현재 게임 세션 내 플레이어 수와 가용 슬롯 수를 정확하게 추적할 수 있습니다.

게임 세션 중지게임 세션이 종료되면 GameLift 서비스에 알리도록 코드를 추가합니다. 알림을 통해 GameLift 서비스에서서버 프로세스를 새로운 게임 세션에 사용할 수 있는지 추적할 수 있습니다. 이 코드를 일반 게임 세션 종료프로세스에 추가해야 합니다.

게임 세션을 중지하려는 코드 끝에 서버 API 작업 TerminateGameSession()에 대한 호출을 추가합니다.이 알림을 성공적으로 수신한 GameLift 서비스는 게임 세션 상태를 TERMINATED로 변경하고 새 게임 세션을 즉시 시작할 수 있습니다.

Note

게임 세션을 중지한 직후 서버 프로세스가 종료되면 서버 API 작업 ProcessEnding()을 호출하여게임 세션과 서버 프로세스를 모두 종료할 수 있습니다.

서버 프로세스 종료종료는 서버 프로세스 또는 GameLift 서비스에 의해 시작될 수 있습니다. 두 가지 시나리오를 처리하기 위해게임 서버 코드를 다음과 같이 변경하십시오.

버전44

Amazon GameLift 개발자 안내서게임 서버 통합

• 콜백 함수 onProcessTerminate()를 구현합니다. 이 함수는 게임 서버를 종료하는 코드를 호출해야 합니다. GameLift 서비스는 이 함수를 호출하여 일반적으로 서버 프로세스를 실행 중인 인스턴스를 종료하기 전에 서버 프로세스 종료를 시작합니다. 이러한 호출은 GameLift가 비정상적인 서버 프로세스를 종료하거나, 스팟 인스턴스가 중단되거나, 인스턴스 용량이 축소될 때 발생합니다. 이 호출을 수신한 후 서버프로세스는 몇 분(스팟 인스턴스 종료의 경우 2분) 이내에 대개 플레이어의 연결을 해제하고 게임 상태 데이터를 보존하고 기타 정리 작업을 수행합니다.

• 게임 서버 종료 코드에서 서버 API 작업 GetTerminationTime() (p. 247)을 호출합니다. GameLift가 서버프로세스를 종료하는 호출을 시작하면 GetTerminationTime()에서 예상 종료 시간을 반환합니다(가능한 경우). 이 정보를 사용하여 게임 상태 데이터 저장 또는 플레이어를 새 게임 세션으로 마이그레이션하는것과 같이 남은 시간에 수행할 수 있는 종료 활동을 결정할 수 있습니다.

• 게임 서버 종료 코드 시작 시 서버 API 작업 ProcessEnding() (p. 248)을 호출합니다. 이 호출은 서버 프로세스가 종료 중임을 GameLift 서비스에 알립니다. 이 알림을 수신한 GameLift 서비스는 서버 프로세스상태를 TERMINATED로 변경하고 필요에 따라 인스턴스의 리소스를 즉시 휴지통으로 이동할 수 있습니다. 이 경우 새 게임 세션도 프로세스로 전송됩니다. ProcessEnding()이 호출되면 프로세스를 종료해도안전합니다.

플릿에서 AWS 리소스에 액세스이 주제에서는 게임 서버 및 기타 애플리케이션이 관리형 GameLift 인스턴스에서 실행하는 동안 다른 AWS리소스와 직접 안전하게 통신하도록 설정하는 방법을 설명합니다. 게임 구조에 따라 게임 빌드의 애플리케이션 또는 스크립트에서 다른 AWS 서비스의 리소스와 통신하도록 해야 할 수 있습니다. 예를 들어, 다음 작업을 수행할 수 있습니다.

• Amazon CloudWatch 로그에 인스턴스 로그 데이터를 전송합니다.• CloudWatch 지표를 캡처하여 인스턴스 성능을 더 잘 파악합니다.• Amazon S3 계정에 원격으로 저장되는 중요한 정보(예: 암호)를 가져옵니다.• Amazon DynamoDB 또는 다른 데이터 스토리지 서비스에 저장되는 게임 데이터(예: 게임 모드, 인벤토리)

를 동적으로 읽고 씁니다.• Amazon SQS를 사용하여 인스턴스에 직접 신호를 전송합니다.• Amazon EC2에 배포되어 실행 중인 사용자 지정 리소스에 액세스합니다.

GameLift를 사용하여 게임 서버를 배포할 경우 플릿 및 인스턴스가 계정에 할당되지만 GameLift 서비스에서 플릿 및 인스턴스를 소유합니다. 따라서 AWS 계정에서 소유하는 AWS 리소스에 액세스하려면 권한을Amazon GameLift 서비스로 명시적으로 확장해야 합니다. 그리고 확장할 권한 범위를 상세하게 정의해야 합니다.

호스팅된 애플리케이션에서 AWS 리소스에 안전하게 액세스할 수 있는 두 가지 방법이 있습니다.

• AWS Identity and Access Management(IAM) 역할을 사용하여 리소스에 대한 권한을 Amazon GameLift로 확장합니다. 이 옵션은 Amazon S3 버킷, Amazon CloudWatch 지표, AWS Lambda 스크립트 등과 같이AWS 서비스에 직접 연결된 리소스에 액세스하는 데 유용합니다. 이 방법이 가장 간단하고 권장되는 방법입니다.

• Amazon Virtual Private Cloud(VPC) 피어링 연결을 사용하여 Amazon GameLift 플릿에서 AWS 리소스와안전하게 통신할 수 있도록 허용합니다. 이것은 일반적으로 사용되는 솔루션이 아닌 고급 기능입니다.

역할을 사용하여 GameLift로 액세스 권한 확장

GameLift 인스턴스에서 실행 중인 동안 게임 서버 또는 다른 애플리케이션에서 AWS 리소스에 액세스할 수있도록 하려면 다음 작업을 완료해야 합니다.

1. GameLift 서비스에 대한 IAM 역할을 설정합니다. Amazon GameLift 액세스를 위한 역할 설정 (p. 22)의지침에 따라 IAM 역할을 생성합니다. 역할은 AWS 리소스에 대한 액세스를 제한하기 위한 권한을 제시

버전45

Amazon GameLift 개발자 안내서게임 클라이언트 통합

하고, 역할을 맡을 수 있는 개체(이 경우는GameLift 서비스)를 지정합니다. 역할을 생성한 경우 플릿을생성할 때 필요하므로 새 역할의 Amazon 리소스 이름(ARN)을 기록해 둡니다.

2. GameLift 플릿에 서비스 역할을 연결합니다. 서비스 역할을 생성한 후 GameLift 인스턴스에서 실행하는동안 게임 서버 및 다른 애플리케이션이 서비스 역할을 맡을 수 있도록 해야 합니다. 이렇게 하려면 서비스 역할 ARN을 플릿에 제공해야 합니다. 그러면 플릿의 인스턴스에서 실행 중인 애플리케이션에서 역할을 맡고 액세스하는 데 필요한 자격 증명을 취득할 수 있습니다.

서비스 역할은 플릿 생성 중에만 지정할 수 있습니다. 플릿이 생성된 이후에는 역할 ARN을 추가하거나변경할 수 없습니다. ARN은 플릿별로 하나씩만 제공할 수 있습니다.

플릿에 서비스 역할 ARN을 제공하는 방법은 사용자 지정 게임 빌드용 GameLift 플릿 배포 (p. 101) 단원을 참조하십시오.

3. 서비스 역할을 맡을 애플리케이션에 코드를 추가합니다. GameLift 인스턴스에서 실행 중인 애플리케이션에서 IAM 역할(플릿과 연결된 경우)을 맡을 수 있습니다. 여기에는 게임 서버 및 다른 실행 파일(예: 설치 스크립트 및 데몬)이 포함됩니다. 애플리케이션은 플릿을 생성하고 빌드를 설치할 때, 서비스 프로세스 및 게임 세션을 시작 또는 중지할 때 또는 게임 이벤트에 응답하여 리소스에 액세스할 수 있습니다.

애플리케이션 코드에서 AWS 리소스에 액세스하기 전에 애플리케이션은 먼저 AWS Security TokenService API AssumeRole을 호출하고 플릿에 연결된 것과 동일한 서비스 역할 ARN을 지정하여 서비스역할을 맡아야 합니다. 이 작업은 애플리케이션에서 AWS 리소스에 액세스하는 데 필요한 임시 자격 증명 세트를 반환합니다. 임시 보안 자격 증명을 사용해 AWS 리소스에 대한 액세스 요청하기에 대해 자세히 알아봅니다.

Amazon GameLift 플릿에서 VPC 피어링 사용Amazon Virtual Private Cloud(VPC) 피어링을 사용하여 GameLift 인스턴스에서 실행 중인 애플리케이션과다른 AWS 리소스 간에 빠르고 안전한 통신을 설정할 수 있습니다. Amazon VPC는 사용자가 정의하고 AWS계정을 통해 관리하는 리소스 집합을 포함하는 가상 네트워크입니다. 각 GameLift 플릿에는 고유의 VPC가있습니다. VPC 피어링을 사용하여 플릿용 VPC와 다른 AWS 리소스용 VPC 사이의 직접 네트워크 연결을 설정할 수 있습니다.

예를 들어, 플레이어 인증, 소셜 네트워킹 등과 같이 게임을 지원하는 다양한 웹 서비스를 이용할 수 있습니다. 이러한 리소스에 대해 VPC를 설정한 다음 GameLift의 VPC 피어링을 사용하여 게임 서버에서 웹 서비스에 대한 직접 네트워크 호출을 생성하도록 허용할 수 있습니다. VPC 피어링을 사용하여 게임 서버 프로세스에서 호출하면 지연 시간이 최소화될 뿐 아니라 퍼블릭 인터넷을 통해 라우팅되지 않으므로 외부에 노출되지않습니다.

GameLift는 게임 서버에 대한 VPC 피어링 연결 설정 프로세스를 간소화합니다. 피어링 요청을 처리하고, 라우팅 테이블을 업데이트하고, 필요에 따라 연결을 구성합니다. 게임 서버에 대해 VPC 피어링을 설정하는 방법에 대한 자세한 내용은 GameLift에 대한 VPC 피어링 (p. 160) 단원을 참조하십시오.

자세한 내용은 Amazon의 가상 프라이빗 클라우드 및 VPC 피어링을 참조하십시오. 액세스 권한이 있는 모든AWS 계정의 VPC와 GameLift 플릿을 피어링할 수 있습니다.

Amazon GameLift에 게임 클라이언트 통합이 단원의 주제에서는 게임 클라이언트 또는 게임 서비스에 추가할 수 있는 관리형 GameLift 기능을 설명합니다. 게임 클라이언트 또는 서비스는 다음 작업을 처리해야 할 수 있습니다.

• GameLift 서비스에 활성 게임 세션에 대한 정보를 요청합니다.• 기존 게임 세션에 플레이어를 참가시킵니다.• 새 게임 세션을 생성하고 해당 세션에 플레이어를 참가시킵니다.• 기존 게임 세션에 대한 메타데이터를 변경합니다.

GameLift를 멀티플레이어 게임 클라이언트에 추가하는 것은 사용자 지정 서버 시작하기 (p. 31)의 5단계에해당합니다. 다음 지침은 개발자가 AWS 계정을 생성했고, GameLift 지원 게임 서버를 생성한 후 GameLift에

버전46

Amazon GameLift 개발자 안내서게임 클라이언트 통합

업로드했고, GameLift 도구(예: GameLift 콘솔)를 사용하여 게임 세션을 호스팅할 가상 플릿을 생성 및 구성했다고 가정합니다. 게임 클라이언트에 GameLift를 추가할 때 AWS 계정 자격 증명을 제공하고 클라이언트와 함께 사용할 집합을 지정할 수 있어야 합니다.

게임 클라이언트가 GameLift에서 실행 중인 게임 서버 및 GameLift 서비스와 어떻게 상호 작용하는지에 대한 자세한 내용은 Amazon GameLift와 게임 클라이언트/서버 상호 작용 (p. 51) 단원을 참조하십시오.

주제• 게임 클라이언트에 Amazon GameLift 추가 (p. 47)• 대기열을 사용하여 게임 세션 만들기 (p. 50)• 플레이어 ID 생성 (p. 50)

게임 클라이언트에 Amazon GameLift 추가관리형 GameLift 솔루션을 사용할 때 GameLift를 게임 세션 정보 획득, 새 게임 세션 생성 및/또는 플레이어의 게임 참가에 필요한 게임 구성 요소에 통합할 수 있습니다. 게임 아키텍처에 따라 이 기능은 게임 클라이언트에 배치되거나 플레이어 인증, 매치메이킹 또는 게임 배치와 같은 작업을 처리하는 게임 서비스에 배치될 수 있습니다.

이렇게 하려면 AWS SDK를 GameLift API와 함께 사용합니다. 이 SDK는 C++, C# 및 기타 여러 언어로 제공됩니다. AWS SDK, 버전 정보, 언어 지원에 대한 자세한 내용은 클라이언트 서비스 (p. 27) 단원을 참조하십시오. 이 주제의 대다수 링크는 GameLift 서비스 API 참조로 연결됩니다. 여기에는 GameLift 관련 작업에 대한 하위 수준 서비스 API가 설명되어 있고 언어별 참조 가이드에 대한 링크가 포함되어 있습니다.

Note

매치메이킹을 사용하여 플레이어를 게임에 배치하는 것에 관심이 있습니까? 게임 클라이언트 또는서비스에서 GameLift를 설정한 후 FlexMatch를 추가하여 플레이어를 매치하고 사용자 지정 게임세션을 생성합니다. 자세한 내용은 FlexMatch 매치메이킹 추가 (p. 68)에서 확인하십시오.

클라이언트 또는 서비스에서 GameLift 설정

GameLift 클라이언트를 초기화하고 GameLift와 함께 사용할 일부 키 설정을 저장하는 코드를 추가합니다.이 코드를 찾아 시작 시점 등 어떠한 GameLift 종속 코드보다 앞서 실행해야 합니다.

Note

GameLift Local을 사용하여 테스트용 게임 클라이언트를 설정하려면 통합 테스트 (p. 53) 단원을참조하십시오.

1. 기본 클라이언트 구성의 사용 여부를 결정하거나 사용자 지정 설정을 생성합니다. 사용자 지정 설정의경우, 사용자 지정 ClientConfiguration 객체를 생성해야 합니다. 객체 구조 및 기본 설정은 AWSClientConfiguration(C++)을 참조하십시오.

클라이언트 구성은 대상 리전과 엔드포인트를 지정합니다. 리전은 GameLift가 요청에 응답할 때 상호작용하는 리소스(플릿, 대기열, 매치메이커 등)를 결정합니다. 기본 클라이언트 구성은 미국 동부(버지니아 북부) 리전을 지정합니다. 다른 리전을 사용하려면 사용자 지정 구성을 생성합니다. 이름 및 엔드포인트 정보는 이 GameLift가 지원하는 AWS 리전 목록을 참조하십시오. 클라이언트 또는 서비스가 복수 리전에 대한 요청을 해야 하는 경우, 필요에 따라 각 대상 리전에 대해 별도의 클라이언트 구성 객체를 생성합니다. 언어별 예제는 AWS SDK로 리전 사용하기를 참조하십시오.

2. GameLift 클라이언트를 초기화합니다. 기본 설정의 클라이언트 구성 또는 사용자 지정 구성을 사용하여Aws::GameLift::GameLiftClient()(C++)를 호출합니다.

3. 각 플레이어의 고유 식별자를 생성하는 메커니즘을 추가합니다. GameLift는 게임 세션에 연결할 고유한플레이어 ID를 요구합니다. 자세한 내용은 플레이어 ID 생성 (p. 50) 단원을 참조하십시오.

4. GameLift에 연락할 때 사용할 다음 정보를 수집하고 저장합니다.

버전47

Amazon GameLift 개발자 안내서게임 클라이언트 통합

• 대상 플릿 – 대부분의 GameLift API 요청은 사용 가능한 게임 세션에 대한 정보를 가져오거나 게임 세션 및 플레이어 세션을 관리할 때와 같은 플릿을 지정해야 합니다. 최적의 대상 플릿을 정의하는 방법은 정적 플릿 설정 또는 디바이스의 물리적 위치를 기반으로 한 플릿 선택 등이 있습니다. 대상 플릿을지정하려면 대상 플릿을 가리키는 플릿 ID 또는 별칭 ID를 사용합니다. 플릿 별칭은 게임 클라이언트업데이트를 발행할 필요 없이 플레이어를 한 플릿에서 다른 플릿으로 전환할 수 있다는 점에서 매우유용합니다. (클라이언트 구성에서 지정된) 대상 플릿 및 리전의 조합은 플릿을 고유하게 식별합니다.

• Target queue – 게임이 다중 플릿 대기열을 사용하여 새 게임 세션을 배치하는 경우 사용할 대기열을지정할 수 있습니다. 대상 대기열을 지정하려면 대기열 이름을 사용합니다. 대기열은 리전에서 구성되어야 합니다.

• AWS 자격 증명 – GameLift 서비스에 대한 모든 호출은 게임을 호스팅하는 AWS 계정의 자격 증명을제공해야 합니다. 이는 GameLift 플릿을 설정하는 데 사용된 계정이며, 사용자는 권한 정책을 통해 플레이어에 대한 IAM 사용자 또는 사용자 그룹을 생성했어야 합니다. 플레이어 사용자 그룹에 대한 IAM액세스 키와 비밀 키를 포함하는 Aws::Auth::AWSCredentials(C++) 객체를 생성해야 합니다. 키 찾기에 관한 도움말은 IAM 사용자의 액세스 키 관리를 참조하십시오.

게임 세션 가져오기

코드를 추가하여 사용 가능한 게임 세션을 검색하고 게임 세션 설정 및 메타데이터를 관리합니다. 게임 세션기능에 대한 자세한 내용은 게임 및 플레이어 세션 기능 (p. 11) 단원을 참조하십시오.

활성 게임 세션을 검색합니다.

SearchGameSessions를 사용하여 특정 게임 세션, 모든 활성 세션 또는 일련의 검색 기준을 충족하는 세션에 대한 정보를 가져옵니다. 이 호출은 검색 요청과 일치하는 각 활성 게임 세션에 대한 GameSession 객체를 반환합니다.

검색 기준을 사용하여 플레이어가 참여할 활성 게임 세션의 필터링된 목록을 가져옵니다. 예를 들어 다음과같이 세션을 필터링할 수 있습니다.

• 새 플레이어를 수락하지 않는 게임 세션 제외: PlayerSessionCreationPolicy = DENY_ALL• 가득 찬 게임 세션 제외: CurrentPlayerSessionCount = MaximumPlayerSessionCount• 세션이 실행된 시간을 기준으로 게임 세션 선택: CreationTime 평가• gameSessionProperties.gameMode = "brawl" 사용자 지정 게임 속성을 기반으로 게임 세션을 찾

습니다.

게임 세션을 관리합니다.

다음 작업 중 하나를 사용하여 게임 세션 정보를 검색 또는 업데이트합니다.

• DescribeGameSessionDetails() – 게임 세션 정보 외에도 게임 세션의 보호 상태를 가져옵니다.• UpdateGameSession() – 필요에 따라 게임 세션의 메타데이터와 설정을 변경합니다.• GetGameSessionLogUrl – 저장된 게임 세션 로그에 액세스합니다.

게임 세션 만들기

코드를 추가하여 배포된 플릿에서 새 게임 세션을 시작하고 플레이어가 사용할 수 있게 허용합니다. 게임을여러 리전에 배포하느냐 단일 리전에 배포하느냐에 따라 두 가지 게임 세션 생성 옵션이 있습니다.

다중 리전 대기열을 사용하여 게임 세션을 만듭니다.

StartGameSessionPlacement를 사용하여 대기열에 새 게임 세션에 대한 요청을 배치합니다. 이 기능을 사용하려면 새 게임 세션을 배치할 수 있는 (플릿 상의) 위치를 결정하는 대기열을 설정해야 합니다. 대기열은 새게임 세션을 호스팅할 수 있는 가용 세션이 있는 플릿을 찾을 때까지 가능한 각 플릿을 차례로 시도하여 게임

버전48

Amazon GameLift 개발자 안내서게임 클라이언트 통합

세션 배치 요청을 처리합니다. 대기열 및 그 사용 방법에 대한 자세한 내용은 단원을 참조하십시오. 게임 세션 대기열 설계 (p. 124)

게임 세션 배치를 생성할 때는 사용할 대기열의 이름, 게임 세션 이름, 게임의 최대 동시 플레이어 수 및 선택적 게임 속성 세트를 지정합니다. 필요하다면 자동으로 게임 세션에 참가시킬 플레이어 목록을 제공할 수 있습니다. 관련 리전의 플레이어 지연 시간 데이터를 포함하는 경우 GameLift는 이 정보를 사용하여 플레이어에게 가능한 최상의 게임 플레이 경험을 제공하는 새 게임 세션을 플릿에 배치합니다.

게임 세션 배치는 비동기식 프로세스입니다. 생성된 요청은 성공하거나 시간 초과 될 수 있습니다. 또한 언제라도 StopGameSessionPlacement를 사용하여 요청을 취소할 수 있습니다. 배치 요청 상태를 확인하려면 DescribeGameSessionPlacement를 호출하여 업데이트된 GameSessionPlacement 객체를 검색합니다. 새 게임 세션이 생성되면 GameSessionPlacement에 다음과 같은 변경 내용이 반영됩니다. (1) Status가Pending에서 Fulfilled로 변경됩니다. (2) 게임 세션 ID와 리전 등 새 게임 세션 정보가 추가됩니다. (3) 새로운플레이어 세션 정보가 추가됩니다(요청한 경우).

특정 플릿에서 게임 세션을 만듭니다.

CreateGameSession을 사용하여 지정된 플릿에서 새 세션을 만듭니다. 이 동기식 작업을 해당 플릿에 새 게임 세션을 호스팅하는 데 사용할 수 있는 리소스가 있는지 여부에 따라 성공 또는 실패가 결정됩니다. 게임은 실패를 게임 및 플레이어에 가장 적합하게 처리해야 합니다. 예를 들어 리소스가 비워지거나 확장될 때까지 요청을 반복할 수도 있고, 다른 플릿으로 전환할 수도 있습니다. GameLift가 새 게임 세션을 생성하고GameSession 객체를 반환한 경우 해당 세션에 플레이어 참가를 시작할 수 있습니다.

이 방법을 사용하여 게임 세션을 만들 때 플릿 ID 또는 별칭 ID, 세션 이름, 게임의 최대 동시 플레이어 수를지정합니다. 선택적으로 게임 속성 세트를 포함할 수 있습니다. 게임 속성은 게임에 의미 있는 키–와 값 집합을 정의하는 일련의 키-값 쌍으로 정의됩니다. 이 정보는 새 게임 세션을 호스팅하는 서버 프로세스로 전달되어 게임 서버에 설계된 대로 사용됩니다. 예를 들어 게임 속성을 이용하여 게임 세션에 특정 게임 맵 또는 특정 규칙 집합을 적용할 수 있습니다.

GameLift 리소스 보호 기능을 사용하여 한 플레이어가 생성할 수 있는 게임 세션 수를 제한할 경우 게임 세션생성자의 플레이어 ID를 지정해야 합니다.

게임 세션에 플레이어 참여

코드를 추가하여 활성 게임 세션에서 플레이어 슬롯을 예약하고 게임 클라이언트를 게임 세션에 연결합니다.

1. 게임 세션에서 플레이어 슬롯을 예약합니다.

플레이어 슬롯을 예약하려면 게임 세션에 대해 새 플레이어 세션을 만듭니다. 플레이어 세션에 대한 자세한 내용은 플레이어의 게임 연결 방법 (p. 11) 단원을 참조하십시오. 새 플레이어 세션을 만드는 방법은 두 가지가 있습니다.

• 이전 단원에 설명된 대로 StartGameSessionPlacement를 사용하여 게임 세션을 만드는 경우, 새게임 세션에서 한 명 이상의 플레이어를 위한 슬롯을 예약할 수 있습니다.

• 게임 세션 ID 하나로 CreatePlayerSession 또는 CreatePlayerSessions를 사용하여 한 명 이상의 플레이어의 플레이어 세션을 예약합니다.

두 가지 방법 모두에서 GameLift는 먼저 게임 세션이 새 플레이어를 수락하고 사용 가능한 플레이어슬롯을 보유하는지 확인합니다. 확인되면 GameLift는 플레이어의 슬롯을 예약하고, 새 플레이어 세션을 생성하고, 게임 클라이언트가 게임 세션에 연결하는 데 필요한 DNS 이름, IP 주소 및 포트를 포함한PlayerSession 객체를 반환합니다.

플레이어 세션 요청은 각 플레이어의 고유한 ID를 포함해야 합니다. 플레이어 ID에 대한 자세한 내용은플레이어 ID 생성 (p. 50) 단원을 참조하십시오.

선택적으로 플레이어 세션 요청이 사용자 지정 플레이어 데이터 집합을 포함할 수 있습니다. 이 데이터는 새로 만든 플레이어 세션 객체에 저장되며, DescribePlayerSessions()를 호출하여 검색할 수 있습니다. 또한 이 데이터는 플레이어가 게임 세션에 직접 연결할 때 GameLift 서비스에서 게임 서버로 전달됩

버전49

Amazon GameLift 개발자 안내서게임 클라이언트 통합

니다. 플레이어 데이터는 GameLift에서 사용되지 않습니다. 이 데이터는 게임 구성 요소가 해석에 이용할 수 있는 간단한 문자열입니다. 여러 플레이어 세션을 요청하는 경우 각 플레이어에 대해 요청의 플레이어 ID와 매핑된 플레이어 데이터 문자열을 제공할 수 있습니다.

2. 게임 세션에 연결합니다.

게임 클라이언트에 코드를 추가하여 게임 세션의 연결 정보를 포함한 PlayerSession 객체를 검색합니다. 이 정보를 사용하여 서버 프로세스에 직접 연결을 설정합니다.

• 지정된 포트와 서버 프로세스에 할당된 DNS 이름 또는 IP 주소를 사용하여 연결할 수 있습니다.

Note

플릿에 TLS 인증서 생성이 활성화된 경우 DNS 이름과 포트를 사용하여 연결해야 합니다. 서버 인증 프로세스를 구현하지 않는 경우에도 이렇게 해야 합니다.

• 플레이어 세션 ID를 사용하여 플레이어 슬롯을 예약하고 플레이어 연결을 추적하는 경우 플레이어 세션 ID를 참조해야 합니다.

연결되면 게임 플레이 통신에 GameLift 서비스를 이용하지 않고 게임 클라이언트와 서버 프로세스가 직접 통신합니다. 서버 프로세스는 GameLift 서비스와 통신을 유지하면서 플레이여 연결 상태, 상태 확인등을 보고합니다. 처음 연결할 때 서버 프로세스는 서비스와 접촉해 플레이어 세션 ID가 유효하고 예약된 상태인지 확인합니다. 확인되면 예약이 클레임되고 플레이어 연결이 수락됩니다. 이후에 플레이어 연결이 끊기면 서버 프로세스는 끊어진 연결을 보고합니다.

서버 인증을 활성화하고 게임 클라이언트와 게임 세션 간에 이동하는 데이터 패킷을 암호화하려는 경우 이 기능을 빌드해야 합니다. 새로운 플릿에 대해 TLS 인증서 생성 기능이 활성화된 경우 GameLift는TLS 인증서를 가져오고 플릿에 있는 각 인증서에 대한 DNS 항목을 만들기만 하면 됩니다.

대기열을 사용하여 게임 세션 만들기이 기능 집합을 사용하여 Amazon GameLift 리소스에서 새 게임 세션을 보다 효율적으로 배치하고 매치메이킹 서비스를 보다 잘 지원할 수 있습니다. 이전에는 새 게임 세션 요청이 단일 플릿(CreateGameSession)으로 제한되었으며, 플릿 용량이 모두 사용되거나 기타 이유로 저하된 경우 요청이 실패했습니다.

대기열을 사용하여 여러 리전에 걸친 일련의 플릿 중 하나에서 새 게임 세션을 배치합니다. 플레이어 수요가증가할 경우 필요에 따라 다른 리전의 사용량이 적은 플릿으로 전환할 수 있습니다. 또한 대기열은 플릿을 모니터링하는 데 필요한 오버헤드를 줄이고 여러 플릿 및 리전에서 리소스를 밸런싱합니다. Amazon GameLift콘솔에서 대기열을 관리하고 대기열 성능 측정치를 추적할 수 있습니다.

새 게임 세션 배치 요청을 생성하고 대기열에 추가합니다. 게임 세션 배치 요청은 표준 게임 세션 속성을 포함하며, 또한 새 게임 세션에 하나 이상의 플레이어를 추가할 수 있습니다.

게임 세션 배치 요청을 생성할 때 Amazon GameLift가 모든 플레이어에게 최상의 환경을 제공하는 리전에서플릿을 선택할 수 있도록 플레이어 지연 데이터를 포함시킵니다.

플레이어 ID 생성관리형 GameLift 서비스는 플레이어 세션을 사용하여 게임 세션에 연결된 플레이어를 나타냅니다. 플레이어가 게임 세션에 연결될 때마다 하나의 플레이어 세션이 생성되어야 합니다. 플레이어가 게임에서 나가면 플레이어 세션이 종료되고 재사용되지 않습니다.

GameLift는 Amazon Lumberyard 샘플 프로젝트 MultiplayerSample에 Lobby.cpp라는 파일을 제공합니다.이는 게임 세션이 새로 시작할 때마다 모든 플레이어에 임의의 새 ID 번호를 생성하는 방법을 보여줍니다. 이것은 예제로 제공되므로 샘플 코드를 사용할 필요가 없습니다. 코드를 다시 써서 본인의 고유한 비개인 식별가능 플레이어 ID를 유지할 수도 있습니다.

Lobby.cpp에 포함된 다음 샘플 코드가 고유한 플레이어 ID를 무작위로 생성합니다.

버전50

Amazon GameLift 개발자 안내서GameLift 상호 작용

bool includeBrackets = false;bool includeDashes = true;string playerId = AZ::Uuid::CreateRandom().ToString<string>(includeBrackets, includeDashes);

GameLift용 AWS Management 콘솔에서 플레이어 ID를 기준으로 플레이어 세션을 볼 수 있습니다. 플레이어 세션에 대한 자세한 내용은 게임과 플레이어 세션에 대한 데이터 보기 (p. 169) 단원을 참조하십시오.

Amazon GameLift와 게임 클라이언트/서버 상호 작용이 주제는 클라이언트 앱, 게임 서버 및 관리형 GameLift 서비스 간 상호 작용을 설명합니다. AmazonGameLift–서버/클라이언트 상호 작용 (p. 52) 다이어그램도 참조하십시오.

새로운 서버 프로세스 설정1. GameLift 서비스는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 새 서버 프로세스를 시

작합니다.2. 시작 프로세스의 일부인 서버 프로세스는 이러한 서버 API 작업을 통해

• InitSDK() 서버 SDK를 초기화합니다.• ProcessReady() 준비 상태 정보를 전달하여 게임 세션을 수락하고 연결 포트와 게임 세션 로그 파일

의 위치를 지정합니다.

그런 다음 GameLift 서비스의 콜백을 기다립니다.3. GameLift 서비스는 EC2 인스턴스의 상태를 게임 세션 0 및 플레이어 0인 ACTIVE 상태로 변경합니다.4. 서버 프로세스가 활성 상태에 있는 동안 GameLift 서비스가 정기적으로 onHealthCheck 콜백 호출을 시

작합니다. 서버 프로세스는 1분 내에 정상 또는 비정상을 보고해야 합니다.

게임 세션 만들기1. 클라이언트 앱이 클라이언트 API 작업 CreateGameSession()을 호출합니다.2. GameLift 서비스가 게임 세션 0인 활성 서버를 검색합니다. 검색이 되면 다음을 수행합니다.

• ProcessReady()에서 서버 프로세스가 보고한 포트 설정을 이용하여 새로운 GameSession 객체를만들고, 상태를 ACTIVATING으로 설정합니다.

• GameSession 객체로 클라이언트 앱 요청에 응답합니다.• 서버 프로세스에 onStartGameSession 콜백을 호출하여 GameSession 객체를 전달합니다.

3. 서버 프로세스가 onStartGameSession 콜백 함수를 실행합니다. 플레이어 연결을 수락할 준비가 되면서버 프로세스가 서버 API 작업 ActivateGameSession()을 호출하고 플레이어 연결을 기다립니다.

4. GameLift 서비스가 GameSession 상태를 ACTIVE로 변경합니다.

게임 세션에 플레이어 추가1. 클라이언트 앱이 게임 세션 ID로 클라이언트 API 작업 CreatePlayerSession()을 호출합니다.2. GameLift 서비스가 게임 세션 상태(ACTIVE여야 함)를 확인하고 게임 세션에서 열린 플레이어 슬롯을 찾

습니다. 슬롯이 발견되면 다음을 수행합니다.• 새로운 PlayerSession 객체를 만들고 상태를 RESERVED로 설정합니다.• PlayerSession 객체로 클라이언트 앱 요청에 응답합니다.

3. 클라이언트 앱은 플레이어 세션 ID로 서버 프로세스에 직접 연결됩니다.4. 서버 프로세스가 서버 API 작업 AcceptPlayerSession()을 호출하여 플레이어 세션 ID를 확인합니다.

확인되면 GameLift 서비스가 PlayerSession 객체를 서버 프로세스에 전달합니다. 서버 프로세스가 연결을 수락하거나 거부합니다.

버전51

Amazon GameLift 개발자 안내서GameLift 상호 작용

5. GameLift 서비스가 다음 중 하나를 수행합니다.• 연결이 수락되면 PlayerSession 상태를 ACTIVE로 설정합니다.• 클라이언트 앱의 원래 CreatePlayerSession() 호출 후 60초 내에 응답이 수신되지 않으면,PlayerSession 상태를 TIMEDOUT으로 변경하고 게임 세션에서 플레이어 슬롯을 다시 엽니다.

게임 세션에서 플레이어 제거1. 서버 프로세스에서 클라이언트 앱 연결을 해제합니다.2. 서버 프로세스가 끊어진 연결을 찾아내고 서버 API 작업 RemovePlayerSession()을 호출합니다.3. GameLift 서비스가 PlayerSession 상태를 COMPLETED로 변경하고 게임 세션에서 플레이어 슬롯을

다시 엽니다.

게임 세션 종료게임 세션 종료

1. 서버 프로세스가 서버 API 작업 TerminateGameSession()을 호출합니다.2. GameLift 서비스가 다음을 수행합니다.

• GameSession 상태를 TERMINATED로 변경합니다.• Amazon Simple Storage Service(Amazon S3)에 게임 세션 로그를 업로드합니다.• 플릿 사용률을 업데이트하여 서버가 유휴 상태임을 표시합니다(0 게임 세션, 0 플레이어).

서버 프로세스 종료1. 서버 프로세스가 다음을 수행합니다.

• 서버 프로세스를 정상적으로 종료하는 코드를 실행합니다.• 서버 API 작업 ProcessEnding()을 호출하여 GameLift 서비스에 알립니다.

2. GameLift 서비스가 다음을 수행합니다.• Amazon S3에 게임 세션 로그(있는 경우)를 업로드합니다.• 서버 프로세스 상태를 TERMINATED로 변경합니다.• 플릿의 실행 시간 구성에 따라 인스턴스 리소스를 휴지통으로 이동합니다.

종료 요청에 응답하기1. GameLift 서비스가 서버 프로세스의 onProcessTerminate 콜백을 호출합니다. 이 호출은 비정상으로

보고되었거나 3분 동안 정상 상태로 응답이 되지 않은 서버 프로세스를 종료하는 데 사용됩니다.2. 서버 프로세스 가 onProcessTerminate 콜백 함수를 실행하면 서버의 종료 프로세스가 트리거되어

ProcessEnding() 호출을 통해 종료됩니다.3. GameLift 서비스가 ProcessEnding() 호출 수신에 응답하기 위해 또는 5분 경과 후 다음을 수행합니다.

• Amazon S3에 게임 세션 로그(있는 경우)를 업로드합니다.• 서버 프로세스 상태를 TERMINATED로 변경합니다.• 플릿의 실행 시간 구성에 따라 인스턴스 리소스를 휴지통으로 이동합니다.

Amazon GameLift–서버/클라이언트 상호 작용아래 다이어그램은 관리형 GameLift 솔루션을 사용하여 멀티플레이어 게임 세션 작업을 관리할 때 발생하는API 상호 작용을 간략하게 설명합니다.

버전52

Amazon GameLift 개발자 안내서통합 테스트

통합 테스트GameLift Local을 사용하여 로컬 디바이스에서 제한된 버전의 관리형 GameLift 서비스를 실행하고 이를 기준으로 게임 통합을 테스트합니다. 이 도구는 게임 통합에서 반복적 개발을 수행할 때 유용합니다. 대안(각각의 새 빌드를 GameLift에 업로드하고 게임을 호스팅하도록 플릿 구성)은 매번 30분 이상 걸릴 수 있습니다.

GameLift Local을 사용하여 다음을 확인할 수 있습니다.

• 게임 서버가 Server SDK와 올바르게 통합되며 GameLift 서비스와 적절히 통신하여 새 게임 세션을 시작하고 새 플레이어를 수락하며 상태를 보고합니다.

• 게임 클라이언트가 GameLift용 AWS SDK와 올바르게 통합되며 기존 게임 세션에 대한 정보를 검색하고새 게임 세션을 시작하며 플레이어를 게임에 참가시키고 게임 세션에 연결할 수 있습니다.

버전53

Amazon GameLift 개발자 안내서통합 테스트

GameLift Local은 독립형 버전의 관리형 GameLift 서비스를 시작하는 명령줄 도구입니다. GameLift Local은서버 프로세스 초기화, 상태 확인, API 호출 및 응답의 실행 중인 이벤트 로그도 제공합니다. GameLift Local은 GameLift에 대한 AWS SDK 작업의 하위 세트를 인식합니다. AWS CLI 또는 게임 클라이언트에서 호출할수 있습니다. 모든 API 작업은 GameLift 웹 서비스에서와 마찬가지로 로컬에서 수행됩니다.

GameLift Local 설정GameLift Local은 Server SDK와 함께 제공되는 .jar 실행 파일로 제공됩니다. 이는 Windows 또는 Linux에서 실행할 수 있으며 GameLift 지원 언어와 함께 사용할 수 있습니다.

Local을 실행하기 전에 다음이 설치되어 있어야 합니다.

• GameLift Server SDK 버전 3.1.5 이상의 빌드• Java 8

게임 서버 테스트게임 서버만 테스트하려면 AWS CLI를 사용하여 GameLift Local 서비스에 대한 게임 클라이언트 호출을 시뮬레이션하면 됩니다. 이는 게임 서버가 다음과 같은 점에서 예상대로 작동하고 있는지 확인합니다.

• 게임 서버가 제대로 시작하고 GameLift Server SDK를 초기화합니다.• 시작 프로세스의 일환으로 게임 서버가 게임 세션을 호스팅할 준비가 되었음을 GameLift에 알립니다.• 실행 도중 게임 서버가 GameLift에게 1분마다 상태를 전송합니다.• 게임 서버가 새 게임 세션 시작 요청에 응답합니다.

1. GameLift Local을 시작합니다.

명령 프롬프트 창을 열고 GameLiftLocal.jar 파일이 포함된 디렉터리로 이동하여 이 파일을 실행합니다. 기본적으로 Local은 포트 8080에서 게임 클라이언트의 요청을 수신 대기합니다. 다른 포트 번호를지정하려면 다음 예제에 나온 것처럼 -p 파라미터를 사용합니다:

java -jar GameLiftLocal.jar -p 9080

Local이 시작되면 2개의 로컬 서버가 시작되었다는 로그가 표시됩니다. 이때 한 서버는 게임 서버를 수신 대기하고 다른 한 서버는 게임 클라이언트 또는 AWS CLI를 수신 대기하는 상태입니다. 로그는 게임구성 요소와의 통신 등, 2개의 로컬 서버에서 실행되는 활동을 계속 보고합니다.

2. 게임 서버를 시작합니다.

GameLift 통합 게임 서버를 로컬에서 시작합니다. 게임 서버의 엔드포인트를 변경할 필요는 없습니다.

Local 명령 프롬프트 창에서 게임 서버가 GameLift Local 서비스에 연결되었다는 로그 메시지가 표시됩니다. 이는 게임 서버가 GameLift Server SDK를 성공적으로 초기화했음을 의미합니다(InitSDK() 사용). 게임 서버는 표시된 로그 경로를 사용하여 ProcessReady()를 호출했고, 게임 세션을 호스팅할 준비가 되었습니다. 게임 서버가 실행되는 동안 GameLift는 게임 서버의 각 상태 보고서를 로깅합니다. 다음 로그 메시지 예는 성공적으로 통합된 게임 서버를 보여 줍니다.

16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK connected: /127.0.0.1:64247 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK pid is 17040, sdkVersion is 3.1.5 and sdkLanguage is CSharp16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - NOTE: Only SDK versions 3.1.5 and above are supported in GameLiftLocal!16:50:53,451 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady received from: /127.0.0.1:64247 and ackRequest requested? true

버전54

Amazon GameLift 개발자 안내서통합 테스트

16:50:53,543 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady data: logPathsToUpload: "C:\\game\\logs"logPathsToUpload: "C:\\game\\error"port: 1935 16:50:53,544 INFO || - [HostProcessManager] nioEventLoopGroup-3-1 - Registered new process true, true,16:50:53,558 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onReportHealth received from /127.0.0.1:64247 with health status: healthy

예상 오류 및 경고 메시지는 다음과 같습니다.

• 오류: "ProcessReady가 pID: <process ID>인 프로세스를 찾지 못했습니다! InitSDK()가 호출됐습니까?"

• 경고: "pID(<process ID>)로 처리되는 프로세스에 대한 프로세스 상태가 이미 존재합니다!ProcessReady(...)가 두 번 이상 호출됩니까?"

3. AWS CLI를 시작합니다.

게임 서버가 ProcessReady()를 성공적으로 호출하면 클라이언트 호출을 시작할 수 있습니다. 다른명령 프롬프트 창을 열고 AWS CLI 도구를 시작합니다. AWS Command Line Interface 도구를 다운로드하여 설치합니다. AWS CLI는 기본적으로 GameLift 웹 서비스 엔드포인트를 사용합니다. 다음 요청 예제에 나온 것처럼 --endpoint-url 파라미터를 사용하여 모든 요청에서 Local 엔드포인트로 이를 재정의해야 합니다.

aws gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123

AWS CLI 명령 프롬프트 창에서 aws gamelift 명령을 호출하면 AWS CLI Command Reference에 설명된 것과 같은 응답이 발생합니다.

4. 게임 세션을 생성합니다.

AWS CLI를 사용하여 CreateGameSession() 요청을 제출합니다. 요청은 필요한 구문에 따라야 합니다.Local의 경우, FleetId 파라미터는 어떤 유효한 문자열(^fleet-\S+)로도 설정이 가능합니다.

aws gamelift create-game-session --endpoint-url http://localhost:9080 --maximum-player-session-count 2 --fleet-id fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

Local 명령 프롬프트 창에서 GameLift Local이 게임 서버에 onStartGameSession 콜백을전송했다는 로그 메시지가 표시됩니다. 게임 세션이 성공적으로 생성된 경우, 게임 서버는ActivateGameSession을 호출하여 응답합니다.

13:57:36,129 INFO || - [SDKInvokerImpl] Thread-2 - Finished sending event to game server to start a game session: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6. Waiting for ack response.13:57:36,143 INFO || - [SDKInvokerImpl] Thread-2 - Received ack response: true13:57:36,144 INFO || - [CreateGameSessionDispatcher] Thread-2 - GameSession with id: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6 created13:57:36,227 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate received from: /127.0.0.1:60020 and ackRequest requested? true13:57:36,230 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate data: gameSessionId: "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890"

버전55

Amazon GameLift 개발자 안내서통합 테스트

AWS CLI 창에서 GameLift는 게임 세션 ID를 포함한 게임 세션 객체를 사용하여 응답합니다. 새 게임 세션 상태가 Activating임에 유의하십시오. 게임 서버가 ActivateGameSession을 호출하면 상태가 Active로 변경됩니다. 변경된 상태를 보려면 AWS CLI를 사용하여 DescribeGameSessions()를 호출합니다.

{ "GameSession": { "Status": "ACTIVATING", "MaximumPlayerSessionCount": 2, "FleetId": "fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "GameSessionId": "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890", "IpAddress": "127.0.0.1", "Port": 1935 }}

게임 서버 및 클라이언트 테스트플레이어와 게임 연결 등 전체 게임 통합을 확인하기 위해 게임 서버와 클라이언트를 모두 로컬에서 실행할수 있습니다. 이렇게 하면 게임 클라이언트에서 GameLift Local로의 프로그래밍 방식 호출을 테스트할 수 있습니다. 다음과 같은 작업을 확인할 수 있습니다.

• 게임 클라이언트가 게임 세션 생성, 기존 게임 세션에 대한 정보 검색, 플레이어 세션 생성 등을 위해GameLift Local 서비스에 성공적으로 AWS SDK 요청을 합니다.

• 플레이어가 게임 세션에 참가하려 할 때 게임 서버가 올바로 플레이어를 확인합니다. 확인된 플레이어의경우, 게임 서버는 플레이어 데이터(구현된 경우)를 검색할 수 있습니다.

• 플레이어가 게임에서 나갈 때 게임 서버는 끊긴 연결을 보고합니다.• 게임 서버가 게임 세션 종료를 보고합니다.

1. GameLift Local을 시작합니다.

명령 프롬프트 창을 열고 GameLiftLocal.jar 파일이 포함된 디렉터리로 이동하여 이 파일을 실행합니다. 기본적으로 Local은 포트 8080에서 게임 클라이언트의 요청을 수신 대기합니다. 다른 포트 번호를지정하려면 다음 예제에 나온 것처럼 -p 파라미터를 사용합니다.

./gamelift-local -p 9080

Local이 시작되면 2개의 로컬 서버가 시작되었다는 로그가 표시됩니다. 이때 한 서버는 게임 서버를 수신 대기하고 다른 한 서버는 게임 클라이언트 또는 AWS CLI를 수신 대기하는 상태입니다.

2. 게임 서버를 시작합니다.

GameLift 통합 게임 서버를 로컬에서 시작합니다. 메시지 로그에 대한 자세한 내용은 게임 서버 테스트 (p. 54) 단원을 참조하십시오.

3. Local에 대해 게임 클라이언트를 구성하고 시작합니다.

GameLift Local 서비스와 함께 게임 클라이언트를 사용하려면 클라이언트 또는 서비스에서 GameLift 설정 (p. 47)에 설명된 것처럼 게임 클라이언트의 설정을 다음과 같이 변경해야 합니다.

• http://localhost:9080 등 Local 엔드포인트를 가리키도록 ClientConfiguration 객체를 변경합니다.

• 대상 플릿 ID 값을 설정합니다. Local의 경우, 실제 플릿 ID는 필요하지 않습니다. 대상 플릿을fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d와 같은 유효한 문자열(^fleet-\S+)로 설정하십시오.

버전56

Amazon GameLift 개발자 안내서통합 테스트

• AWS 자격 증명을 설정합니다. Local의 경우, 실제 AWS 자격 증명이 필요 없습니다. 액세스 키와 비밀 키를 어떤 문자열로도 설정할 수 있습니다.

게임 클라이언트를 시작한 경우에는 Local 명령 프롬프트 창에서 게임 클라이언트가GameLiftClient를 초기화했고 GameLift 서비스와 성공적으로 통신하고 있다는 로그 메시지가 표시되어야 합니다.

4. 게임 클라이언트의 GameLift 서비스 호출을 테스트합니다.

게임 클라이언트가 다음 API 호출 중 하나 또는 전부를 성공적으로 하고 있는지 확인합니다.

• CreateGameSession()• DescribeGameSessions()• CreatePlayerSession()• CreatePlayerSessions()• DescribePlayerSessions()

Local 명령 프롬프트 창에서 CreateGameSession()에 대한 호출만 로그 메시지를 발생시킵니다. 로그 메시지는 GameLift Local이 게임 서버에게 게임 세션을 시작하라고 하며(onStartGameSession 콜백) 게임 서버의 호출이 있을 때 성공적인 ActivateGameSession을 받으면 표시됩니다. AWS CLI 창에서, 모든 API 호출은 설명된 것과 같은 응답 또는 오류 메시지를 발생시킵니다.

5. 게임 서버가 새 플레이어 연결을 검증하고 있는지 확인합니다.

게임 세션과 플레이어 세션을 생성한 후 게임 세션과의 직접적인 연결을 설정합니다.

Local 명령 프롬프트 창에서, 로그 메시지에는 게임 서버가 새 플레이어 연결을 검증하기 위해 AcceptPlayerSession() 요청을 전송했음이 표시되어야 합니다. AWS CLI를 사용하여DescribePlayerSessions()를 호출하는 경우, 플레이어 세션 상태가 Reserved에서 Active로 변경되어야 합니다.

6. 게임 서버가 게임 및 플레이어 상태를 GameLift 서비스에 보고하고 있는지 확인합니다.

GameLift가 플레이어 수요를 관리하고 지표를 올바르게 보고하려면 게임 서버가 다양한 상태를GameLift에 다시 보고해야 합니다. Local이 다음 작업과 관련된 이벤트를 로깅하고 있는지 확인합니다.AWS CLI를 사용하여 상태 변경을 추적할 수도 있습니다.

• 플레이어가 게임 세션에서 연결 해제 – 게임 서버가 RemovePlayerSession()을 호출한다는GameLift Local 로그 메시지가 표시되어야 합니다. AWS CLI가 DescribePlayerSessions()를호출하면 Active에서 Completed로 상태 변경이 이루어져야 합니다. 또한DescribeGameSessions()를 호출하여 게임 세션의 현재 플레이어 수가 한 명 줄었는지 확인할 수있습니다.

• 게임 세션 종료 – 게임 서버가 TerminateGameSession()을 호출한다는 GameLift Local 로그메시지가 표시되어야 합니다. AWS CLI가 DescribeGameSessions()를 호출하면 Active에서Terminated(또는 Terminating)로 상태 변경이 이루어져야 합니다.

• 서버 프로세스가 종료됨 – 게임 서버가 ProcessEnding()을 호출한다는 GameLift Local 로그 메시지가 표시되어야 합니다.

Local을 사용한 변형GameLift Local을 사용할 때는 다음 사항을 명심하십시오.

• Local은 GameLift 웹 서비스와 달리 서버 상태를 추적하거나 onProcessTerminate 콜백을 시작하지 않습니다. Local은 단순히 게임 서버의 상태 보고서 로깅을 중지합니다.

• AWS SDK에 대한 호출의 경우, 플릿 ID는 검증되지 않으며 파라미터 요구 사항(^fleet-\S+)을 충족하는어떤 문자열 값도 될 수 있습니다.

버전57

Amazon GameLift 개발자 안내서게임에 Realtime 서버 통합

• Local을 사용하여 생성된 게임 세션 ID는 다른 구조를 갖습니다. 여기서 보듯 여기에는 문자열 local이 포함됩니다.

arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6

게임에 Amazon GameLiftRealtime 서버 통합Amazon GameLiftRealtime 서버는 복잡한 사용자 지정 빌드된 게임 서버가 필요 없는 게임용으로 설계된 경량 서버 솔루션을 제공합니다. 모바일 게임, 턴 기반 게임, 메시지 기반 게임 등과 같은 게임은 최소한의 구성만 필요하지만 게임별 로직에 맞게 사용자 지정도 가능한 바로 사용할 수 있는Realtime 게임 서버를 사용할수 있습니다.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

이 단원의 주제에서는 멀티플레이어 게임 클라이언트가 GameLift에서 실행되는 Realtime 서버 게임 서버에연결하고 해당 서버를 사용할 수 있도록 설정하는 방법을 설명합니다. Realtime 서버에서 게임을 시작하고실행하는 완전한 로드맵은 Realtime 서버 시작하기 (p. 32) 단원을 참조하십시오.

Realtime 서버에 대해 자세히 알아보기:

• Realtime 서버의 작동 방식 (p. 7)

게임에 Realtime 서버 통합 시작하기• Realtime 서버에 대해 게임 클라이언트 통합 (p. 58)• Realtime 스크립트 만들기 (p. 62)

• Realtime 서버 시작하기 (p. 32)

Realtime 서버에 대해 게임 클라이언트 통합이 주제에서는 Amazon GameLift 호스팅 게임 세션에 참가하고 참여할 수 있도록 게임 클라이언트를 준비하는 방법을 설명합니다.

게임 클라이언트를 준비하는 데 필요한 두 개의 작업 세트가 있습니다.

• 기존 게임에 대한 정보를 획득하고 매치메이킹을 요청하며 새로운 게임 세션을 시작하고 플레이어를 위한게임 세션을 예약하도록 게임 클라이언트를 설정합니다.

• 게임 클라이언트를 활성화하여 Realtime 서버에 호스팅된 게임 세션에 참가하고 메시지를 교환합니다.

게임 세션 및 플레이어 세션 찾기 또는 생성게임 세션을 찾거나 시작하고 FlexMatch 매치메이킹을 요청하며 게임에서 플레이어 세션을 생성하여 플레이어를 위한 공간을 예약하도록 게임 클라이언트를 설정합니다. 모범 사례로서 클라이언트 서비스를 생성하고, 게임 클라이언트 실행에 의해 트리거될 때 이것을 사용하여 Amazon GameLift 서비스로 직접 요청합니다. 그러면 클라이언트 서비스가 관련 응답을 게임 클라이언트에 다시 릴레이합니다.

1. AWS SDK를 클라이언트 서비스 프로젝트에 추가하고, Amazon GameLift 클라이언트를 초기화하며, 플릿및/또는 대기열에서 호스팅 리소스를 사용하도록 해당 클라이언트를 구성합니다. AWS SDK는 여러 언어로 제공됩니다(Amazon GameLift SDK 클라이언트 서비스 (p. 27) 참조).

버전58

Amazon GameLift 개발자 안내서게임 클라이언트 통합

2. GameLift 기능을 클라이언트 서비스에 추가합니다. 세부 지침은 게임 클라이언트에 Amazon GameLift 추가 (p. 47) 및 FlexMatch 매치메이킹 추가 (p. 68) 단원을 참조하십시오. 게임 세션 배치를 사용하여새 게임 세션을 생성하는 것이 모범 사례입니다. 이 방법을 사용하면 새 게임 세션을 신속하고 지능적으로배치하는 GameLift의 능력을 최대로 활용하는 것은 물론 플레이어 지연 시간 데이터를 사용하여 게임 지연 시간을 최소화할 수 있습니다. 적어도 클라이언트 서비스에서 새 게임 세션을 요청하고 그에 따라 게임세션 데이터를 처리할 수 있어야 합니다. 그리고 기존 게임 세션에 관한 정보를 검색하여 가져오는 기능을추가하고, 플레이어 세션을 요청하여 기존 게임 세션의 플레이어 슬롯을 효과적으로 유지할 수 있어야 합니다.

3. 연결 정보를 다시 게임 클라이언트에 전달합니다. 백엔드 게임 서비스는 Amazon GameLift 서비스에 대한 요청의 응답에서 게임 세션 및 플레이어 세션 객체를 수신합니다. 이러한 객체에는 게임 클라이언트가Realtime Server에서 실행 중인 게임 세션에 연결하는 데 필요한 정보, 특히 연결 세부 정보(IP 주소 및 포트) 및 플레이어 세션 ID가 포함됩니다.

Realtime 서버에서 게임에 연결게임 클라이언트를 활성화하여 Realtime 서버에 호스팅 게임 세션과 직접 연결하고 서버 및 다른 플레이어와메시지를 교환합니다.

1. Realtime Client SDK를 가져오고 빌드하며 게임 클라이언트 프로젝트에 추가합니다. SDK 요구 사항에 대한 자세한 내용과 클라이언트 라이브러리를 빌드하는 방법에 대한 지침은 README 파일을 참조하십시오.

2. 사용할 클라이언트/서버 연결 유형을 지정하는 클라이언트 구성을 사용하여 Client() (p. 229)를 호출합니다.

Note

TLS 인증서를 사용하여 보안 플릿에서 실행되는 Realtime 서버에 연결하는 경우 보안 연결 유형을 지정해야 합니다.

3. 다음 기능을 게임 클라이언트에 추가합니다. 자세한 내용은 Realtime 서버 Client API(C#) 참조 (p. 228)단원을 참조하십시오.• 게임 연결 및 연결 해제

• Connect() (p. 229)• Disconnect() (p. 230)

• 대상 수신자에게 메시지 전송• SendMessage() (p. 231)

• 메시지 수신 및 처리• OnDataReceived() (p. 234)

• 그룹 참가 및 플레이어 그룹에서 나가기• JoinGroup() (p. 231)• RequestGroupMembership() (p. 232)• LeaveGroup() (p. 232)

4. 필요에 따라 클라이언트 콜백에 대한 이벤트 핸들러를 설정합니다. Realtime 서버 Client API(C#) 참조: 비동기 콜백 (p. 232) 단원을 참조하십시오.

TLS 인증서 생성이 활성화된 Realtime 플릿으로 작업하는 경우 서버는 TLS 인증서를 사용하여 자동으로 인증됩니다. TCP 및 UDP 트래픽은 전송 중에 암호화되어 전송 계층 보안을 제공합니다. TCP 트래픽은 TLS1.2를 사용하여 암호화되고, UDP 트래픽은 DTLS 1.2를 사용하여 암호화됩니다.

버전59

Amazon GameLift 개발자 안내서게임 클라이언트 통합

게임 클라이언트 예제Basic Realtime Client(C#)이 예제에서는 Realtime Client SDK(C#)와 기본 게임 클라이언트 통합을 보여 줍니다. 그림과 같이, 이 예제에서는 Realtime 클라이언트 객체를 초기화하고 이벤트 핸들러를 설정한 다음 클라이언트 측 콜백을 구현하고, Realtime 서버에 연결하고 메시지를 전송한 다음 연결을 해제합니다.

using System;using System.Text;using Aws.GameLift.Realtime;using Aws.GameLift.Realtime.Event;using Aws.GameLift.Realtime.Types;

namespace Example{ /** * An example client that wraps the GameLift Realtime client SDK * * You can redirect logging from the SDK by setting up the LogHandler as such: * ClientLogger.LogHandler = (x) => Console.WriteLine(x); * */ class RealTimeClient { public Aws.GameLift.Realtime.Client Client { get; private set; } // An opcode defined by client and your server script that represents a custom message type private const int MY_TEST_OP_CODE = 10;

/// Initialize a client for GameLift Realtime and connect to a player session. /// <param name="endpoint">The DNS name that is assigned to Realtime server</param> /// <param name="remoteTcpPort">A TCP port for the Realtime server</param> /// <param name="listeningUdpPort">A local port for listening to UDP traffic</param> /// <param name="connectionType">Type of connection to establish between client and the Realtime server</param> /// <param name="playerSessionId">The player session ID that is assigned to the game client for a game session </param> /// <param name="connectionPayload">Developer-defined data to be used during client connection, such as for player authentication</param> public RealTimeClient(string endpoint, int remoteTcpPort, int listeningUdpPort, ConnectionType connectionType, string playerSessionId, byte[] connectionPayload) { // Create a client configuration to specify a secure or unsecure connection type // Best practice is to set up a secure connection using the connection type RT_OVER_WSS_DTLS_TLS12. ClientConfiguration clientConfiguration = new ClientConfiguration() { // C# notation to set the field ConnectionType in the new instance of ClientConfiguration ConnectionType = connectionType };

// Create a Realtime client with the client configuration Client = new Client(clientConfiguration);

// Initialize event handlers for the Realtime client Client.ConnectionOpen += OnOpenEvent; Client.ConnectionClose += OnCloseEvent; Client.GroupMembershipUpdated += OnGroupMembershipUpdate;

버전60

Amazon GameLift 개발자 안내서게임 클라이언트 통합

Client.DataReceived += OnDataReceived;

// Create a connection token to authenticate the client with the Realtime server // Player session IDs can be retrieved using AWS SDK for GameLift ConnectionToken connectionToken = new ConnectionToken(playerSessionId, connectionPayload);

// Initiate a connection with the Realtime server with the given connection information Client.Connect(endpoint, remoteTcpPort, listeningUdpPort, connectionToken); }

public void Disconnect() { if (Client.Connected) { Client.Disconnect(); } }

public bool IsConnected() { return Client.Connected; }

/// <summary> /// Example of sending to a custom message to the server. /// /// Server could be replaced by known peer Id etc. /// </summary> /// <param name="intent">Choice of delivery intent ie Reliable, Fast etc. </param> /// <param name="payload">Custom payload to send with message</param> public void SendMessage(DeliveryIntent intent, string payload) { Client.SendMessage(Client.NewMessage(MY_TEST_OP_CODE) .WithDeliveryIntent(intent) .WithTargetPlayer(Constants.PLAYER_ID_SERVER) .WithPayload(StringToBytes(payload))); }

/** * Handle connection open events */ public void OnOpenEvent(object sender, EventArgs e) { }

/** * Handle connection close events */ public void OnCloseEvent(object sender, EventArgs e) { }

/** * Handle Group membership update events */ public void OnGroupMembershipUpdate(object sender, GroupMembershipEventArgs e) { }

/** * Handle data received from the Realtime server */ public virtual void OnDataReceived(object sender, DataReceivedEventArgs e)

버전61

Amazon GameLift 개발자 안내서Realtime 스크립트 사용자 지정

{ switch (e.OpCode) { // handle message based on OpCode default: break; } }

/** * Helper method to simplify task of sending/receiving payloads. */ public static byte[] StringToBytes(string str) { return Encoding.UTF8.GetBytes(str); }

/** * Helper method to simplify task of sending/receiving payloads. */ public static string BytesToString(byte[] bytes) { return Encoding.UTF8.GetString(bytes); } }}

Realtime 스크립트 만들기게임에 Realtime 서버을 사용하려면 Realtime 서버 플릿을 구성하고 사용자 지정(선택 사항)하는 스크립트(JavaScript 코드 형식)를 제공해야 합니다. 이 단원에서는 Realtime 스크립트를 작성하는 주요 단계를 설명합니다. 스크립트가 준비되면 Amazon GameLift 서비스에 업로드한 후 이를 사용하여 플릿을 생성합니다(Realtime 서버 스크립트를 Amazon GameLift에 업로드 (p. 93) 참조).

Realtime 서버에 스크립트를 사용할 준비를 하려면 다음 기능을 Realtime 스크립트에 추가합니다.

게임 세션 수명 주기 관리(필수)적어도 Realtime 스크립트에는 Realtime 서버가 게임 세션 시작을 준비하게 하는 Init() 기능이 포함되어야 합니다. 그리고 게임 세션을 종료하여 새 게임 세션이 플릿에서 계속 시작되도록 보장하는 방법도 제공할것을 적극 권장합니다.

Init() 콜백 기능은 호출되면 Realtime 세션 객체로 전달되는데, 그 안에는 Realtime 서버용 인터페이스가포함됩니다. 이 인터페이스에 관한 자세한 내용은 Realtime 서버 인터페이스 (p. 240)를 참조하십시오.

게임 세션을 명확하게 종료하려면 스크립트에서 Realtime 서버의 session.processEnding 기능도 호출해야 합니다. 이를 위해서는 세션 종료 시점을 결정하는 메커니즘이 필요합니다. 스크립트 예제 코드는 플레이어 연결을 확인하고 지정된 시간 동안 세션에 연결된 플레이어가 없을 경우 게임 세션을 종료하는 간단한메커니즘을 설명합니다.

Realtime 서버 및 기본적인 구성(서버 프로세스 초기화 및 종료)은 기본적으로 상태 비저장 릴레이 서버로 작동합니다. Realtime 서버는 게임에 연결된 게임 클라이언트 간에 메시지와 게임 데이터를 중계하지만, 데이터를 처리하거나 로직을 수행하기 위한 독립적인 작업을 수행하지는 않습니다. 게임에 필요한 경우 게임 이벤트나 다른 메커니즘에 의해 트리거되는 게임 로직을 선택적으로 추가할 수 있습니다.

서버 측 게임 로직 추가(선택 사항)Realtime 스크립트에 게임 로직을 추가할 수도 있습니다. 예를 들어, 다음 중 하나 또는 전부를 수행할 수 있습니다. 스크립트 예제 코드는 설명을 제공합니다. Amazon GameLiftRealtime 서버 스크립트 참조 (p. 238)단원을 참조하십시오.

버전62

Amazon GameLift 개발자 안내서Realtime 스크립트 사용자 지정

• 이벤트 중심 로직을 추가합니다. 콜백 기능을 구현하여 클라이언트 서버 이벤트에 응답합니다. 전체 콜백목록은

Realtime 스크립트에서 다음 콜백을 구현하여 이벤트에 응답하기 위한 사용자 지정 로직을제공할 수 있습니다.

init

Realtime 서버를 초기화하고 Realtime 서버 인터페이스를 수신합니다.

구문

init(rtsession)

onMessage

수신한 메시지를 서버로 전송할 때 호출됩니다.

구문

onMessage(gameMessage)

onHealthCheck

게임 세션 상태를 설정할 때 호출됩니다. 기본적인 상태는 정상(또는 true)입니다. 이 콜백을 구현하여 사용자 지정 상태를 확인하고 상태를 반환할 수 있습니다.

구문

onHealthCheck()

onStartGameSession

게임 세션 객체가 전달되고 새 게임 세션이 시작될 때 호출됩니다.

구문

onStartGameSession(session)

onProcessTerminate

Amazon GameLift 서비스에 의해 서버 프로세스가 종료될 때 호출됩니다. 이것이 게임 세션에서 명확하게 종료하는 트리거 역할을 할 수 있습니다. processEnding().를 호출할 필요가 없습니다.

구문

onProcessTerminate()

onPlayerConnect

플레이어가 연결을 요청하고 초기 확인을 통과한 경우 호출됩니다.

버전63

Amazon GameLift 개발자 안내서Realtime 스크립트 사용자 지정

구문

onPlayerConnect(connectMessage)

onPlayerAccepted

플레이어 연결을 수락할 때 호출됩니다.

구문

onPlayerAccepted(player)

onPlayerDisconnect

연결 해제 요청을 전송하거나 기타 방법을 통해 플레이어가 게임 세션의 연결을 해제할 때호출됩니다.

구문

onPlayerDisconnect(peerId)

onProcessStarted

서버 프로세스를 시작할 때 호출됩니다. 스크립트는 이 콜백을 사용하여 게임 세션을 호스팅하려고 준비하는 데 필요한 사용자 지정 작업을 수행할 수 있습니다.

구문

onProcessStarted(args)

onSendToPlayer

서버에서 다른 플레이어에게 전송할 메시지를 한 플레이어로부터 수신할 때 호출됩니다. 이프로세스는 메시지를 전송하기 전에 실행됩니다.

구문

onSendToPlayer(gameMessage)

onSendToGroup

서버에서 그룹에 전송할 메시지를 한 플레이어로부터 수신할 때 호출됩니다. 이 프로세스는메시지를 전송하기 전에 실행됩니다.

구문

onSendToGroup(gameMessage))

onPlayerJoinGroup

플레이어가 그룹에 가입하기 위해 요청을 전송할 때 호출됩니다.

버전64

Amazon GameLift 개발자 안내서Realtime 스크립트 사용자 지정

구문

onPlayerJoinGroup(groupId, peerId)

onPlayerLeaveGroup

플레이어가 그룹에서 나가기 위해 요청을 전송할 때 호출됩니다.

구문

onPlayerLeaveGroup(groupId, peerId)

(p. 238)를 참조하십시오.• 서버로 메시지를 전송하여 로직을 트리거합니다. 게임 클라이언트에서 서버로 전송되는 메시지의 특

정 작업 코드 세트를 생성하고, 수신을 처리하는 기능을 추가합니다. 콜백 onMessage를 사용하고,gameMessage 인터페이스를 이용해 메시지 내용을 분석합니다(gameMessage.opcode (p. 243) 참조).

Realtime 서버 스크립트 예제이 예제는 Realtime 서버과 사용자 지정 로직을 배포하는 데 필요한 기본 스크립트를 설명합니다. 여기에는필수 Init() 기능이 포함되어 있으며, 타이머 메커니즘을 사용하여 플레이어 연결이 없는 시간에는 게임 세션을 종료합니다. 그리고 콜백 구현을 포함해 사용자 지정 로직용 후크도 포함되어 있습니다.

// Example Realtime Server Script'use strict';

// Example override configurationconst configuration = { pingIntervalTime: 30000};

// Timing mechanism used to trigger end of game session. Defines how long, in milliseconds, between each tick in the example tick loopconst tickTime = 1000;

// Defines how to long to wait in Seconds before beginning early termination check in the example tick loopconst minimumElapsedTime = 120;

var session; // The Realtime server session objectvar logger; // Log at appropriate level via .info(), .warn(), .error(), .debug()var startTime; // Records the time the process startedvar activePlayers = 0; // Records the number of connected playersvar onProcessStartedCalled = false; // Record if onProcessStarted has been called

// Example custom op codes for user-defined messages// Any positive op code number can be defined here. These should match your client code.const OP_CODE_CUSTOM_OP1 = 111;const OP_CODE_CUSTOM_OP1_REPLY = 112;const OP_CODE_PLAYER_ACCEPTED = 113;const OP_CODE_DISCONNECT_NOTIFICATION = 114;

// Example groups for user defined groups// Any positive group number can be defined here. These should match your client code.const RED_TEAM_GROUP = 1;const BLUE_TEAM_GROUP = 2;

버전65

Amazon GameLift 개발자 안내서Realtime 스크립트 사용자 지정

// Called when game server is initialized, passed server's object of current sessionfunction init(rtSession) { session = rtSession; logger = session.getLogger();}

// On Process Started is called when the process has begun and we need to perform any// bootstrapping. This is where the developer should insert any code to prepare// the process to be able to host a game session, for example load some settings or set state//// Return true if the process has been appropriately prepared and it is okay to invoke the// GameLift ProcessReady() call.function onProcessStarted(args) { onProcessStartedCalled = true; logger.info("Starting process with args: " + args); logger.info("Ready to host games...");

return true;}

// Called when a new game session is started on the processfunction onStartGameSession(gameSession) { // Complete any game session set-up

// Set up an example tick loop to perform server initiated actions startTime = getTimeInS(); tickLoop();}

// Handle process termination if the process is being terminated by GameLift// You do not need to call ProcessEnding herefunction onProcessTerminate() { // Perform any clean up}

// Return true if the process is healthyfunction onHealthCheck() { return true;}

// On Player Connect is called when a player has passed initial validation// Return true if player should connect, false to rejectfunction onPlayerConnect(connectMsg) { // Perform any validation needed for connectMsg.payload, connectMsg.peerId return true;}

// Called when a Player is accepted into the gamefunction onPlayerAccepted(player) { // This player was accepted -- let's send them a message const msg = session.newTextGameMessage(OP_CODE_PLAYER_ACCEPTED, player.peerId, "Peer " + player.peerId + " accepted"); session.sendReliableMessage(msg, player.peerId); activePlayers++;}

// On Player Disconnect is called when a player has left or been forcibly terminated// Is only called for players that actually connected to the server and not those rejected by validation// This is called before the player is removed from the player listfunction onPlayerDisconnect(peerId) { // send a message to each remaining player letting them know about the disconnect const outMessage = session.newTextGameMessage(OP_CODE_DISCONNECT_NOTIFICATION, session.getServerId(), "Peer " + peerId + " disconnected");

버전66

Amazon GameLift 개발자 안내서Realtime 스크립트 사용자 지정

session.getPlayers().forEach((player, playerId) => { if (playerId != peerId) { session.sendReliableMessage(outMessage, peerId); } }); activePlayers--;}

// Handle a message to the serverfunction onMessage(gameMessage) { switch (gameMessage.opCode) { case OP_CODE_CUSTOM_OP1: { // do operation 1 with gameMessage.payload for example sendToGroup const outMessage = session.newTextGameMessage(OP_CODE_CUSTOM_OP1_REPLY, session.getServerId(), gameMessage.payload); session.sendGroupMessage(outMessage, RED_TEAM_GROUP); break; } }}

// Return true if the send should be allowedfunction onSendToPlayer(gameMessage) { // This example rejects any payloads containing "Reject" return (!gameMessage.getPayloadAsText().includes("Reject"));}

// Return true if the send to group should be allowed// Use gameMessage.getPayloadAsText() to get the message contentsfunction onSendToGroup(gameMessage) { return true;}

// Return true if the player is allowed to join the groupfunction onPlayerJoinGroup(groupId, peerId) { return true;}

// Return true if the player is allowed to leave the groupfunction onPlayerLeaveGroup(groupId, peerId) { return true;}

// A simple tick loop example// Checks to see if a minimum amount of time has passed before seeing if the game has endedasync function tickLoop() { const elapsedTime = getTimeInS() - startTime; logger.info("Tick... " + elapsedTime + " activePlayers: " + activePlayers);

// In Tick loop - see if all players have left early after a minimum period of time has passed // Call processEnding() to terminate the process and quit if ( (activePlayers == 0) && (elapsedTime > minimumElapsedTime)) { logger.info("All players disconnected. Ending game"); const outcome = await session.processEnding(); logger.info("Completed process ending with: " + outcome); process.exit(0); } else { setTimeout(tickLoop, tickTime); }}

// Calculates the current time in secondsfunction getTimeInS() { return Math.round(new Date().getTime()/1000);

버전67

Amazon GameLift 개발자 안내서FlexMatch 매치메이킹 추가

}

exports.ssExports = { configuration: configuration, init: init, onProcessStarted: onProcessStarted, onMessage: onMessage, onPlayerConnect: onPlayerConnect, onPlayerAccepted: onPlayerAccepted, onPlayerDisconnect: onPlayerDisconnect, onSendToPlayer: onSendToPlayer, onSendToGroup: onSendToGroup, onPlayerJoinGroup: onPlayerJoinGroup, onPlayerLeaveGroup: onPlayerLeaveGroup, onStartGameSession: onStartGameSession, onProcessTerminate: onProcessTerminate, onHealthCheck: onHealthCheck};

FlexMatch 매치메이킹 추가게임에 플레이어 매치메이킹 기능을 추가할 때 GameLift FlexMatch를 사용합니다. FlexMatch는 사용자 지정게임 서버 및 Realtime 서버에 대한 관리형 GameLift 솔루션과 함께 사용할 수 있습니다.

FlexMatch는 매치메이킹 서비스를 사용자 지정 가능한 규칙 엔진과 연결합니다. 그렇게 하면 플레이어 속성및 게임 모드를 바탕으로 게임에 적합하게 플레이어들을 서로 매칭하고 FlexMatch를 사용하여 플레이어 그룹 형성의 기본 구조와 플레이어의 게임 내 배치를 관리하는 방식을 설계할 수 있습니다.

FlexMatch는 대기열 기능을 바탕으로 빌드됩니다. 매치가 형성되면 FlexMatch가 매치 세부 정보를 선택한대기열에 전달합니다. 대기열은 Amazon GameLift 플릿에서 사용할 수 있는 호스팅 리소스를 검색하여 매치를 위한 새로운 게임 세션을 시작합니다.

이 단원의 주제에서는 게임 서버 및 게임 클라이언트에 매치메이킹 지원을 추가하는 방법을 설명합니다. 게임에 대한 매치메이커를 생성하려면 Amazon GameLift FlexMatch 매치메이커 설정 (p. 133) 단원을 참조하십시오. FlexMatch 작동 방식에 대한 자세한 내용은 Amazon GameLiftFlexMatch의 작동 방식 (p. 12) 단원을 참조하십시오.

주제• FlexMatch 통합 로드맵 (p. 68)• 게임 클라이언트에 FlexMatch 추가 (p. 69)• 게임 서버에 FlexMatch 추가 (p. 73)• FlexMatch를 사용하여 기존 게임 채우기 (p. 75)

FlexMatch 통합 로드맵FlexMatch는 사용자 지정 게임 서버 및 Realtime 서버에 대한 관리형 GameLift 솔루션과 함께 사용할 수 있습니다. 게임에 FlexMatch 매치메이킹을 추가하려면 다음 작업을 완료하십시오.

• 매치메이커를 설정합니다. 매치메이커는 플레이어에게 매치메이킹 요청을 수신하여 이를 처리합니다. 이규칙은 정의된 규칙 세트를 기반으로 플레이어를 그룹화하며, 성공적인 매치마다 새로운 게임 세션과 플레이어 세션을 생성합니다. 매치메이커를 설정하려면 다음 단계를 따릅니다.• 규칙 세트를 생성합니다. 규칙 세트는 매치메이커에게 유효한 매치 생성 방법을 알려 줍니다. 팀 구성을

지정하며 매치 포함 여부에 대해 플레이어를 평가하는 방법을 지정합니다. 다음 주제를 참조합니다.• FlexMatch 규칙 세트 빌드 (p. 136)

버전68

Amazon GameLift 개발자 안내서게임 클라이언트에 FlexMatch 추가

• FlexMatch 규칙 세트 예제 (p. 143)• 게임 세션 대기열을 생성합니다. 대기열은 각 매치에 최선인 리전을 찾아 해당 리전에서 새 게임 세션을

생성합니다. 매치메이킹에 기존 대기열을 사용하거나 새 대기열을 생성합니다. 이 주제를 참조하십시오.• 대기열 생성 (p. 129)

• 알림을 설정합니다(선택 사항). 매치메이킹 요청은 비동기식이기 때문에 요청 상태를 추적할 방법이 필요합니다. 알림은 기본 옵션입니다. 이 주제를 참조하십시오.• FlexMatch 이벤트 알림 설정 (p. 158)

• 매치메이커를 구성합니다. 규칙 세트, 대기열 및 알림 대상이 있으면 매치메이커 구성을 생성합니다. 다음 주제를 참조합니다.• FlexMatch 매치메이커 설계 (p. 133)• 매치메이킹 구성 생성 (p. 135)

• FlexMatch를 게임 클라이언트 서비스와 통합합니다. 게임 클라이언트 서비스에 매치메이킹과 함께 새 게임 세션을 시작하는 기능을 추가합니다. 매치메이킹에 대한 요청은 사용할 매치메이커를 지정하고 해당 매치에 필요한 플레이어 데이터를 제공합니다. 이 주제를 참조하십시오.• 게임 클라이언트에 FlexMatch 추가 (p. 69)

• FlexMatch를 게임 서버와 통합합니다. 게임 서버에 매치메이킹을 통해 생성된 게임 세션을 시작하는 기능을 추가합니다. 이 게임 세션 유형에 대한 요청에는 플레이어 및 팀 배정을 포함한 매치 관련 정보가 포함됩니다. 게임 서버는 매치를 위해 게임 세션을 작성할 때 이 정보를 액세스하고 사용해야 합니다. 이 주제를 참조하십시오.• 게임 서버에 FlexMatch 추가 (p. 73)

• FlexMatch 채우기 기능을 설정합니다(선택 사항). 기존 게임에서 열린 플레이어 슬롯을 채우기 위해 추가플레이어 매치를 요청합니다. GameLift에서 채우기 요청을 관리하도록 자동 채우기를 설정할 수 있습니다. 또는 게임 클라이언트 서비스 또는 게임 서버에 매치 채우기 요청을 시작하는 기능을 추가하여 수동으로 채우기를 관리할 수 있습니다. 이 주제를 참조하십시오.• FlexMatch를 사용하여 기존 게임 채우기 (p. 75)

Note

FlexMatch 채우기는 현재 Realtime 서버를 사용한 게임에서 사용할 수 없습니다.

게임 클라이언트에 FlexMatch 추가이 주제에서는 게임 클라이언트에 FlexMatch 매치메이킹 지원을 추가하는 방법을 설명합니다. FlexMatch는사용자 지정 게임 서버 및 Realtime 서버에 대한 관리형 GameLift 솔루션과 함께 사용할 수 있습니다

FlexMatch 및 게임에 대해 사용자 지정 매치메이커를 설정하는 방법에 대해 자세히 알아보려면 다음 주제를참조하십시오.

• Amazon GameLiftFlexMatch의 작동 방식 (p. 12)• Amazon GameLift FlexMatch 매치메이커 설정 (p. 133)• FlexMatch 통합 로드맵 (p. 68)

게임 클라이언트에서 FlexMatch를 활성화하려면 게임 클라이언트 프로젝트를 준비하고 다음 기능을 추가해야 합니다.

• 한 명 또는 여러 명의 플레이어에 대한 매치메이킹 요청• 매치메이킹 요청 상태 추적.• 제안된 매치에 대한 플레이어 수락 요청.• 새로운 매치에 대한 게임 세션이 생성되면 플레이어 연결 정보를 얻고 게임에 참여합니다.

버전69

Amazon GameLift 개발자 안내서게임 클라이언트에 FlexMatch 추가

매치메이킹을 위해 클라이언트 서비스 준비게임 클라이언트에서 직접하지 않고 클라이언트 측 게임 서비스를 통해 매치메이킹 요청을 수행하는 것이 좋습니다. 신뢰할 수 있는 소스를 사용하면 해킹 시도 및 가짜 플레이어 데이터를 보다 쉽게 막을 수 있습니다.게임에 세션 디렉터리 서비스가 있는 경우 매치메이킹 요청을 처리하기 위한 좋은 옵션이 됩니다.

클라이언트 서비스를 준비하려면 다음 작업을 수행합니다.

• GameLift API를 추가합니다. 클라이언트 서비스는 AWS SDK에 속한 GameLift API의 기능을 사용합니다.클라이언트 서비스 (p. 27) 단원을 참조하여 AWS SDK에 대해 자세히 알아보고 최신 버전을 다운로드하십시오. 이 SDK를 게임 클라이언트 서비스 프로젝트에 추가합니다.

• 매치메이킹 티켓 시스템을 설정합니다. 모든 매치메이킹 요청에 고유 티켓 ID를 할당해야 합니다. 고유 ID를 생성한 후 새 매치 요청에 할당하는 메커니즘이 필요합니다. 티켓 ID는 최대 128자까지 어떤 문자열 형식도 사용 가능합니다.

• 매치메이커 정보를 가져옵니다. 사용할 계획인 매치메이킹 구성 이름을 가져옵니다. 또한 매치메이커의 규칙 세트에 정의된 필수 플레이어 속성에 대한 매치메이커의 목록이 필요합니다.

• 플레이어 데이터를 가져옵니다. 각 플레이어에 대한 관련 데이터를 가져오는 방법을 설정합니다. 여기에는 플레이어가 게임에 배정될 가능성이 있는 각 리전에 대한 플레이어 ID, 속성 값 및 업데이트된 지연 시간 데이터가 포함됩니다.

• (선택 사항) 매치 채우기를 활성화합니다. 기존 매칭된 게임을 채울 방법을 결정합니다. 매치메이커의 채우기 모드가 "수동"으로 설정된 경우 게임에 채우기 지원을 추가할 수 있습니다. 채우기 모드가 "자동"으로 설정된 경우 개별 게임 세션에 대해 채우기 모드를 해제하는 방법이 필요할 수 있습니다. FlexMatch를 사용하여 기존 게임 채우기 (p. 75)에서 매치 채우기를 관리하는 방법에 대해 자세히 알아보십시오.

플레이어에 대해 매치메이킹 요청FlexMatch 매치메이커에 대한 매치메이킹 요청을 생성하고 관리하기 위해 클라이언트 서비스에 코드를 추가합니다.

매치메이킹 요청 생성:

• GameLift API StartMatchmaking을 호출합니다. 각 요청에는 다음 정보가 포함되어야 합니다.

매치메이커

요청에 사용할 매치메이킹 구성 이름입니다. FlexMatch가 각 요청을 지정된 매치메이커에 대한풀에 배치하며 요청은 매치메이커의 구성 방법에 따라 처리됩니다. 여기에는 시간 제한 적용, 매치에 대한 플레이어 수락 요청 여부, 결과 게임 세션을 배치할 때 사용할 대기열 등이 포함됩니다.FlexMatch 매치메이커 설계 (p. 133)에서 매치메이커 및 규칙 세트에 대해 자세히 알아보십시오.

티켓 ID

요청에 할당된 고유 티켓 ID입니다. 이벤트 및 알림 등 요청과 관련된 모든 항목이 티켓 ID를 참조합니다.

플레이어 데이터

생성할 매치의 대상인 플레이어 목록입니다. 요청에 속한 플레이어 중 한 명이라도 매치 규칙 및 최소 지연 시간에 따라 매치 요구 사항을 충족하지 않는 경우, 매치메이킹을 요청해도 성공적으로 매칭되지 않습니다. 매치 요청에 최대 10명의 플레이어를 포함시킬 수 있습니다. 요청에 여러 플레이어가 속해 있는 경우, FlexMatch는 단일 매치를 생성하여 모든 플레이어를 동일한 팀에 할당하려고시도합니다(무작위 선택). 매치 팀 중 하나에 맞추기에는 요청에 플레이어가 너무 많이 포함되어 있는 경우, 요청이 매칭되지 않습니다. 예를 들어 2v2 매치(2명의 플레이어가 있는 2개의 팀)를 생성하도록 매치메이커를 설정하는 경우, 플레이어가 셋 이상 포함된 매치메이킹 요청을 전송할 수 없습니다.

버전70

Amazon GameLift 개발자 안내서게임 클라이언트에 FlexMatch 추가

Note

한 플레이어(플레이어 ID로 식별)는 한 번에 하나의 액티브 매치메이킹 요청에만 포함될 수있습니다. 플레이어에 대해 새 요청을 생성할 때 동일한 플레이어 ID와 연결된 모든 활성매치메이킹 티켓이 자동으로 취소됩니다.

나열된 각 플레이어에 대해 다음 데이터를 포함합니다.• 플레이어 ID– 각 플레이어는 사용자가 생성한 고유 플레이어 ID를 가지고 있어야 합니다. 플레이

어 ID 생성 (p. 50) 단원을 참조하십시오.• 플레이어 속성 – 사용 중인 매치메이커가 플레이어 속성을 요청하는 경우 해당 요청은 각 플레이

어에게 해당 속성을 제공해야 합니다. 필수 플레이어 속성은 매치메이커의 규칙 세트에 정의되어있으며, 이 규칙 세트는 속성에 대한 데이터 형식도 지정합니다. 플레이어 속성은 규칙 세트가 해당 속성에 대해 기본값을 지정할 때에만 선택 사항입니다. 매치 요청이 모든 플레이어에게 필수플레이어 속성을 제공하지 않는 경우 매치메이킹 요청이 성공할 수 없습니다. the section called“규칙 세트 빌드” (p. 136)에서 매치메이커 규칙 세트 및 플레이어 속성에 대해 자세히 알아보십시오.

• 플레이어 지연 시간 – 사용 중인 매치메이커에 플레이어 지연 시간 규칙이 있는 경우 요청은 각플레이어에 대한 지연 시간을 보고해야 합니다. 플레이어 지연 시간 데이터는 플레이어당 하나 이상의 값 목록입니다. 이 데이터는 매치메이커 대기열에서 플레이어가 리전에 대해 경험하는 지연시간을 나타냅니다. 요청에 플레이어에 대한 지연 시간 값이 포함되어 있지 않는 경우 플레이어가매칭될 수 없으며 요청이 실패합니다.

매치 요청 세부 정보 검색:

• 매치 요청이 전송되면 요청의 티켓 ID로 DescribeMatchmaking을 호출하여 요청 세부 정보를 볼 수 있습니다. 이 요청은 현재 상태를 포함한 요청 정보를 반환합니다. 요청이 성공적으로 완료되면 티켓에도 게임 클라이언트가 매치에 연결하는 데 필요한 정보가 포함됩니다.

매치 요청 취소:

• 요청의 티켓 ID로 StopMatchmaking을 호출하여 언제든지 매치메이킹 요청을 취소할 수 있습니다.

매치메이킹 요청 상태 추적모든 매치메이킹 요청 상태를 추적하고 필요할 경우 응답하기 위해 코드를 클라이언트 서비스에 추가합니다.상태 추적에는 2가지 옵션을 사용할 수 있습니다.

이벤트 알림

매치메이킹 프로세스에 대해 GameLift가 방출하는 이벤트를 추적하도록 알림을 설정합니다. 설정이 간단하고 리소스 사용의 효율적이기 때문에 이 방법을 권장합니다. 직접 알림을 설정하거나 SNS 주제를 생성하거나 Amazon EventBridge를 사용하여 알림을 설정할 수 있습니다. 알림 설정에 대한 자세한 내용은 FlexMatch이벤트 알림 설정 (p. 158) 단원을 참조하십시오. 알림을 설정하면 이벤트를 감지하고 필요할 경우 응답하기 위해 클라이언트 서비스에 리스너를 추가합니다. 30초 후에 알림을 받지 못할 때마다 상태 업데이트를 폴링하는 것도 좋은 방법입니다.

지속적인 폴링

요청의 티켓 ID로 DescribeMatchmaking을 호출하여 현재 상태를 포함한 매치메이킹 요청 티켓을 검색합니다. 폴링은 10초에 1회가 넘지 않도록 하는 것이 좋습니다.

플레이어 수락 요청플레이어 수락이 설정되어 있는 매치메이커를 사용 중인 경우 플레이어 수락 프로세스를 관리하기 위해 코드를 클라이언트 서비스에 추가합니다.

버전71

Amazon GameLift 개발자 안내서게임 클라이언트에 FlexMatch 추가

제안된 매치에 대한 플레이어 수락 요청:

1. 제안된 매치에 플레이어 수락이 필요할 때를 감지합니다. 매치메이킹 티켓을 모니터링하여 상태가REQUIRES_ACCEPTANCE로 변경되는 때를 감지합니다. 알림을 모니터링하는 경우 이 상태가 변하면FlexMatch 이벤트 MatchmakingRequiresAcceptance가 트리거됩니다.

2. 모든 플레이어로부터 수락을 취득합니다. 매치메이킹 티켓의 모든 플레이어에게 제안된 매치 세부 정보를 제공하는 메커니즘을 생성합니다. 플레이어는 제안된 매치를 수락할지 아니면 거부할지를 나타낼 수있어야 합니다. DescribeMatchmaking 호출을 통해 매치 세부 정보를 검색할 수 있습니다. 매치메이커가제안된 매치를 철회하고 나가기 전에 플레이어가 응답할 수 있는 시간에는 제한이 있습니다.

3. FlexMatch에 대한 플레이어의 응답을 보고합니다. 수락 또는 거부로 AcceptMatch를 호출하여 플레이어응답을 보고합니다. 매치가 성사되려면 매치메이킹 요청에 포함된 모든 플레이어가 매치를 수락해야 합니다.

4. 수락이 안 된 티켓을 처리합니다. 제안된 매치의 플레이어가 매치를 거부하거나 수락 시간 제한 내에 응답하지 못하면 요청이 실패합니다.

매치 연결성공적으로 완료된 매치(상태 COMPLETED 또는 이벤트 MatchmakingSucceeded)를 처리하기 위한 코드를클라이언트 서비스에 추가합니다. 여기에는 매치의 플레이어에게 알리고 해당 게임 클라이언트에게 연결 정보를 전달하는 작업이 포함됩니다.

매치메이킹 요청이 완료되면 연결 정보가 매치메이킹 티켓에 추가됩니다. DescribeMatchmaking을 호출하여 완료된 매치메이킹 티켓을 검색합니다. 연결 정보에는 게임 세션의 IP 주소 및 포트는 물론 각 플레이어ID에 대한 플레이어 세션 ID도 포함됩니다. GameSessionConnectionInfo에서 자세히 알아보십시오.

게임 클라이언트는 이 정보를 사용하여 매치를 호스팅하고 있는 게임 세션에 직접 연결합니다. 매칭된 게임세션에 대한 연결 요청에는 플레이어 세션 ID와 플레이어 ID가 포함되어야 합니다. 이 데이터는 연결된 플레이어를 팀 할당을 포함한 게임 세션의 매치 데이터에 연결합니다(GameSession 참조).

샘플 StartMatchmaking 요청이러한 코드 조각은 서로 다른 여러 매치메이커에 대한 매치메이킹 요청을 빌드합니다. 설명에 따라 요청은매치메이커의 규칙 세트에 정의된 대로 사용 중인 매치메이커가 필요로 하는 플레이어 속성을 제공해야 합니다. 제공된 속성은 규칙 세트에 정의된 동일한 데이터 형식인 숫자(N) 또는 문자열(S)을 사용해야 합니다.

# Uses matchmaker for two-team game mode based on player skill leveldef start_matchmaking_for_cowboys_vs_aliens(config_name, ticket_id, player_id, skill, team): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill} }, "PlayerId": player_id, "Team": team }], TicketId=ticket_id)

# Uses matchmaker for monster hunter game mode based on player skill leveldef start_matchmaking_for_players_vs_monster(config_name, ticket_id, player_id, skill, is_monster): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "desiredSkillOfMonster": {"N": skill},

버전72

Amazon GameLift 개발자 안내서게임 서버에 FlexMatch 추가

"wantsToBeMonster": {"N": int(is_monster)} }, "PlayerId": player_id }], TicketId=ticket_id)

# Uses matchmaker for brawler game mode with latencydef start_matchmaking_for_three_team_brawler(config_name, ticket_id, player_id, skill, role): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "character": {"S": [role]}, }, "PlayerId": player_id, "LatencyInMs": { "us-west-2": 20} }], TicketId=ticket_id)

# Uses matchmaker for multiple game modes and maps based on player experiencedef start_matchmaking_for_multi_map(config_name, ticket_id, player_id, skill, maps, modes): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "experience": {"N": skill}, "gameMode": {"SL": modes}, "mapPreference": {"SL": maps} }, "PlayerId": player_id }], TicketId=ticket_id)

게임 서버에 FlexMatch 추가이 주제에서는 게임 서버에 FlexMatch 매치메이킹 지원을 추가하는 방법을 설명합니다. FlexMatch는 사용자 지정 게임 서버 및 Realtime 서버에 대한 관리형 GameLift 솔루션과 함께 사용할 수 있습니다. 게임에FlexMatch를 추가하는 방법에 대해 자세히 알아보려면 다음 주제를 참조하십시오.

• Amazon GameLiftFlexMatch의 작동 방식 (p. 12)• FlexMatch 통합 로드맵 (p. 68)

이 주제의 정보는 게임 서버에 Amazon GameLift 추가 (p. 42)에 설명된 바와 같이 GameLift Server SDK를 게임 서버 프로젝트에 성공적으로 통합했다고 가정합니다. 이 작업이 완료되면 사용자에게 필요한 대부분의 메커니즘을 갖게 됩니다. 이 주제의 단원에서는 FlexMatch로 설정된 게임을 처리하는 데 필요한 나머지작업에 대해 설명합니다.

매치메이킹을 위한 게임 서버 설정게임 서버를 설정하여 매치 게임을 처리하려면 다음 작업을 완료합니다.

1. 매치메이킹으로 생성한 게임 세션을 시작합니다. 새 게임 세션을 요청하기 위해 GameLift는 게임 세션객체를 사용하여 게임 서버에 onStartGameSession() 요청을 전송합니다(GameSession 참조). 게임서버는 사용자 지정 게임 데이터를 비롯한 게임 세션 정보를 사용하여 요청된 게임 세션을 시작합니다.자세한 내용은 게임 세션 시작 (p. 43) 단원을 참조하십시오.

매칭된 게임의 경우 게임 세션 객체에는 매치메이커 데이터 세트도 포함됩니다. 매치메이커 데이터에는게임 서버가 매치를 위해 새 게임 세션을 시작해야 한다는 정보가 포함됩니다. 여기에는 매치의 팀 구조,

버전73

Amazon GameLift 개발자 안내서게임 서버에 FlexMatch 추가

팀 배정 및 게임에 적합할 수 있는 특정 플레이어 속성이 포함됩니다. 예를 들어 게임이 평균 플레이어기술 수준을 기반으로 특정 기능 또는 수준을 잠금 해제하거나 플레이어의 선호에 따라 맵을 선택할 수도 있습니다. 매치메이커 데이터를 사용하는 작업 (p. 74)에서 자세히 알아보십시오.

2. 플레이어 연결 처리. 매칭된 게임에 연결할 때 게임 클라이언트는 플레이어 ID 및 플레이어 세션 ID를 참조합니다(새로운 플레이어 확인 (p. 44) 참조). 게임 서버는 플레이어 ID를 사용하여 들어오는 플레이어를 매치메이커 데이터의 플레이어 정보과 연결합니다. 매치메이커 데이터는 플레이어의 팀 배정을 식별하며 게임에서 플레이어를 올바르게 나타내는 데 필요한 기타 정보를 제공할 수 있습니다.

3. 플레이어가 게임을 중단할 때 보고합니다. 게임 서버가 Server API RemovePlayerSession()을 호출하여 중단된 플레이어를 보고하는지 확인합니다(플레이어 세션 종료 보고 (p. 44) 참조). 이 단계는FlexMatch 채우기를 사용하여 기존 게임에서 빈 슬롯을 채우는 경우 중요합니다. 게임이 클라이언트 측게임 서비스를 통해 채우기 요청을 시작하는 경우 반드시 필요합니다. FlexMatch를 사용하여 기존 게임채우기 (p. 75)에서 FlexMatch 채우기를 구현하는 방법에 대해 자세히 알아보십시오.

4. 기존 매치 게임 세션에 대해 새 플레이어를 요청합니다(선택 사항). 기존 매칭된 게임을 채울 방법을 결정합니다. 매치메이커의 채우기 모드가 "수동"으로 설정된 경우 게임에 채우기 지원을 추가할 수 있습니다. 채우기 모드가 "자동"으로 설정된 경우 개별 게임 세션에 대해 채우기 모드를 해제하는 방법이 필요할 수 있습니다. 예를 들어 게임의 특정 지점에 도달하면 게임 세션 채우기를 중지하고 싶을 수도 있습니다. FlexMatch를 사용하여 기존 게임 채우기 (p. 75)에서 매치 채우기를 관리하는 방법에 대해 자세히알아보십시오.

매치메이커 데이터를 사용하는 작업게임 서버는 GameSession 객체의 게임 정보를 인식하고 이를 사용할 수 있어야 합니다. GameLift 서비스는게임 세션이 시작되거나 업데이트될 때마다 이러한 객체를 게임 서버에 전달합니다. 핵심 게임 세션 정보에는 게임 세션 ID 및 이름, 최대 플레이어 수, 연결 정보 및 사용자 지정 게임 데이터(제공되는 경우)가 포함됩니다.

FlexMatch를 사용하여 생성된 게임 세션의 경우 GameSession 객체에는 매치메이커 데이터 세트도 포함됩니다. 이는 고유한 매치 ID와 더불어 매치를 생성한 매치메이커를 식별하고 팀, 팀 배정 및 플레이어를 설명합니다. 원본 매치메이킹 요청의 플레이어 속성도 포함합니다(플레이어 객체 참조). 플레이어 지연 시간은 포함하지 않습니다. 매치 채우기에 필요한 경우처럼 현재 플레이어의 지연 시간 데이터가 필요한 경우 새로운데이터를 가져오는 것이 좋습니다.

Note

매치메이커 데이터는 전체 매치메이킹 구성 ARN을 지정하며, 이 ARN은 구성 이름, AWS 계정, 리전을 식별합니다. 게임 클라이언트 또는 서비스에서 매치 채우기를 요청할 때 구성 이름만 필요합니다. ":matchmakingconfiguration/" 다음에 오는 문자열을 구문 분석하여 구성 이름을 추출할 수 있습니다. 표시된 예에서 매치메이킹 구성 이름은 "MyMatchmakerConfig"입니다.

다음 JSON은 매치메이커 데이터의 일반적인 집합을 보여 줍니다. 이 예는 두 명의 플레이어를 대상으로 하는 게임을 설명하며, 여기서 플레이어는 스킬 등급과 획득한 최고 레벨에 따라 매치됩니다. 또한 매치메이커는 캐릭터에 따라 매치되며, 매치된 플레이어는 공통적으로 하나 이상의 맵 기본 설정을 갖습니다. 이 시나리오에서는 게임 서버가 가장 선호되는 맵을 확인하여 게임 세션에서 사용하는 것입니다.

{ "matchId":"1111aaaa-22bb-33cc-44dd-5555eeee66ff", "matchmakingConfigurationArn":"arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig", "teams":[ {"name":"attacker", "players":[ {"playerId":"4444dddd-55ee-66ff-77aa-8888bbbb99cc", "attributes":{ "skills":{ "attributeType":"STRING_DOUBLE_MAP", "valueAttribute":{"Body":10.0,"Mind":12.0,"Heart":15.0,"Soul":33.0}} }

버전74

Amazon GameLift 개발자 안내서기존 게임 채우기

}] },{ "name":"defender", "players":[{ "playerId":"3333cccc-44dd-55ee-66ff-7777aaaa88bb", "attributes":{ "skills":{ "attributeType":"STRING_DOUBLE_MAP", "valueAttribute":{"Body":11.0,"Mind":12.0,"Heart":11.0,"Soul":40.0}} } }] }]}

FlexMatch를 사용하여 기존 게임 채우기매치 채우기는 FlexMatch 메커니즘을 사용하여 기존 매치 게임 세션에 대한 신규 플레이어를 찾습니다. 언제든지 플레이어를 모든 게임에 추가할 수 있지만(게임 세션에 플레이어 참여 (p. 49) 참조), 매치 채우기 기능은 새로운 플레이어가 현재 플레이어와 동일한 매치 기준을 충족하도록 보장합니다. 또한 매치 채우기 기능은 새 플레이어를 팀에 할당하고, 플레이어의 수락을 관리하며, 업데이트된 매치 정보를 게임 서버에 전송합니다. 매치메이킹 프로세스 (p. 14)에서 매치 채우기 기능에 대해 자세히 알아보십시오.

Note

FlexMatch 백필은 현재 Realtime 서버를 사용한 게임에서 사용할 수 없습니다.

채우기 메커니즘에는 다음과 같은 두 가지 유형이 있습니다.

• 허용되는 최대 플레이어 수 미만으로 시작하는 게임 세션을 채우려면 자동 채우기를 활성화합니다.• 진행 중인 게임 세션에서 빠진 플레이어를 교체하려면 채우기 요청을 보내는 기능을 게임 서버에 추가합니

다.

자동 채우기 설정자동 매치 채우기를 사용하면 채워지지 않은 플레이어 슬롯이 하나 이상 있는 채로 게임 세션이 시작할 때마다 GameLift에서 채우기 요청을 자동으로 트리거합니다. 이 기능을 사용할 경우 최소 매치 플레이어 수가 충족되면 즉시 게임을 시작하고 남은 슬롯은 나중에 추가 플레이어가 매치될 때 채웁니다. 자동 채우기는 언제든지 중단하도록 선택할 수 있습니다.

예를 들어, 6~10명의 플레이어를 보유할 수 있는 게임을 고려해 봅니다. 매치메이킹은 매칭 기간 내에 게임세션에 대해 6명의 플레이어를 매치하며, 새 게임이 시작됩니다. 자동 채우기를 사용하면 새 게임 세션에서 4명의 추가 플레이어를 즉시 요청할 수 있습니다. 게임의 특성에 따라 신규 플레이어가 게임 세션 중에 언제든지 참여할 수 있도록 허용할 수 있습니다. 또는 초기 설정 단계 이후 및 게임 플레이 시작 전에 자동 채우기를중지할 수 있습니다.

게임에 자동 채우기를 추가하려면 게임을 다음과 같이 업데이트합니다.

1. 자동 채우기 활성화. 자동 채우기는 매치메이킹 구성에서 관리됩니다. 자동 채우기가 활성화되면 해당 매치메이커가 만든 모든 매칭된 게임 세션에 사용됩니다. 게임 서버에서 게임 세션이 시작되면 바로GameLift에서 채워지지 않은 게임 세션에 대한 채우기 요청 생성을 시작합니다.

자동 채우기를 설정하려면 매치 구성을 열고 채우기 모드를 "자동"으로 설정합니다. 자세한 내용은 매치메이킹 구성 생성 (p. 135) 단원을 참조하십시오.

2. 게임 세션을 새 매치메이커 데이터로 업데이트. Amazon GameLift에서 Server SDK 콜백 함수onUpdateGameSession을 사용하여 게임 서버를 매치 정보로 업데이트합니다(서버 프로세스 준비 (p. 42) 참조). 업데이트된 게임 세션 객체를 채우기 활동의 결과로 처리하도록 게임 서버에 코드를추가합니다. 게임 서버의 매치 데이터 업데이트 (p. 80)에서 자세히 알아보십시오.

버전75

Amazon GameLift 개발자 안내서기존 게임 채우기

3. 게임 세션에 대한 자동 채우기 해제. 개별 게임 세션 동안 임의의 시점에서 자동 채우기를 중지하도록선택할 수 있습니다. 자동 채우기를 중지하려면 게임 클라이언트 또는 게임 서버에 코드를 추가하여GameLift API 호출 StopMatchmaking을 만듭니다. 이러한 호출의 경우 티켓 ID가 필요합니다. 최신 채우기 요청의 채우기 티켓 ID를 사용하십시오. 이전 단계의 설명에 따라 업데이트된 게임 세션 매치메이킹데이터에서 이 정보를 가져올 수 있습니다.

채우기 요청 전송(게임 서버에서)게임 세션을 호스팅하는 게임 서버 프로세스에서 바로 매치 채우기 요청을 시작할 수 있습니다. 서버 프로세스에는 게임에 연결된 현재 플레이어 및 비어 있는 플레이어 슬롯의 상태에 대한 최신 정보가 있습니다.

이 주제에서는 필요한 FlexMatch 구성 요소를 이미 빌드했고 게임 서버 및 클라이언트 측 게임 서비스에 매치메이킹 프로세스를 성공적으로 추가했다고 가정합니다. FlexMatch 설정에 대한 자세한 내용은 FlexMatch통합 로드맵 (p. 68) 섹션을 참조하십시오.

게임에 대해 매치 채우기를 활성화하려면 다음 기능을 추가합니다.

• 매치메이킹 채우기 요청을 매치메이커에게 전송하고 요청 상태를 추적합니다.• 게임 세션에 대한 매치 정보를 업데이트합니다.

게임에서 매치 채우기 요청을 시작하는 방법에 관계없이, 게임 서버는 매치 채우기 요청의결과로 Amazon GameLift가 제공하는 게임 세션 업데이트를 처리할 수 있어야 합니다.

Amazon GameLift는 성공 여부에 관계없이— 매치 채우기 요청—을 완료하면 콜백 함수onUpdateGameSession을 사용하여 게임 서버를 호출합니다. 이 호출에는 세 가지 입력파라미터가 있는데, 매치 채우기 티켓 ID, 상태 메시지, 플레이어 정보를 비롯한 최신 매치메이킹 데이터가 포함된 GameSesson 객체가 있습니다. 게임 서버 통합의 일환으로 게임 서버에 다음 코드를 추가해야 합니다.

1. onUpdateGameSession 함수를 구현합니다. 이 함수는 다음 상태 메시지(updateReason)를 처리할 수 있어야 합니다.

• MATCHMAKING_DATA_UPDATED – 새로운 플레이어가 성공적으로 게임 세션에 매치되었습니다. GameSession 객체에는 기존 플레이어 및 새로 일치된 플레이어에 대한 플레이어 데이터를 포함하여 업데이트된 매치메이커 데이터가 포함됩니다.

• BACKFILL_FAILED – 내부 오류로 인해 매치 채우기 시도가 실패했습니다.GameSession 객체는 변경되지 않습니다.

• BACKFILL_TIMED_OUT – 매치메이커가 제한 시간 내에 채워진 매치를 찾지 못했습니다. GameSession 객체는 변경되지 않습니다.

• BACKFILL_CANCELLED – 매치 채우기 요청은 StopMatchmaking(클라이언트) 또는StopMatchBackfill(서버) 호출에 따라 취소되었습니다. GameSession 객체는 변경되지않습니다.

2. 매치를 성공적으로 채우려면 새 플레이어가 게임 세션에 연결될 때 업데이트된 매치메이커 데이터를 사용하여 새 플레이어를 처리해야 합니다. 최소한 새 플레이어에 대한 팀 배정뿐만 아니라 플레이어가 게임을 시작하는 데 필요한 다른 플레이어 속성을 사용해야 합니다.

3. Server SDK 작업 ProcessReady() (p. 249)에 대한 게임 서버의 호출에서, 프로세스 파라미터로 onUpdateGameSession 콜백 메서드를 추가합니다.

(p. 80) 단원을 참조하십시오.

다른 서버 기능과 마찬가지로 게임 서버는 Amazon GameLift Server SDK를 사용합니다. 이 SDK는 C++ 및C#에서 사용할 수 있습니다. 서버 API에 대한 일반적인 설명은 Server API Reference (p. 223)를 참조하십시오.

게임 서버에서 매치 채우기를 요청하려면 다음 작업을 완료하십시오.

버전76

Amazon GameLift 개발자 안내서기존 게임 채우기

1. 매치 채우기 요청을 트리거합니다. 일반적으로, 매치 게임에 하나 이상의 빈 플레이어 슬롯이 있을 때마다 채우기 요청을 시작하려고 합니다. 중요한 캐릭터 역할을 수행하거나 팀의 균형을 맞추는 것과 같은특정 상황에 채우기 요청을 연결하고 싶을 수 있습니다. 또한 게임 세션의 기간에 근거하여 채우기 활동을 제한하려고 할 수도 있습니다.

2. 채우기 요청을 생성합니다. FlexMatch 매치 채우기 요청을 생성하여 FlexMatch 매치메이커에 전송하는코드를 추가합니다. 채우기 요청은 다음 서버 API를 사용하여 처리됩니다.

• StartMatchBackfill() (p. 252)• StopMatchBackfill() (p. 253)

채우기 요청을 생성하려면 다음 정보를 이용해 StartMatchBackfill을 호출합니다. 채우기 요청을취소하려면 채우기 요청의 티켓 ID를 이용해 StopMatchBackfill을 호출합니다.

• 티켓 ID — 매치메이킹 티켓 ID를 제공합니다(또는 자동 생성되도록 선택). 동일한 메커니즘을 사용하여 매치메이킹 및 채우기 요청에 티켓 ID를 할당할 수 있습니다. 매치메이킹 및 채우기용 티켓은 동일한 방식으로 처리됩니다.

• 매치메이커 — 채우기 요청에 사용할 매치메이커를 식별합니다. 일반적으로, 원본 매치를 만드는 데사용된 매치메이커를 사용하려고 할 것입니다. 이 요청에는 매치메이킹 구성 ARN이 필요합니다. 이정보는 게임 세션 객체(GameSession)에 저장되며, 해당 객체는 게임 세션을 활성화할 때 AmazonGameLift에 의해 서버 프로세스에 제공되었습니다. 매치메이킹 구성 ARN은 MatchmakerData 속성에 포함됩니다.

• 게임 세션 ARN — 채우고 있는 게임 세션을 식별합니다. 게임 세션 ARN은 서버 APIGetGameSessionId() (p. 246)을 호출하면 얻을 수 있습니다. 매치메이킹 프로세스에서 새 요청 티켓에는 게임 세션 ID가 없는 반면 채우기 요청 티켓에는 게임 세션 ID가 있습니다. 게임 세션 ID의 존재는 새로운 매치 티켓과 채우기 티켓의 차이를 알 수 있는 방법 중 하나입니다.

• 플레이어 데이터 — 채우고 있는 게임 세션의 모든 기존 플레이어에 대한 플레이어 정보(플레이어)를포함합니다. 이 정보를 통해 매치메이커는 현재 게임 세션에 있는 플레이어에게 가장 적합한 플레이어매치를 찾을 수 있습니다. 게임 서버가 플레이어 연결 상태를 정확하게 보고한 경우 다음과 같이 이 데이터를 획득할 수 있어야 합니다.1. 게임 세션을 호스팅하는 서버 프로세스에는 현재 게임 세션에 연결되어 있는 플레이어에 대한 최신

정보가 있어야 합니다.2. 플레이어 ID, 속성 및 팀 배정을 받으려면 게임 세션 객체(GameSession), MatchmakerData 속성

에서 플레이어 데이터를 가져옵니다(매치메이커 데이터를 사용하는 작업 (p. 74) 참조). 매치메이커 데이터에는 게임 세션과 일치하는 모든 플레이어가 포함되므로 현재 연결된 플레이어에 대해서만 플레이어 데이터를 가져와야 합니다.

3. 플레이어 지연 시간의 경우, 매치메이커가 지연 시간 데이터를 호출하면 모든 현재 플레이어의 새로운 지연 시간 값을 수집하고 해당 값을 각 Player 객체에 포함합니다. 지연 시간 데이터가 생략되고 매치메이커에 지연 시간 규칙이 있는 경우 요청이 일치되지 않습니다. 채우기 요청은 현재 게임 세션이 있는 리전에 대해서만 지연 시간 데이터를 필요로 합니다. GameSession 객체의GameSessionId 속성에서 게임 세션의 리전을 얻을 수 있습니다. 이 값은 리전을 포함하는 ARN입니다.

3. Amazon GameLift는 Server SDK 콜백 함수 onUpdateGameSession을 사용하여 채우기 요청 상태에대한 게임 서버를 업데이트합니다(서버 프로세스 준비 (p. 42) 참조). 게임 서버의 매치 데이터 업데이트 (p. 80)에서 상태 메시지—를 처리하는 코드를 추가합니다. 이 코드는 채우기 요청— 성공에 따라업데이트된 게임 세션 객체 또한 처리합니다.

매치메이커는 한 번에 한 게임 세션의 매치 채우기 요청만 처리할 수 있습니다. 요청을 취소해야 하는 경우 StopMatchBackfill() (p. 253)을 호출합니다. 요청을 변경해야 하는 경우 StopMatchBackfill을호출한 다음 업데이트한 요청을 제출합니다.

채우기 요청 전송(클라이언트 서비스에서)게임 서버에서 채우기 요청을 보내는 대신에 클라이언트 측 게임 서비스에서 채우기 요청을 보낼 수도 있습니다. 이 옵션을 사용하려면 클라이언트 측 서비스가 게임 세션 활동 및 플레이어 연결에 대한 현재 데이터에

버전77

Amazon GameLift 개발자 안내서기존 게임 채우기

액세스할 수 있어야 합니다. 게임에서 세션 디렉터리 서비스를 사용하는 경우 이 옵션은 적절한 선택일 수 있습니다.

이 주제에서는 필요한 FlexMatch 구성 요소를 이미 빌드했고 게임 서버 및 클라이언트 측 게임 서비스에 매치메이킹 프로세스를 성공적으로 추가했다고 가정합니다. FlexMatch 설정에 대한 자세한 내용은 FlexMatch통합 로드맵 (p. 68) 섹션을 참조하십시오.

게임에 대해 매치 채우기를 활성화하려면 다음 기능을 추가합니다.

• 매치메이킹 채우기 요청을 매치메이커에게 전송하고 요청 상태를 추적합니다.• 게임 세션에 대한 매치 정보를 업데이트합니다.

게임에서 매치 채우기 요청을 시작하는 방법에 관계없이, 게임 서버는 매치 채우기 요청의결과로 Amazon GameLift가 제공하는 게임 세션 업데이트를 처리할 수 있어야 합니다.

Amazon GameLift는 성공 여부에 관계없이— 매치 채우기 요청—을 완료하면 콜백 함수onUpdateGameSession을 사용하여 게임 서버를 호출합니다. 이 호출에는 세 가지 입력파라미터가 있는데, 매치 채우기 티켓 ID, 상태 메시지, 플레이어 정보를 비롯한 최신 매치메이킹 데이터가 포함된 GameSesson 객체가 있습니다. 게임 서버 통합의 일환으로 게임 서버에 다음 코드를 추가해야 합니다.

1. onUpdateGameSession 함수를 구현합니다. 이 함수는 다음 상태 메시지(updateReason)를 처리할 수 있어야 합니다.

• MATCHMAKING_DATA_UPDATED – 새로운 플레이어가 성공적으로 게임 세션에 매치되었습니다. GameSession 객체에는 기존 플레이어 및 새로 일치된 플레이어에 대한 플레이어 데이터를 포함하여 업데이트된 매치메이커 데이터가 포함됩니다.

• BACKFILL_FAILED – 내부 오류로 인해 매치 채우기 시도가 실패했습니다.GameSession 객체는 변경되지 않습니다.

• BACKFILL_TIMED_OUT – 매치메이커가 제한 시간 내에 채워진 매치를 찾지 못했습니다. GameSession 객체는 변경되지 않습니다.

• BACKFILL_CANCELLED – 매치 채우기 요청은 StopMatchmaking(클라이언트) 또는StopMatchBackfill(서버) 호출에 따라 취소되었습니다. GameSession 객체는 변경되지않습니다.

2. 매치를 성공적으로 채우려면 새 플레이어가 게임 세션에 연결될 때 업데이트된 매치메이커 데이터를 사용하여 새 플레이어를 처리해야 합니다. 최소한 새 플레이어에 대한 팀 배정뿐만 아니라 플레이어가 게임을 시작하는 데 필요한 다른 플레이어 속성을 사용해야 합니다.

3. Server SDK 작업 ProcessReady() (p. 249)에 대한 게임 서버의 호출에서, 프로세스 파라미터로 onUpdateGameSession 콜백 메서드를 추가합니다.

(p. 80) 단원을 참조하십시오.

다른 클라이언트 기능과 마찬가지로 클라이언트 측 게임 서비스는 Amazon GameLift API를 통해 AWS SDK를 사용합니다. 이 SDK는 C++, C# 및 기타 여러 언어로 제공됩니다. 클라이언트 API의 일반적인 설명은Amazon GameLift Service API Reference를 참조하십시오. 여기에는 Amazon GameLift 관련 작업에 대한 하위 수준 서비스 API가 설명되어 있으며 언어별 참조 가이드의 링크가 포함되어 있습니다.

클라이언트 측 게임 서비스를 설정하여 매치 게임을 채우려면 다음 작업을 완료합니다.

1. 채우기 요청을 트리거합니다. 일반적으로 게임은 매치 게임에 하나 이상의 빈 플레이어 슬롯이 있을 때마다 채우기 요청을 시작합니다. 중요한 캐릭터 역할을 수행하거나 팀의 균형을 맞추는 것과 같은 특정상황에 채우기 요청을 연결하고 싶을 수 있습니다. 또한 게임 세션의 기간에 근거하여 채우기 작업을 제한하려고 할 수도 있습니다. 트리거에 어떤 것을 사용하든 최소한 다음 정보가 필요합니다. 게임 세션 ID로 DescribeGameSessions를 호출하여 게임 세션 객체(GameSession)에서 이 정보를 얻을 수 있습니다.

버전78

Amazon GameLift 개발자 안내서기존 게임 채우기

• 현재 비어 있는 플레이어 슬롯 수. 이 값은 게임 세션의 최대 플레이어 한도와 현재 플레이어 수에서계산할 수 있습니다. 현재 플레이어 수는 게임 서버가 Amazon GameLift 서비스에 접속해서 새로운 플레이어 연결을 확인하거나 중단된 플레이어를 보고할 때마다 업데이트됩니다.

• 정책 생성. 이 설정은 게임 세션이 현재 새 플레이어를 수락하는지 여부를 나타냅니다.

게임 세션 객체에는 게임 세션 시작 시간, 사용자 지정 게임 속성 및 매치메이커 데이터를 포함하여 잠재적으로 유용한 기타 정보가 포함됩니다.

2. 채우기 요청을 생성합니다. FlexMatch 매치 채우기 요청을 생성하여 FlexMatch 매치메이커에 전송하는코드를 추가합니다. 채우기 요청은 다음 클라이언트 API를 사용하여 처리됩니다.

• StartMatchBackfill• StopMatchmaking

채우기 요청을 생성하려면 다음 정보를 이용해 StartMatchBackfill을 호출합니다. 채우기 요청은매치메이킹 요청(플레이어에 대해 매치메이킹 요청 (p. 70) 참조)과 유사하지만 기존 게임 세션을 식별하기도 합니다. 채우기 요청을 취소하려면 채우기 요청의 티켓 ID를 이용해 StopMatchmaking을 호출합니다.

• 티켓 ID — 매치메이킹 티켓 ID를 제공합니다(또는 자동 생성되도록 선택). 동일한 메커니즘을 사용하여 매치메이킹 및 채우기 요청에 티켓 ID를 할당할 수 있습니다. 매치메이킹 및 채우기용 티켓은 동일한 방식으로 처리됩니다.

• 매치메이커 — 사용할 매치메이킹 구성 이름을 식별합니다. 일반적으로 원본 매치를 만드는데 사용한 매치메이커를 채우기용으로 사용하려고 할 것입니다. 이 정보는 매치메이킹 구성ARN 아래 게임 세션 객체(GameSession)인 MatchmakerData 속성에 있습니다. 이름 값은""matchmakingconfiguration/" 다음의 문자열입니다. (예를 들어, ARN 값 "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4"에서 매치메이킹 구성 이름은"MM-4v4"임.)

• 게임 세션 ARN — 채우고 있는 게임 세션을 지정합니다. 게임 세션 객체의 GameSessionId 속성을사용합니다. 이 ID는 사용자에게 필요한 ARN 값을 사용합니다. 채우기 요청에 대한 매치메이킹 티켓(MatchmakingTicket)은 처리되는 동안 게임 세션 ID를 갖습니다. 새로운 매치메이킹 요청 티켓은 매치가 완료될 때까지 게임 세션 ID를 갖지 않습니다. 게임 세션 ID의 존재는 새로운 매치 티켓과 채우기티켓의 차이를 알 수 있는 방법 중 하나입니다.

• 플레이어 데이터 — 채우고 있는 게임 세션의 모든 기존 플레이어에 대한 플레이어 정보(플레이어)를포함합니다. 이 정보를 통해 매치메이커는 현재 게임 세션에 있는 플레이어에게 가장 적합한 플레이어매치를 찾을 수 있습니다. 게임 서버가 플레이어 연결 상태를 정확하게 보고한 경우 다음과 같이 이 데이터를 획득할 수 있어야 합니다.1. 게임 세션 ID를 통해 DescribePlayerSessions()를 호출하여 게임 세션에 현재 연결되어 있는 모든

플레이어를 파악합니다. 각 플레이어 세션에는 플레이어 ID가 포함됩니다. 상태 필터를 추가하여활성 플레이어 세션만 검색할 수 있습니다.

2. 게임 세션 객체(GameSession), MatchmakerData 속성에서 플레이어 데이터를 가져옵니다(매치메이커 데이터를 사용하는 작업 (p. 74) 참조). 이전 단계에서 획득한 플레이어 ID를 사용하여 현재 연결되어 있는 플레이어의 데이터만 가져옵니다. 플레이어가 삭제되면 매치메이커 데이터가 업데이트되지 않으므로 현재 플레이어의 데이터만 추출해야 합니다.

3. 플레이어 지연 시간의 경우 매치메이커가 지연 시간 데이터를 호출하면 모든 현재 플레이어의새로운 지연 시간 값을 수집하고 해당 값을 Player 객체에 포함합니다. 지연 시간 데이터가 생략되고 매치메이커에 지연 시간 규칙이 있는 경우 요청이 일치되지 않습니다. 채우기 요청은 현재 게임 세션이 있는 리전에 대해서만 지연 시간 데이터를 필요로 합니다. GameSession 객체의GameSessionId 속성에서 게임 세션의 리전을 얻을 수 있습니다. 이 값은 리전을 포함하는 ARN입니다.

3. 채우기 요청의 상태를 추적합니다. 매치메이킹 티켓 상태 업데이트를 수신하기 위한 코드를 추가합니다.이 메커니즘 설정을 이용하면 이벤트 알림(기본) 또는 폴링을 통해 새로운 매치메이킹 요청 티켓을 추적

버전79

Amazon GameLift 개발자 안내서기존 게임 채우기

할 수 있습니다(매치메이킹 요청 상태 추적 (p. 71) 참조). 채우기 요청으로 플레이어 수락 활동을 트리거할 필요가 없고 게임 서버에서 플레이어 정보가 업데이트되더라도, 계속 티켓 상태를 모니터링하여요청 실패 및 재제출 작업을 처리해야 합니다.

매치메이커는 한 번에 한 게임 세션의 매치 채우기 요청만 처리할 수 있습니다. 요청을 취소해야 하는 경우 StopMatchmaking을 호출합니다. 요청을 변경해야 하는 경우 StopMatchmaking을 호출한 다음 업데이트한 요청을 제출합니다.

매치 채우기 요청이 성공하면 게임 서버는 업데이트된 GameSession 객체를 수신하고 새 플레이어를게임 세션에 참여시키는 데 필요한 작업을 처리합니다. 자세한 내용은 게임 서버의 매치 데이터 업데이트 (p. 80)에서 확인하십시오.

게임 서버의 매치 데이터 업데이트게임에서 매치 채우기 요청을 시작하는 방법에 관계없이, 게임 서버는 매치 채우기 요청의 결과로 AmazonGameLift가 제공하는 게임 세션 업데이트를 처리할 수 있어야 합니다.

Amazon GameLift는 성공 여부에 관계없이— 매치 채우기 요청—을 완료하면 콜백 함수onUpdateGameSession을 사용하여 게임 서버를 호출합니다. 이 호출에는 세 가지 입력 파라미터가있는데, 매치 채우기 티켓 ID, 상태 메시지, 플레이어 정보를 비롯한 최신 매치메이킹 데이터가 포함된GameSesson 객체가 있습니다. 게임 서버 통합의 일환으로 게임 서버에 다음 코드를 추가해야 합니다.

1. onUpdateGameSession 함수를 구현합니다. 이 함수는 다음 상태 메시지(updateReason)를 처리할 수있어야 합니다.• MATCHMAKING_DATA_UPDATED – 새로운 플레이어가 성공적으로 게임 세션에 매치되었습니다.GameSession 객체에는 기존 플레이어 및 새로 일치된 플레이어에 대한 플레이어 데이터를 포함하여업데이트된 매치메이커 데이터가 포함됩니다.

• BACKFILL_FAILED – 내부 오류로 인해 매치 채우기 시도가 실패했습니다. GameSession 객체는 변경되지 않습니다.

• BACKFILL_TIMED_OUT – 매치메이커가 제한 시간 내에 채워진 매치를 찾지 못했습니다.GameSession 객체는 변경되지 않습니다.

• BACKFILL_CANCELLED – 매치 채우기 요청은 StopMatchmaking(클라이언트) 또는StopMatchBackfill(서버) 호출에 따라 취소되었습니다. GameSession 객체는 변경되지 않습니다.

2. 매치를 성공적으로 채우려면 새 플레이어가 게임 세션에 연결될 때 업데이트된 매치메이커 데이터를 사용하여 새 플레이어를 처리해야 합니다. 최소한 새 플레이어에 대한 팀 배정뿐만 아니라 플레이어가 게임을시작하는 데 필요한 다른 플레이어 속성을 사용해야 합니다.

3. Server SDK 작업 ProcessReady() (p. 249)에 대한 게임 서버의 호출에서, 프로세스 파라미터로onUpdateGameSession 콜백 메서드를 추가합니다.

버전80

Amazon GameLift 개발자 안내서GameLift 호스팅 리소스 정보

GameLift 호스팅 리소스 관리이 단원의 주제에서는 관리형 GameLift 솔루션에 사용할 게임 서버 호스팅 리소스를 설정하고 관리하는 데필요한 자세한 도움말을 제공합니다. Realtime 서버를 사용하여 작업하든 아니면 완전한 사용자 지정 게임서버를 배포하든 리소스를 할당하고 구성한 다음 플레이어 수요에 맞게 용량을 조정해야 합니다.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

주제• Amazon GameLift 호스팅 리소스 정보 (p. 81)• AWS CloudFormation을 사용하여 리소스 생성 (p. 82)• 빌드 및 스크립트를 GameLift에 업로드 (p. 89)• GameLift 플릿 설정 (p. 96)• GameLift 플릿 용량 조정 (p. 115)• 다중 리전 대기열 사용 (p. 124)• Amazon GameLift FlexMatch 매치메이커 설정 (p. 133)• GameLift에 대한 VPC 피어링 (p. 160)

Amazon GameLift 호스팅 리소스 정보이 주제에서는 관리형 GameLift 서비스를 사용하여 게임을 호스팅할 때 함께 작업하는 주요 리소스에 대한간략한 개요를 제공합니다. Amazon GameLift 작동 방식 (p. 3)에서 GameLift가 작동하는 방식에 대해 자세히 알아봅니다.

다음 다이어그램은 GameLift 리소스의 기본 구조와 이러한 리소스가 서로 관련되는 방식을 보여 줍니다. 그림과 같이, 단일 빌드 또는 스크립트를 사용하여 한 플릿 또는 여러 플릿이 배포되도록 리소스 세트를 구조화할 수 있습니다.

빌드

GameLift에서 실행하고 플레이어를 위한 게임 세션을 호스팅하는 사용자 지정으로 빌드된 게임 서버소프트웨어입니다. 게임 빌드는 특정 운영 체제에서 게임 서버를 실행하는 파일 세트를 나타냅니다.

버전81

Amazon GameLift 개발자 안내서

게임에 대한 취향이 다양한 경우 등을 위해 서로 다른 여러 개의 빌드를 가질 수 있습니다. 게임 빌드를 GameLift 서비스와 통합해야 합니다. 게임을 배포하려고 계획하는 각 리전에서 게임 빌드 파일을GameLift 서비스에 업로드합니다.

스크립트

Realtime 서버에 사용할 구성과 사용자 지정 게임 로직입니다. GameLift에서는 사용자 지정 게임 서버를제공하는 대신 사용하도록 Realtime 서버를 제공합니다. JavaScript로 스크립트를 생성하여 게임 클라이언트에 맞게 Realtime 서버를 구성하고 플레이어의 게임 세션을 호스팅하는 데 적절한 사용자 지정 게임 로직을 추가합니다. 게임을 배포하려고 계획하는 각 리전에서 Realtime 스크립트를 GameLift 서비스에 업로드합니다.

플릿

게임 서버를 실행하고 플레이어를 위해 게임 세션을 호스팅하는 가상 호스팅 리소스 컬렉션입니다. 한리전에서 사용자 지정 게임 빌드 또는 Realtime 서버 스크립트를 배포하기 위한 플릿을 생성하고, 게임에 맞게 플릿이 작동하는 방식을 구성합니다. 플릿 크기를 관리하는 조정 규칙을 설정합니다. 플릿 크기에 따라 플릿이 지원할 수 있는 게임 세션 및 플레이어 수가 결정됩니다. 한 빌드에 대해 두 개 이상의 플릿을 생성할 수 있습니다. 예를 들어 한 빌드에 대해 스팟 플릿 하나와 온디맨드 플릿 하나를 생성할 수있습니다. 여러 리전에서 게임을 배포할 때는 게임을 배포하려고 계획하는 각 리전에서 플릿을 생성합니다.

별칭

플릿의 추상적인 식별자입니다. 별칭이 가리키는 플릿을 언제든지 변경할 수 있습니다. 사용자 지정 게임 빌드를 업데이트할 때마다 플릿이 교체되므로, 별칭을 만들어서 특정 플릿(예: 게임 세션 대기열에서)을 참조해야 하는 경우 항상 별칭을 사용하는 것이 좋습니다. 플릿을 교체하고 실행할 준비가 되면 새 플릿을 가리키도록 별칭을 전환하고 중단 없이 플레이어를 리디렉션합니다. 별칭이 가리키는 플릿과 동일한 리전에서 별칭을 만듭니다.

게임 세션 대기열

게임 세션을 호스팅할 수 있는 대상(플릿 또는 별칭) 목록입니다. 새 게임 세션에 대한 요청은 특정 플릿ID 또는 게임 세션 대기열 ID를 제공하여 세션을 배치할 위치를 지정해야 합니다. 여러 리전을 교차하여대상을 가리킬 수 있는 대기열을 사용하면 게임 세션을 더 빠르고 효율적으로 배치할 수 있습니다. 플레이어 지연 시간 제한을 적용하도록 대기열을 설정하여 용인할 수 없는 게임 지연으로부터 플레이어를 보호할 수 있습니다. FlexMatch 매치메이킹 또는 스팟 플릿을 사용하는 게임에는 대기열이 필요합니다. 어떤 리전에서든지 게임 세션 대기열을 생성할 수 있습니다.

매치메이킹 구성

FlexMatch에서 매치메이킹 요청을 처리하는 방식에 대한 구성입니다. 두 가지 주요 구성 설정은 매치메이킹 규칙 세트와 게임 세션 대기열입니다. 매치메이킹 규칙 세트는 매치의 잠재적인 플레이어를 평가하는 방법을 GameLift에 알려줍니다. 게임 세션 대기열은 매치를 위한 새 게임 세션을 호스트할 위치를GameLift에 알려줍니다. 매치메이킹 구성을 두 개 이상 설정할 수 있습니다. 새 매치를 요청할 때마다 사용할 매치메이킹 구성을 지정해야 합니다. 어떤 리전에서든지 매치메이킹 구성을 생성할 수 있습니다.

매치메이킹 규칙 세트

게임에 가장 적합한 매치를 빌드하는 방법에 대한 지침입니다. 규칙 세트는 매치의 팀 구조와 크기를 정의하고 잠재 플레이어를 평가하기 위한 규칙을 포함합니다. 규칙은 개별 플레이어 또는 전체 팀에 대한요구 사항을 설정할 수 있습니다. 또한 규칙 세트는 플레이어 대기 시간을 최소화하기 위해 시간 경과에따라 규칙을 완화하는 시간과 방법에 대한 지침도 설정할 수 있습니다. 규칙 세트는 매치메이킹 구성에서 사용합니다. 규칙을 사용하는 매치메이킹 구성과 동일한 리전에서 매치메이킹 규칙 세트를 생성합니다.

AWS CloudFormation을 사용하여 리소스 생성AWS CloudFormation를 사용하여 GameLift 리소스 (p. 81)를 관리할 수 있습니다. GameLift 콘솔 및 CLI명령은 개별 리소스를 생성하고 업데이트하는 데 유용한 도구입니다. 하지만 AWS CloudFormation을 사용

버전82

Amazon GameLift 개발자 안내서모범 사례

하면 게임 호스팅을 지원하는 전체 리소스 세트를 관리할 수 있습니다. AWS CloudFormation에서는 각 리소스를 모델링하는 템플릿을 만든 다음 해당 템플릿을 사용하여 리소스를 생성합니다. 리소스를 업데이트하려면 템플릿을 변경하고 AWS CloudFormation을 사용하여 업데이트를 구현합니다. 리소스를 스택 및 스택 세트라는 논리 그룹으로 구성할 수 있습니다.

AWS CloudFormation을 사용하여 GameLift 호스팅 리소스를 유지 관리하면 AWS 리소스 세트를 더 효율적인 방법으로 관리할 수 있습니다. 버전 제어를 사용하여 시간 경과에 따른 템플릿 변경을 추적하고 여러 팀원이 수행하는 업데이트를 조정할 수 있습니다. 템플릿을 재사용할 수도 있습니다. 예를 들어 여러 리전에서 게임을 배포할 때 동일한 템플릿을 사용하여 각 리전에서 같은 리소스를 생성할 수 있습니다. 또한 이러한 템플릿을 사용하여 동일한 리소스 세트를 다른 파티션에 배포할 수 있습니다.

AWS CloudFormation에 대한 자세한 내용은 AWS CloudFormation 사용 설명서 단원을 참조하십시오.GameLift 리소스에 대한 템플릿 정보를 보려면 Amazon GameLift 리소스 유형 참조를 참조하십시오.

다음 주제에서는 GameLift와 함께 AWS CloudFormation을 사용하는 모범 사례를 다루고 리소스 템플릿을구성하기 위한 몇 가지 권장 사항을 제시합니다.

모범 사례AWS CloudFormation 사용에 대한 자세한 지침은 AWS CloudFormation 사용 설명서의 AWSCloudFormation 모범 사례를 참조하십시오. 또한 이러한 모범 사례는 GameLift와 특별한 관련성이 있습니다.

• AWS CloudFormation을 사용하여 리소스를 일관적으로 관리합니다. 이것은 핵심적인 AWSCloudFormation 모범 사례이지만 반복이 포함됩니다. GameLift 콘솔, GameLift API 호출 또는 CLI 명령을사용하는 것과 같이 AWS CloudFormation 외부에서 리소스를 변경하면 리소스가 리소스 템플릿과 동기화되지 않습니다. 이 경우 다음에 AWS CloudFormation 템플릿을 사용하여 리소스를 업데이트할 때 예기치않은 결과가 발생할 수 있습니다.

• AWS CloudFormation 스택 및 스택 세트를 사용하여 여러 리소스를 효율적으로 관리할 수 있습니다.• 스택을 사용하여 연결된 리소스 그룹을 관리합니다. AWS CloudFormation는 리소스 속성이 변경 가능

한지 여부에 따라 스택에서 서로를 참조하는 리소스를 지능적으로 업데이트합니다. 예를 들어 빌드가 포함된 스택, 빌드를 참조하는 플릿 및 플릿을 참조하는 별칭이 있다고 가정합니다. GameLift에서 빌드와플릿 간의 관계는 변경할 수 없습니다. 템플릿을 업데이트하여 빌드를 교체하면 AWS CloudFormation는 교체된 빌드에 연결되는 플릿도 교체합니다. 그런 다음 AWS CloudFormation는 새 플릿을 가리 키도록 기존 별칭을 업데이트합니다. 자세한 내용은 AWS CloudFormation 사용 설명서의 스택 작업을 참조하십시오.

• 여러 리전 또는 AWS 계정에서 동일한 스택을 배포하는 경우 AWS CloudFormation 스택 세트를 사용합니다. 자세한 내용은 AWS CloudFormation 사용 설명서의 스택 작업을 참조하십시오.

• 스팟 인스턴스를 사용하는 경우 온디맨드 플릿을 백업으로 포함시킵니다. 각 리전에 스팟 인스턴스가 있는플릿 하나 및 온디맨드 인스턴스가 있는 플릿 하나라는 두 개의 플릿이 있는 템플릿을 설정하는 것이 좋습니다. GameLift의 FleeTQ 기능을 사용하면 게임 세션이 실행 가능한 스팟 인스턴스에 항상 먼저 배치되도록 할 수 있습니다. 온디맨드 플릿은 스팟 플릿을 사용할 수 없는 경우 대체 역할을 합니다.

• 여러 리전에서 리소스를 관리하는 경우 리전별 리소스와 글로벌 리소스를 별도의 스택으로 그룹화합니다.GameLift 플릿과 같은 일부 리소스는 동일한 리전의 기타 리소스만 참조할 수 있습니다. GameLift 대기열과 같은 기타 리소스는 기타 리전의 리소스를 참조할 수 있습니다. 이러한 리소스를 별도의 스택에 배치하면 글로벌 리소스를 배치하는 경우 더 많은 유연성을 얻을 수 있습니다.

• 글로벌 리소스를 사용하는 서비스와 가까운 곳에 글로벌 리소스를 배치합니다. 글로벌 리소스를 배치 할때는 이러한 리소스에 액세스하는 방식을 명심해야 합니다. 대기열 및 매치메이킹 구성과 같은 리소스는백엔드 서비스와 같은 특정 소스에서 대량의 요청을 수신하는 경향이 있습니다. 리소스를 이러한 요청의소스와 가까운 곳에 배치하면 요청 이동 시간을 최소화하고 전반적인 성능을 향상할 수 있습니다.

• 매치메이킹 구성을 이 구성이 사용하는 게임 세션 대기열과 동일한 리전에 배치합니다. 매치메이킹 구성은새로운 게임 세션에 대한 요청을 대기열에 전송하므로 이러한 리소스를 함께 배치하면 시스템 성능을 최적화하는 데도 도움이 됩니다.

• 스택의 각 플릿에 대해 별도의 별칭을 만듭니다. 별칭을 사용하면 게임 빌드와 플릿을 교체할 때 플레이어트래픽을 훨씬 더 쉽게 전환할 수 있습니다.

버전83

Amazon GameLift 개발자 안내서AWS CloudFormation 스택 사용

AWS CloudFormation 스택 사용다음은 GameLift 관련 리소스에 대한 AWS CloudFormation 스택을 설정할 때 사용하도록 권장되는 구조입니다. 최적의 스택 구조는 게임을 한 리전에만 배포하는지 또는 여러 리전에 배포하는지에 따라 다릅니다.

단일 영역에 대한 스택단일 리전에서 GameLift 리소스를 관리하려면 다음과 같은 2스택 구조를 사용하는 것이 좋습니다.

• 지원 스택 – 이 스택에는 GameLift 리소스가 종속되는 리소스가 포함되어 있습니다. 최소한 이 스택에는사용자 지정 게임 서버 또는 Realtime 스크립트 파일을 저장하는 S3 버킷이 포함되어야 합니다. 이 스택에는 GameLift 빌드 또는 스크립트 리소스를 생성할 때 S3 버킷에서 파일을 검색할 수 있는 GameLift 권한을부여하는 IAM 역할도 포함되어야 합니다. 또한 이 스택에는 DynamoDB 테이블, Amazon Redshift 클러스터 및 Lambda 함수와 같이 게임에 사용되는 기타 AWS 리소스도 포함될 수 있습니다.

• GameLift 스택 – 이 스택에는 빌드 또는 스크립트, 플릿 세트, 별칭, 게임 세션 대기열을 포함한 모든GameLift 리소스가 포함되어 있습니다. AWS CloudFormation는 S3 버킷 위치에 저장된 파일을 사용하여 빌드 또는 스크립트 리소스를 생성하고 빌드 또는 스크립트를 하나 이상의 플릿 리소스에 배포합니다.각 플릿에는 해당 별칭이 있어야 합니다. 게임 세션 대기열은 플릿 별칭 중 일부 또는 전부를 참조합니다.FlexMatch를 매치메이킹에 사용하는 경우 이 스택에는 매치메이킹 구성 및 규칙 세트도 포함됩니다.

아래 다이어그램은 단일 AWS 리전에 리소스를 배포하기 위한 2스택 구조를 보여 줍니다.

여러 리전에 대한 스택두 개 이상의 리전에 게임을 배포할 때는 리소스가 리전 간에 상호 작용할 수 있는 방식을 명심해야 합니다.GameLift 플릿과 같은 일부 리소스는 동일한 리전의 기타 리소스만 참조할 수 있습니다. GameLift 대기열과같은 기타 리소스는 리전과 무관합니다. 여러 리전에서 GameLift 리소스를 관리하려면 다음 구조를 사용하는 것이 좋습니다.

버전84

Amazon GameLift 개발자 안내서AWS CloudFormation 스택 사용

• 리전별 지원 스택 – 이 스택 에는 GameLift 리소스가 종속되는 리소스가 포함되어 있습니다. 이 스택에는사용자 지정 게임 서버 또는 Realtime 스크립트 파일을 저장하는 S3 버킷이 포함되어야 합니다. 또한 이스택에는 DynamoDB 테이블, Amazon Redshift 클러스터 및 Lambda 함수와 같이 게임에 사용되는 기타AWS 리소스도 포함될 수 있습니다. 이러한 리소스 중 대부분은 리전별로 특정하므로 모든 리전에서 리소스를 생성해야 합니다. GameLift에는 이러한 지원 리소스에 액세스하도록 허용하는 IAM 역할도 필요합니다. IAM 역할은 리전과 무관하므로 어떠한 리전에든 배치되고 기타 모든 지원 스택에서 참조되는 역할 리소스 하나만 있으면 됩니다.

• 리전별 GameLift 스택 –이 스택에는 빌드 또는 스크립트, 플릿 세트 및 별칭을 포함하여 게임이 배포되는각 리전에 존재해야 하는 GameLift 리소스가 포함되어 있습니다. AWS CloudFormation는 S3 버킷 위치에파일이 있는 빌드 또는 스크립트 리소스를 생성하고 빌드 또는 스크립트를 하나 이상의 플릿 리소스에 배포합니다. 각 플릿에는 해당 별칭이 있어야 합니다. 게임 세션 대기열은 플릿 별칭 중 일부 또는 전부를 참조합니다. 이러한 유형의 스택을 설명하도록 하나의 템플릿을 유지 관리하고 이 템플릿을 사용하여 모든리전에서 동일한 리소스 세트를 생성할 수 있습니다.

• 글로벌 GameLift 스택 – 이 스택에는 게임 세션 대기열과 매치메이킹 리소스가 포함되어 있습니다. 이러한리소스는 어떠한 리전에든 위치할 수 있으며 일반적으로 동일한 리전에 배치됩니다. 대기열은 어떠한 리전에든 위치하는 플릿 또는 별칭을 참조할 수 있습니다. 추가 대기열을 다른 리전에 배치하려면 추가 글로벌스택을 생성합니다.

아래 다이어그램은 여러 AWS 리전에서 리소스를 배포하기 위한 다중 스택 구조를 보여 줍니다. 첫 번째 다이어그램은 단일 게임 세션 대기열의 구조를 보여 줍니다. 두 번째 다이어그램은 여러 개의 대기열이 있는 구조를 보여 줍니다.

버전85

Amazon GameLift 개발자 안내서AWS CloudFormation 스택 사용

버전86

Amazon GameLift 개발자 안내서빌드 업데이트

빌드 업데이트GameLift 빌드는 빌드와 플릿 간의 관계와 마찬가지로 변경할 수 없습니다. 따라서 새로운 게임 빌드 파일 세트를 사용하도록 호스팅 리소스를 업데이트할 때 다음과 같은 작업이 필요합니다.

• 새 파일 세트를 사용하여 새 빌드를 생성합니다(교체).• 새 게임 빌드를 배포할 새 플릿 세트를 생성합니다(교체).• 새 플릿을 가리키도록 별칭을 리디렉션합니다(중단 없이 업데이트).

버전87

Amazon GameLift 개발자 안내서빌드 업데이트

자세한 내용은 AWS CloudFormation 사용 설명서의 스택 리소스의 업데이트 동작을 참조하십시오.

자동으로 빌드 업데이트 배포관련 빌드, 플릿 및 별칭 리소스가 포함된 스택을 업데이트할 때 기본 AWS CloudFormation 동작은 이러한단계를 순차적으로 자동으로 수행하는 것입니다. 먼저 새 빌드 파일을 새 S3 위치에 업로드하여 이 업데이트를 트리거합니다. 그런 다음 새 S3 위치를 가리키도록 AWS CloudFormation 빌드 템플릿을 수정합니다. 스택을 새 S3 위치로 업데이트하면 다음 AWS CloudFormation 시퀀스가 트리거됩니다.

1. S3에서 새 파일을 검색하고, 파일의 유효성을 검사한 다음, 새 GameLift 빌드를 생성합니다.2. 플릿 템플릿에서 빌드 참조를 업데이트합니다. 그러면 새 플릿 생성이 트리거됩니다.3. 새 플릿이 활성화된 후 별칭에서 플릿 참조를 업데이트합니다. 그러면 별칭이 새 플릿을 대상으로 하도록

업데이트가 트리거됩니다.4. 이전 플릿을 삭제합니다.5. 이전 빌드를 삭제합니다.

게임 세션 대기열이 플릿 별칭을 사용하는 경우 별칭이 업데이트되는 즉시 플레이어 트래픽은 새 플릿으로자동으로 전환됩니다. 게임 세션이 종료되면 기존 플릿에서 플레이어가 점차적으로 드레이닝됩니다. Auto-Scaling은 플레이어 트래픽의 변동에 따라 각 플릿 세트에서 인스턴스를 추가하고 제거하는 작업을 처리합니다. 또는 원하는 초기 인스턴스 수를 지정하여 전환을 위해 빠르게 확장하고 나중에 Auto-Scaling을 활성화할수 있습니다.

리소스를 삭제하는 대신 AWS CloudFormation에서 리소스를 보존할 수도 있습니다. 자세한 내용은 AWSCloudFormation API Reference의 RestainResources를 참조하십시오.

수동으로 빌드 업데이트 배포새 플릿이 플레이어를 위해 실행되는 시간을 더 세밀하게 제어하려는 경우 몇 가지 옵션을 선택할 수 있습니다. GameLift 콘솔 또는 CLI를 사용하여 수동으로 별칭을 관리하도록 선택할 수 있습니다. 또는 빌드와 플릿을 교체하도록 빌드 템플릿을 업데이트하는 대신, 두 번째 빌드 및 플릿 정의 세트를 템플릿에 추가할 수 있습니다. 템플릿을 업데이트하면 AWS CloudFormation에서 두 번째 빌드 리소스와 해당 플릿이 생성됩니다.기존 리소스는 교체되지 않으므로 삭제되지 않으며 별칭은 여전히 원래 플릿을 가리킵니다.

이 접근 방식의 주요 장점은 유연성을 제공한다는 것입니다. 빌드의 새 버전에 대해 별도의 리소스를 생성하고, 새 리소스를 테스트한 다음, 새 플릿을 플레이어에게 실행하는 시점을 제어할 수 있습니다. 잠재적인 단점은 짧은 기간 동안 각 리전에서 두 배 정도 많은 리소스가 필요하다는 것입니다.

다음 다이어그램에서 이 프로세스를 보여 줍니다.

버전88

Amazon GameLift 개발자 안내서빌드 및 스크립트 업로드

롤백 작동 방식리소스 업데이트를 실행할 때 한 단계가 성공적으로 완료되지 않으면 AWS CloudFormation에서 자동으로롤백이 시작됩니다. 이 프로세스는 각 단계를 순차적으로 반전하여 새로 생성된 리소스를 삭제합니다.

롤백을 수동으로 트리거해야하는 경우 빌드 템플릿의 S3 위치 키를 다시 원래 위치로 변경하고 스택을 업데이트합니다. 새 GameLift 빌드와 플릿이 생성되고, 플릿이 활성화된 후 별칭이 새 플릿으로 전환됩니다. 별칭을 따로 관리하는 경우 새 플릿을 가리키도록 별칭을 전환해야 합니다.

실패하거나 중단되는 롤백을 처리하는 방법에 대한 자세한 내용은 AWS CloudFormation 사용 설명서의 업데이트 롤백 계속을 참조하십시오.

빌드 및 스크립트를 GameLift에 업로드관리형 GameLift 서비스를 통해 호스팅하기 위해 Amazon GameLift 지원 멀티플레이어 게임 서버를 배포하기 전에 GameLift에 게임 서버 파일을 업로드해야 합니다. 이 단원의 주제에서는 사용자 지정 게임 서버 빌드파일 또는 Realtime 서버 서버 스크립트 파일을 준비하고 업로드하는 방법에 대한 지침을 제공합니다. 파일을 업로드할 때 GameLift 빌드 또는 스크립트 리소스를 생성합니다.

주제• GameLift에 사용자 지정 서버 빌드 업로드 (p. 89)• Realtime 서버 스크립트를 Amazon GameLift에 업로드 (p. 93)

GameLift에 사용자 지정 서버 빌드 업로드게임 서버가 GameLift와 통합된 후에는 게임 호스팅을 위해 배포할 수 있도록 빌드 파일을 관리형 GameLift서비스에 업로드합니다. 이 주제에서는 게임의 빌드 파일을 패키징하고, 선택적 빌드 설치 스크립트를 생성한 다음, AWS CLI 또는 AWS SDK를 사용하여 파일을 업로드하는 방법을 다룹니다.

빌드 설치 스크립트 추가게임 빌드의 운영 체제에 맞게 다음과 같이 설치 스크립트를 생성합니다.

• Windows의 경우 "install.bat"라는 배치 파일을 생성합니다.• Linux의 경우 "install.sh"라는 shell 스크립트 파일을 생성합니다.

설치 스크립트를 생성할 때는 다음 사항을 염두에 두십시오.

• 스크립트는 어떤 사용자 입력도 가져올 수 없습니다.• 빌드는 다음 위치에서 호스팅 서버에 설치됩니다. 빌드 패키지의 파일 디렉터리가 다시 생성됩니다.

• Windows 플릿의 경우: C:\game• Linux 플릿의 경우: /local/game

• 설치 프로세스 중에 사용자로 실행을 통해 인스턴스 파일 구조에 대한 액세스를 제한했습니다. 설치 스크립트는 빌드 파일이 설치된 디렉터리에 대한 전체 권한을 가집니다. 설치 스크립트가 관리자 권한이 필요한 작업을 수행하는 경우에는 관리자 액세스(Linux의 경우 sudo, Windows의 경우 runas)를 지정해야 합니다. 설치 스크립트와 관련해 권한 실패가 발생하면 스크립트에 문제가 있음을 나타내는 이벤트 메시지가생성됩니다.

• Linux에서는 bash 같은 공통 shell 인터프리터 언어가 지원됩니다. 설치 스크립트 맨 위에 shebang(예:#!/bin/bash)을 추가합니다. 선호하는 shell 명령이 지원되는지 확인해야 하는 경우에는 활성 Linux 인스턴스에 원격으로 액세스하여 shell 프롬프트를 열 수 있습니다. 자세히 알아보려면 GameLift 플릿 인스턴스에 원격으로 액세스 (p. 113) 단원을 참조하십시오.

버전89

Amazon GameLift 개발자 안내서사용자 지정 서버 빌드 업로드

• 설치 스크립트는 VPC 피어링 연결을 사용할 수 없습니다. 이 빌드에 대한 플릿을 생성할 때 VPC 피어링을설정하려는 경우, 빌드가 플릿 인스턴스에 설치될 때까지 이 연결을 사용할 수 없습니다.

예제 스크립트

여기 예제에는 Windows 및 Linux에서 사용되는 공통 스크립트가 나와 있습니다.

Windows

여기 나온 install.bat 파일은 게임 서버에 필요한 Visual C++ 런타임 구성 요소를 설치하고 로그 파일에 결과를 기록하는 방법을 보여줍니다. 루트의 빌드 패키지에는 구성 요소 파일이 포함되어 있습니다.

vcredist_x64.exe /install /quiet /norestart /log c:\game\vcredist_2013_x64.log

Linux

여기 나온 install.sh 파일은 설치 스크립트에서 bash를 사용하고 로그 파일에 결과를 기록하는 방법을 보여줍니다.

#!/bin/bashecho 'Hello World' > install.log

게임 빌드 파일 패키징하기호스팅을 위해 GameLift 지원 게임 서버를 GameLift 서비스에 업로드하려면 먼저 게임 빌드 파일을 빌드 디렉터리로 패키징해야 합니다. 이 디렉터리에는 다음을 포함하여 게임 서버를 실행하고 게임 세션을 호스팅하는 데 필요한 모든 구성 요소가 포함되어야 합니다.

• 게임 서버 바이너리 – 게임 서버를 실행하는 데 필요한 바이너리 파일. 같은 플랫폼에서 실행되도록 구축된 경우에 한해, 하나의 빌드에 여러 게임 서버의 바이너리를 포함할 수 있습니다(지원 플랫폼 (p. 23) 참조).

• 종속성 – 게임 서버 실행 파일을 실행하는 데 필요한 모든 종속 파일입니다. 예를 들어 자산, 구성 파일, 종속 라이브러리 등이 있습니다.

• 설치 스크립트 – 게임 빌드를 GameLift 호스팅 서버에 완전히 설치하기 위해 필요한 작업을 처리하는 스크립트 파일입니다. 이 파일은 빌드 디렉터리의 루트에 배치되어야 합니다. 설치 스크립트는 플릿 생성 과정중에 실행이 됩니다.

다른 AWS 서비스의 리소스에 안전하게 액세스하기 위해 설치 스크립트를 포함하여 빌드에서 애플리케이션을 설정할 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 플릿에서 AWS 리소스에 액세스 (p. 45) 단원을 참조하십시오.

빌드 파일을 패키징한 후에는 게임 서버가 새로 설치된 대상 운영 체제(개발에 사용된 시스템이 아님)에서 실행될 수 있는지 확인하십시오. 이 단계는 필요한 모든 종속성을 패키지에 포함시키고 설치 스크립트가 정확한지 확인하는 데 도움이 됩니다.

Note

업로드를 위해 게임 빌드 파일을 Amazon S3 버킷에 저장하는 경우 빌드 파일을 하나의 .zip 파일로 패키징해야 합니다. 이 방법을 사용하여 업로드하는 지침은 Amazon S3 내 파일을 사용하여 빌드 생성 (p. 92) 단원을 참조하십시오.

GameLift 빌드 생성빌드를 생성하고 파일을 업로드할 때 몇 가지 옵션이 있습니다.

• 파일 디렉터리에서 빌드 생성 (p. 91)를 선택하십시오. 이 방법은 가장 간단하며 일반적으로 사용되는방법입니다.

버전90

Amazon GameLift 개발자 안내서사용자 지정 서버 빌드 업로드

• Amazon S3 내 파일을 사용하여 빌드 생성 (p. 92)를 선택하십시오. 이 옵션을 사용하면 AWS 계정에서S3에 있는 빌드 버전을 관리할 수 있습니다.

두 방법을 모두 사용하면 고유의 빌드 ID 및 기타 메타데이터를 사용하여 새 빌드 리소스가 생성됩니다. 이필드는 초기화 상태가 됩니다. GameLift에서 게임 서버 파일을 성공적으로 획득하면 빌드가 준비 상태로전환됩니다. 이제 새로운 GameLift 플릿을 생성하여 빌드를 배포할 수 있습니다(사용자 지정 게임 빌드용GameLift 플릿 배포 (p. 101) 참조).

플릿을 생성할 때 어떤 빌드를 플릿에 배포할지를 지정합니다. GameLift는 새 플릿을 설정할 때 빌드 파일을각 플릿 인스턴스에 다운로드하고 빌드 설치 스크립트(제공된 경우)를 기반으로 빌드 파일을 설치합니다. 빌드 파일은 다음 위치의 인스턴스에 설치됩니다.

• Windows 플릿의 경우: C:\game• Linux 플릿의 경우: /local/game

파일 디렉터리에서 빌드 생성

로컬 디렉터리 등 임의의 위치에 저장된 패키지된 게임 서버 파일을 사용하여 게임 빌드를 생성하려면 AWSCommand Line InterfaceAWS CLI 명령 upload-build를 사용합니다. 이 명령은 GameLift에 새 빌드 레코드를생성하고 지정한 위치에서 파일을 업로드합니다.

1. 업로드 요청을 보냅니다. 명령줄 창에 다음 명령 및 파라미터를 입력합니다.

aws gamelift upload-build --operating-system [supported OS] --build-root [build path] --name [user-defined name of build] --build-version [user-defined build number] --region [region name]

• 빌드 루트 – 빌드 파일의 디렉터리 경로입니다.• 운영 체제 – 게임 서버 빌드의 OS를 지정합니다. 이 빌드에 대해 새 플릿이 생성되면 적절한 OS를 사

용하여 플릿 인스턴스가 구성됩니다. GameLift는 여러 Windows 및 Linux 버전을 지원합니다. 이 파라미터는 선택 항목입니다. 운영 체제를 지정하지 않은 경우 GameLift는 기본값(WINDOWS_2012)을 사용합니다. 빌드가 생성된 후에는 나중에 이 값을 업데이트할 수 없습니다.

• 이름 – 새 빌드를 설명하는 이름을 입력합니다. 빌드 이름은 고유하지 않아도 되며, 빌드 리소스를 업데이트하여 언제든지 이 값을 업데이트할 수 있습니다.

• 빌드 버전 – 이 선택적 필드를 사용하여 빌드 파일의 버전 세부 정보를 지정합니다. 게임 서버의 새 버전마다 새 빌드 리소스가 필요하기 때문에 이 정보는 중요한 차별화 요소를 제공할 수 있습니다.

• 리전 – 빌드를 생성하려는 GameLift 지원 리전을 식별합니다. 플릿을 배포하려고 계획하는 리전에서빌드를 생성해야 합니다. 여러 리전에서 게임을 배포하는 경우 각 리전에서 빌드를 생성해야 합니다.

Note

여러 리전에서 작업하는 경우 항상 현재 기본 리전을 확인하는 것이 좋습니다. AWS 콘솔에서 현재 리전은 항상 오른쪽 상단 모서리에 표시되며, 선택할 수 있는 리전의 드롭다운목록이 함께 표시됩니다. AWS CLI를 사용하는 경우 configure get(aws configure getregion)을 사용하여 현재 기본값을 확인합니다. configure set(aws configure setregion [region name]) 명령을 사용하여 기본 리전을 변경합니다.

업로드 요청에 대한 응답으로 GameLift 서비스는 업로드 진행률을 제공하고, 업로드에 성공하면 새 빌드 레코드 ID를 반환합니다. 업로드 시간은 게임 파일의 크기와 연결 속도에 따라 달라집니다.

예제:

aws gamelift upload-build --operating-system AMAZON_LINUX --build-root ~/mygame --name "My Game Nightly Build" --build-version "build 255" --region us-west-2

버전91

Amazon GameLift 개발자 안내서사용자 지정 서버 빌드 업로드

aws gamelift upload-build --operating-system WINDOWS_2012 --build-root "C:\mygame" --name "My Game Nightly Build" --build-version "build 255" --region us-west-2

2. 빌드 상태를 확인합니다. describe-build(또는 DescribeBuild)를 사용하여 현재 상태를 비롯해 새 빌드 레코드를 볼 수 있습니다. GameLift 콘솔에서도 상태를 볼 수 있습니다.

명령줄 창에 다음 명령 및 파라미터를 입력합니다.

aws gamelift describe-build --build-id [build ID returned with the upload request] --region [region name]

예:

aws gamelift describe-build --build-id "build-3333cccc-44dd-55ee-66ff-7777aaaa88bb" --region us-west-2

요청에 대한 응답으로 GameLift 서비스는 요청된 빌드 레코드를 반환합니다. 이 레코드에는 상태, 업로드된 파일 크기, 생성 타임스탬프를 포함한 일단의 빌드 메타데이터가 포함됩니다.

Amazon S3 내 파일을 사용하여 빌드 생성AWS 계정의 Amazon S3 버킷에 저장된 패키징된 게임 서버 파일을 사용하여 게임 빌드를 생성하려면 AWSCLI 명령 create-build를 사용합니다. 이 작업은 GameLift에서 새 빌드를 생성하고 지정한 Amazon S3 버킷에서 빌드 파일을 획득합니다.

1. 빌드 파일을 Amazon S3에 저장합니다. 패키징된 빌드 파일을 포함하는 .zip 파일을 생성하고 AWS 계정의 Amazon S3 버킷에 업로드합니다. GameLift 빌드를 생성할 때 필요하므로 버킷 레이블과 파일 이름을 기록해 둡니다.

2. 빌드 파일에 대한 액세스 권한을 GameLift에 부여합니다. Amazon GameLift 액세스를 위한 역할 설정 (p. 22)의 지침에 따라 IAM 역할을 생성합니다. 역할은 어떤 개체(예: GameLift 서비스)가 역할을 수임할 수 있는지를 지정하고 AWS 리소스에 대한 제한적인 액세스를 부여하는 권한 세트를 정의합니다. 역할을 생성했으면 빌드를 생성할 때 필요하므로 새 역할의 Amazon 리소스 이름(ARN)을 기록해 둡니다.

3. 새 빌드를 생성하라는 요청을 전송합니다. AWS CLI 명령 create-build(또는 AWS SDK 작업CreateBuild)를 사용하여 새 빌드 레코드를 생성합니다. 빌드 파일이 저장되는 S3 위치를 지정합니다.명령줄 창에 다음 명령 및 파라미터를 입력합니다.

aws gamelift create-build --operating-system [supported OS] --storage-location "Bucket=[S3 bucket label],Key=[Build zip file name],RoleArn=[Access role ARN]" --name [user-defined name of build] --build-version [user-defined build number] --region [region name]

• 빌드 루트 – 빌드 파일의 디렉터리 경로입니다.• 운영 체제 – 게임 서버 빌드의 OS를 지정합니다. 이 빌드에 대해 새 플릿이 생성되면 적절한 OS를 사

용하여 플릿 인스턴스가 구성됩니다. GameLift는 여러 Windows 및 Linux 버전을 지원합니다. 이 파라미터는 선택 항목입니다. 운영 체제를 지정하지 않은 경우 GameLift는 기본값(WINDOWS_2012)을 사용합니다. 빌드가 생성된 후에는 나중에 이 값을 업데이트할 수 없습니다.

• 이름 – 새 빌드를 설명하는 이름을 입력합니다. 빌드 이름은 고유하지 않아도 되며, 빌드 리소스를 업데이트하여 언제든지 이 값을 업데이트할 수 있습니다.

• 빌드 버전 – 이 선택적 필드를 사용하여 빌드 파일의 버전 세부 정보를 지정합니다. 게임 서버의 새 버전마다 새 빌드 리소스가 필요하기 때문에 이 정보는 중요한 차별화 요소를 제공할 수 있습니다.

• S3 위치• 버킷 – 빌드가 포함되어 있는 S3 버킷의 이름입니다. 예: "my_build_files".• 키 – 빌드 파일이 포함되어 있는 .zip 파일의 이름입니다. 예: "mygame_build_7.0.1, 7.0.2".

버전92

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 업로드

• 역할 ARN – 생성한 IAM 역할에 할당된 ARN입니다. 예: "arn:aws:iam::111122223333:role/GameLiftAccess".

• 리전 – 빌드를 생성하려는 GameLift 지원 리전을 식별합니다. 플릿을 배포하려고 계획하는 리전에서빌드를 생성해야 합니다. 여러 리전에서 게임을 배포하는 경우 각 리전에서 빌드를 생성해야 합니다.

Note

여러 리전에서 작업하는 경우 항상 현재 기본 리전을 확인하는 것이 좋습니다. AWS 콘솔에서 현재 리전은 항상 오른쪽 상단 모서리에 표시되며, 선택할 수 있는 리전의 드롭다운목록이 함께 표시됩니다. AWS CLI를 사용하는 경우 configure get(aws configure getregion)을 사용하여 현재 기본값을 확인합니다. configure set(aws configure setregion [region name]) 명령을 사용하여 기본 리전을 변경합니다.

예:

aws gamelift create-build --operating-system WINDOWS_2012 --storage-location "Bucket=my_game_build_files,Key=mygame_build_101.zip,RoleArn=arn:aws:iam::111122223333:role/gamelift" --name "My Game Nightly Build" --build-version "build 101" --region us-west-2

요청에 대한 응답으로 GameLift 서비스는 빌드의 현재 상태를 포함하여 새로 생성된 빌드 레코드를 반환합니다.

빌드 파일 업데이트GameLift 빌드가 생성된 후에는 빌드와 연결된 빌드 파일을 변경할 수 없습니다. 그 대신, 새 파일 세트마다 새 GameLift 빌드를 생성해야 합니다. upload-build 명령을 사용하여 빌드 파일을 제공하는 경우GameLift에서 각 요청에 대한 새 빌드 레코드가 자동으로 생성되므로 사용자가 특별히 수행할 작업은 없습니다. create-build 명령을 사용하여 빌드 파일을 제공할 경우 다른 이름의 새 .zip 파일을 Amazon S3로 업로드하고 새 파일을 이름을 참조하여 빌드를 생성합니다.

다음은 업데이트된 빌드를 배포할 때의 팁입니다.

• 필요에 따라 대기열을 사용하고 및 플릿을 스왑합니다. GameLift를 사용하여 게임 클라이언트를 설정할때는 플릿 대신 대기열을 지정합니다. 대기열을 사용하면 새 플릿을 생성하여 새 빌드를 실행한 후 새 플릿을 대기열에 추가하고 기존 플릿을 제거할 수 있습니다. 자세한 내용은 다중 리전 대기열 사용 (p. 124)단원을 참조하십시오.

• 별칭을 사용하여 플레이어를 새 게임 빌드로 자동 이전합니다. 게임 클라이언트를 GameLift와 통합할 때는 플릿 ID 대신 플릿 별칭을 지정합니다. 별칭을 사용하면, 다음 세 단계만으로 플레이어를 새 빌드로 이전할 수 있습니다. (1) 새 빌드를 생성합니다. (2) 새 빌드를 배포할 플릿을 만듭니다. (3) 별칭 대상을 기존플릿에서 새 플릿으로 변경합니다. 자세한 내용은 GameLift 플릿에 별칭 추가 (p. 109) 단원을 참조하십시오.

• 자동화된 빌드 업데이트를 설정합니다. 샘플 스크립트가 포함된 GameTech 블로그 게시물 AutomatingDeployments to GameLift에 따라 GameLift 배포를 빌드 시스템에 통합합니다.

Realtime 서버 스크립트를 Amazon GameLift에 업로드게임에 대한 Realtime 서버 스크립트를 완료했으면 Realtime 서버를 사용하여 배포하기 위해 AmazonGameLift에 스크립트 파일을 업로드합니다. 이 작업은 Amazon GameLift 스크립트 레코드를 생성하고 스크립트 파일을 제공하여 수행됩니다. 스크립트 파일 제공 시 두 가지 옵션이 있습니다.

• 로컬 디렉터리에 저장된 zip 파일을 사용하여 스크립트를 생성합니다.• Amazon S3 버킷에 저장된 zip 파일을 사용하여 스크립트를 생성합니다.

버전93

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 업로드

새 스크립트를 생성하면 Amazon GameLift가 고유한 스크립트 ID(예:script-1111aaaa-22bb-33cc-44dd-5555eeee66ff)를 할당하고 생성 타임스탬프와 업로드된 파일크기 및 기타 메타데이터를 추가합니다. 업로드 시간은 스크립트 파일의 크기와 연결 속도에 따라 달라집니다.

이 시점에서 새로운 Amazon GameLift Realtime 서버 플릿을 사용하여 스크립트를 배포할 수 있습니다.Amazon GameLift는 플릿의 각 인스턴스에 해당 서버 스크립트를 설치하고 /local/game에 스크립트 파일을 저장합니다.

서버 스크립트와 관련될 수 있는 플릿 활성화 문제를 해결하려면 GameLift 플릿 문제 디버깅 (p. 110) 단원을 참조하십시오.

스크립트 파일 패키징서버 스크립트에는 한 개 이상의 파일이 포함될 수 있습니다. 업로드하기 위해 JavaScript가 실행하는 데 필요한 모든 파일을 하나의 zip 파일로 압축합니다.

로컬 스크립트 파일 업로드Amazon GameLift 콘솔 또는 AWS CLI 도구를 사용하여 스크립트를 생성할 수 있습니다.

GameLift Console

스크립트를 만들려면

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. GameLift 기본 메뉴를 사용하여 스크립트: 스크립트 생성 페이지를 열고 스크립트 생성 양식에 액

세스합니다.3. 스크립트 구성에서 스크립트 이름과 버전 정보를 입력합니다. 스크립트의 내용이 업데이트될 수 있

으므로 버전 데이터를 사용하여 업데이트를 추적하면 유용합니다.4. 스크립트 코드에서 스크립트 형식 "Zip 파일"을 선택합니다. 이 옵션을 사용하여 로컬 디렉터리에

저장된 zip 파일을 지정할 수 있습니다.5. 스크립트를 포함하는 zip 파일을 찾아서 선택합니다.6. 새로운 스크립트 레코드를 모두 정의했으면 Submit을 클릭합니다. 그러면 Amazon GameLift가 새

스크립트에 ID를 할당하고, 지정한 zip 파일을 업로드하기 시작합니다. 콘솔의 스크립트 페이지에서새 스크립트의 상태를 비롯한 레코드를 볼 수 있습니다.

AWS CLI

AWS CLI를 사용하여 스크립트를 생성하려면 명령줄 창을 열고 create-script 명령을 사용하여 새스크립트를 정의하고 서버 스크립트 파일을 업로드합니다. 이 명령에 대한 전체 문서는 AWS CLI 명령참조 설명서를 참조하십시오. AWS Command Line Interface 도구를 다운로드하여 설치합니다.

스크립트를 만들려면

1. AWS CLI를 호출할 수 있는 디렉터리에 zip 파일을 넣습니다.2. 명령줄 창에서 zip 파일이 있는 디렉터리로 이동합니다.3. create-script 명령과 파라미터를 입력합니다. -zip-file 파라미터에서 zip 파일 이름에

"fileb://" 문자열을 추가해야 합니다. 이 문자열은 파일을 바이너리로 식별하여 압축된 내용이 제대로 처리되도록 합니다.

aws gamelift create-script --name [user-defined name of script] --script-version [user-defined version info] --zip-file fileb://[name of zip file] --region [region name]

버전94

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 업로드

요청에 대한 응답으로 Amazon GameLift 서비스거 새로운 스크립트 객체를 반환합니다.

예제:

aws gamelift create-script --name My_Realtime_Server_Script_1 --script-version 1.0.0 --zip-file fileb://myrealtime_script_1.0.0.zip --region us-west-2

describe-script를 호출하거나, Amazon GameLift 콘솔에서 새 스크립트를 볼 수 있습니다.

Amazon S3에 스크립트 파일 업로드Amazon S3 버킷에 스크립트 파일을 저장한 후 Amazon GameLift에 업로드할 수 있습니다. 스크립트를 생성할 때, S3 버킷 위치를 지정하면 Amazon GameLift가 S3에서 해당 스크립트 파일을 직접 가져옵니다.

스크립트를 만들려면

1. Amazon S3 버킷에 스크립트 파일을 저장합니다. 서버 스크립트를 포함하는 zip 파일을 해당 AWS 계정의 Amazon S3 버킷에 업로드합니다. 버킷 이름과 파일 이름("키")을 기록해 둡니다. 이 정보는 AmazonGameLift 빌드를 생성할 때 필요합니다.

2. Amazon GameLift에 스크립트 파일에 대한 액세스 권한을 부여합니다. Amazon GameLift 액세스를 위한 역할 설정 (p. 22)의 지침을 수행하여 Amazon GameLift가 서버 스크립트를 포함하는 Amazon S3 버킷에 액세스할 수 있도록 허용하는 IAM 역할을 생성합니다. 역할을 생성했으면 스크립트를 생성할 때필요하므로 새 역할의 Amazon 리소스 이름(ARN)을 기록해 둡니다.

3. 스크립트를 생성합니다. 콘솔이나 AWS CLI를 사용하여 새로운 스크립트 레코드를 생성합니다.

GameLift Console

1. GameLift 기본 메뉴를 사용하여 스크립트: 스크립트 생성 페이지를 열고 스크립트 생성 양식에 액세스합니다.

2. 스크립트 구성에서 스크립트 이름과 버전 정보를 입력합니다. 스크립트의 내용이 업데이트될 수 있으므로 버전 데이터를 사용하여 업데이트를 추적하면 유용합니다.

3. 스크립트 코드에서 스크립트 유형 "사용자 스토리지"를 선택합니다. 이 옵션을 사용하여 스크립트파일을 포함하는 S3 버킷을 지정할 수 있습니다.

4. S3 버킷의 스토리지 위치 정보를 입력합니다.

• S3 버킷 – 버킷 이름.• S3 키 – 버킷에 있는 파일(서버 스크립트를 포함하는 압축 파일)의 이름.• S3 역할 ARN – 2단계에서 생성한 IAM 역할의 ARN 값.• S3 객체 버전 –(선택 사항) S3 파일의 특정 버전 번호. 이 버전 번호는 S3 버킷에 객체 버전 관리

기능이 활성화되어 있고 최신 버전이 아닌 다른 버전을 지정하려는 경우에만 사용됩니다.5. 새로운 스크립트 레코드를 모두 정의했으면 제출을 클릭합니다. 그러면 Amazon GameLift가 새 스

크립트에 ID를 할당하고, 지정한 zip 파일을 업로드하기 시작합니다. 콘솔의 스크립트 페이지에서새 스크립트의 상태를 비롯한 레코드를 볼 수 있습니다.

AWS CLI

create-script 명령을 사용하여 새로운 스크립트를 정의하고 서버 스크립트 파일을 업로드합니다.이 명령에 대한 전체 문서는 AWS CLI 명령 참조 설명서를 참조하십시오.AWS Command Line Interface도구를 다운로드하여 설치합니다.

1. 명령줄 창을 열고 AWS CLI 도구를 사용할 수 있는 디렉터리로 이동합니다.

버전95

Amazon GameLift 개발자 안내서플릿 설정

2. create-script 명령과 --name, --script-version, --storage-location 파라미터를 입력합니다. 스토리지 위치 파라미터는 스크립트의 Amazon S3 버킷 위치를 지정합니다.

aws gamelift create-script --name [user-defined name of script] --script-version [user-defined version info] --storage-location "Bucket=[S3 bucket name],Key=[name of zip file in S3 bucket],RoleArn=[Access role ARN]" --region [region name]

요청에 대한 응답으로 Amazon GameLift 서비스거 새로운 스크립트 객체를 반환합니다.

예제:

aws gamelift create-script --name My_Realtime_Server_Script_1 --script-version 1.0.0 --storage-location "Bucket=gamelift-script,Key=myrealtime_script_1.0.0.zip,RoleArn=arn:aws:iam::123456789012:role/S3Access" --region us-west-2

describe-script를 호출하거나, Amazon GameLift 콘솔에서 새 스크립트를 볼 수 있습니다.

스크립트 파일 업데이트GameLift 콘솔 또는 AWS CLI 명령 update-script를 사용하여 메타데이터 또는 스크립트 내용을 언제든 업데이트할 수 있습니다. 스크립트 내용을 업데이트할 때 모든 새로운 게임 세션에 새 스크립트가 사용되지만 스크립트 업데이트 전에 생성되어 현재 실행 중인 게임 세션에는 영향을 주지 않습니다.

사용자 계정으로 스크립가 Amazon S3 버킷에 저장되면 새 압축 파일을 버킷으로 업로드하여 스크립트 내용을 업데이트할 수 있습니다. 스크립트가 로컬 압축 파일로 제공되면 새 파일을 GameLift로 업로드해야 합니다.

새 스크립트 레코드를 생성하지 않고 스크립트 내용이 있는 위치를 변경할 수도 있습니다.

GameLift 플릿 설정이 단원에서는 관리형 GameLift 솔루션과 함께 사용하기 위한 플릿의 설계, 빌드 및 관리에 대한 상세한 정보를 제공합니다. 관리형 GameLift 플릿은 사용자 지정 게임 서버 및 Realtime 서버를 배포하는 데 사용됩니다.

플릿은 EC2 인스턴스 형태의 호스팅 리소스입니다. 플릿 크기는 지정한 인스턴스의 수에 따라 달라지며, 수동이나 auto-scaling으로 플레이어 수요에 맞춰 플릿 크기를 조정할 수 있습니다.

프로뎍선 환경에서 대부분의 게임은 여러 개의 플릿이 필요합니다. 예를 들어 하나 이상의 리전에 플레이어를 호스팅하려 하거나, 게임 서버 빌드 또는 스크립트 버전이 여러 개일 경우(예: 무료 및 프리미엄 버전) 여러 개의 플릿이 필요합니다.

게임 요구 사항에 가장 적합한 플릿을 생성하는 방법에 대한 자세한 내용은 GameLift 플릿 설계 가이드 (p. 96) 단원을 참조하십시오. 플릿을 시작하여 실행한 후에는 플릿 별칭 (p. 109)을 생성하고, 플릿을게임 세션 대기열 (p. 124)에 추가하고, 플릿 용량을 관리 (p. 115)할 수 있습니다.

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

GameLift 플릿 설계 가이드이 설계 가이드에서는 관리형 GameLift 솔루션과 함께 사용하기 위한 호스팅 리소스 플릿을 생성할 때의 주요 결정 사항을 다룹니다. 호스팅 리소스의 적절한 조합을 선택하고 게임에 가장 적합하게 구성하는 방법을알아보십시오.

버전96

Amazon GameLift 개발자 안내서플릿 설계 가이드

도움말

샘플 게임을 사용하여 Realtime 서버 등을 비롯한 Amazon GameLift 기능을 살펴보는 방법을 알아봅니다 (p. 30).

주제• 컴퓨팅 리소스 선택 (p. 97)• GameLift 플릿에서 여러 프로세스 실행 (p. 98)• GameLift에 스팟 인스턴스 사용 (p. 100)

컴퓨팅 리소스 선택GameLift는 인스턴스라고 하는 Amazon Elastic Compute Cloud(Amazon EC2) 리소스를 사용하여 게임 서버를 배포하고 플레이어를 위한 게임 세션을 호스팅합니다. 새로운 플릿을 설정할 때 게임에 필요한 인스턴스 유형과 (런타임 구성을 통해) 게임 서버 프로세스를 실행하는 방법을 결정합니다. 플릿이 활성화되어 게임세션을 호스팅할 준비가 되면 언제든지 인스턴스를 추가하거나 제거하여 플레이어 수를 조정할 수 있습니다.플릿의 모든 인스턴스는 동일한 유형의 리소스와 동일한 런타임 구성을 사용합니다. 플릿의 런타임 구성을편집할 수는 있지만 리소스 유형은 변경할 수 없습니다.

플릿에 대한 리소스를 선택할 때 게임 운영 체제, 인스턴스 유형(컴퓨팅 하드웨어), 온디맨드 또는 스팟 인스턴스 사용 여부 등 여러 요소를 고려해야 합니다. GameLift를 사용한 호스팅 비용은 주로 사용하는 리소스 유형에 따라 다릅니다. GameLift 요금에 대해 자세히 알아보십시오.

운영 체제GameLift는 Microsoft Windows 또는 Amazon Linux에서 실행되는 게임 서버 빌드를 지원합니다(지원되는 게임 서버 운영 체제 참조 (p. 23)). GameLift에 게임 빌드를 업로드할 때 게임에 대한 운영 체제를 명시합니다.게임 빌드를 배포하기 위해 플릿을 생성하면 GameLift가 자동으로 빌드 운영 체제를 사용하여 인스턴스를설정합니다.

리소스 비용은 사용 중인 운영 체제에 따라 다릅니다. 지원되는 운영 체제에서 사용할 수 있는 리소스에 대해자세히 알아보십시오.

• Microsoft Windows• Amazon Linux

인스턴스 유형플릿의 인스턴스 유형에 따라 플릿의 모든 인스턴스에 사용할 하드웨어 종류가 결정됩니다. 인스턴스 유형은컴퓨팅 성능, 메모리, 스토리지 및 네트워킹 기능의 다양한 조합을 제공합니다. GameLift를 사용하면 다양한인스턴스 유형 옵션을 선택할 수 있습니다. 인스턴스 유형, 현재 사용량 및 사용량 제한을 보려면 사용 가능한 인스턴스 유형 목록을 보거나 GameLift 콘솔에서 서비스 제한 페이지를 엽니다. 각 인스턴스 유형의 기능에 대한 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하십시오. 제공되는 인스턴스 유형은 리전에 따라다를 수 있습니다.

게임의 인스턴스 유형을 선택할 때는 (1) 게임 서버 빌드의 컴퓨팅 요구 사항 및 (2) 각 인스턴스에서 실행하려는 서버 프로세스의 수를 고려합니다. 더 큰 인스턴스 유형을 사용하여 각 인스턴스에서 여러 서버 프로세스를 실행할 수 있으므로 플레이어 요구 사항을 충족해야 하는 인스턴스 수를 줄일 수 있습니다. 그러나 인스턴스 유형이 클수록 비용도 더 많이 듭니다. 플릿에서 여러 프로세스 실행 (p. 98)에 대해 자세히 알아보십시오.

온디맨드 인스턴스 및 스팟 인스턴스새 플릿을 생성할 때 플릿 유형을 온디맨드 또는 스팟 인스턴스로 사용하도록 지정합니다. 온디맨드 인스턴스와 스팟 인스턴스는 선택한 인스턴스 유형에 따라 정확히 동일한 하드웨어 및 성능을 제공하며 정확히 동일한 방식으로 구성됩니다. 가용성과 비용은 다릅니다.

버전97

Amazon GameLift 개발자 안내서플릿 설계 가이드

온디맨드 인스턴스

온디맨드 인스턴스는 간단히 말해 요청에 의해 인스턴스가 생성되는 것입니다. 필요할 때 언제든지 온디맨드인스턴스를 획득하고 원하는 만큼 유지할 수 있습니다. 온디맨드 인스턴스에는 고정 비용이 적용됩니다. 장기 약정 없이 사용하는 시간 만큼에 비용을 지불합니다.

스팟 인스턴스

스팟 인스턴스는 현재 사용되지 않는 AWS 컴퓨팅 용량을 활용함으로써 온디맨드 인스턴스에 대한 매우 비용 효율적인 대안을 제공할 수 있습니다. 스팟 인스턴스는 장단점을 가지고 있습니다. 즉, 스팟 인스턴스는저렴하게 이용할 수 있지만 게임 호스팅에서 사용하기에는 적합하지 않습니다. 스팟 인스턴스를 사용할 때는 이러한 특성의 영향을 이해하는 것이 중요합니다. 첫째, 스팟 가격은 각 리전의 각 인스턴스 유형에 대한수요와 공급에 따라 변동됩니다. 둘째, AWS에서 해당 용량이 다시 필요할 때마다 AWS에 의해 2분 알림으로스팟 인스턴스를 중단할 수 있습니다.

이 GameLift FleetIQ 기능은 이러한 두 가지 문제를 해결하여 스팟 인스턴스를 게임 호스팅에 사용할 수 있도록 합니다. 플릿 그룹이 포함된 대기열과 함께 사용하면 FleetIQ는 각 새 게임 세션을 호스팅하기 위해 사용 가능한 최상의 플릿을 찾습니다. 대기열에 스팟 플릿이 있는 경우, FleetIQ는 비용이 가장 저렴하고 중단가능성이 낮은 인스턴스 사용에 우선 순위를 지정합니다. 예를 들어 T4, C4 및 C5 스팟 플릿이 혼합되어 포함되어 있는 대기열의 경우 FleetIQ는 각 플릿 유형에 대한 과거 중단율을 평가하고 게임 호스팅에 사용할 수없다는 이유로서 T4 플릿을 무시합니다. FleetIQ는 C4 및 C5 스팟 인스턴스의 현재 비용을 평가하고 가장 저렴한 플릿으로 게임 세션을 배치하도록 선택합니다.

GameLift 콘솔에서 인스턴스 유형의 요금 기록을 확인할 수 있습니다. 스팟 기록(Spot history) 페이지에서는온디맨드 요금과 스팟 요금을 그래프로 나타내고 스팟 인스턴스를 사용할 때의 상대적 비용 절감을 계산합니다. 컨트롤을 사용하여 인스턴스 유형, 운영 체제 및 시간 범위를 선택합니다.

스팟 인스턴스의 인스턴스별 지표뿐만 아니라 대기열 지표를 사용하여 FleetIQ 성능을 평가할 수 있습니다.GameLift 지표 (p. 172)에 대해 자세히 알아보십시오.

GameLift에 스팟 인스턴스 사용 (p. 100) 단원에서 스팟 인스턴스를 사용하는 방법을 자세히 알아보십시오.

인스턴스 서비스 할당량AWS는 AWS 계정에서 사용할 수 있는 총 Amazon EC2 인스턴스 수(온디맨드 또는 스팟)를 제한합니다. 또한 각 인스턴스 유형에는 리전에 따라 다른 최대 제한이 있습니다. 요청별로 이러한 할당량을 확장할 수 있습니다.

다음과 같이 서비스 할당량에 대한 정보에 액세스할 수 있습니다.

• AWS 엔드포인트 및 할당량에는 GameLift 및 기타 AWS 서비스에 대한 일반적인 할당량 정보가 나와 있습니다.

• GameLift 콘솔에서 리전별로 인스턴스 유형에 해당하는 할당량 값을 조회합니다. Service Limits(서비스제한) 페이지로 이동하여 사용 가능한 인스턴스 유형의 할당량을 확인할 리전을 선택합니다. 이 페이지에는 리전 내 각 인스턴스 유형의 현재 사용량 값도 표시됩니다.

• AWS CLI 명령 describe-ec2-instance-limits를 사용하여 리전별 인스턴스 유형의 할당량 값을 검색합니다.이 작업은 현재 리전에서 활성 상태인 인스턴스 수도 반환합니다.

GameLift 플릿에서 여러 프로세스 실행인스턴스당 여러 프로세스를 실행하도록 플릿의 실행 시간 구성을 설정할 수 있습니다. 플릿을 구성하는 방법에 따라 여러 프로세스를 실행하면 호스팅 리소스를 보다 효율적으로 사용하고 전체 호스팅 비용을 잠재적으로 줄이는 데 도움이 될 수 있습니다.

플릿의 여러 프로세스 관리 방식GameLift는 플릿의 실행 시간 구성을 사용하여 플릿의 각 인스턴스에서 실행할 프로세스의 유형과 수를 결정합니다. 최소한 실행 시간 구성은 게임 서버 실행 파일을 지정하기 위해 하나의 서버 프로세스 구성을 정의

버전98

Amazon GameLift 개발자 안내서플릿 설계 가이드

해야 합니다. 또한 게임과 관련된 다른 유형의 프로세스를 실행하기 위해 추가 서버 프로세스 구성을 정의할수 있습니다. 각 서버 프로세스 구성에는 다음 정보가 포함됩니다.

• 게임 빌드에서 실행 파일의 파일 이름 및 경로• 동시에 유지 관리하기 위해 실행 파일을 실행하는 프로세스 수• (선택 사항) 시작 시 프로세스에 전달할 파라미터

플릿의 인스턴스가 시작되면 실행 시간 구성에 정의된 서버 프로세스가 즉시 시작됩니다. 프로세스가 여러개인 경우, 각 프로세스 시작이 몇 초 정도 시간차를 두고 이루어지므로 여러 프로세스가 포함된 인스턴스가전체 용량을 확보하는 데 몇 분 정도 걸릴 수 있습니다. 프로세스의 수명은 제한되어 있습니다. 프로세스가종료되면, 인스턴스가 계속 새로운프로세스를 시작하여 현재 실행 시간 구성에 정의된 올바른 서버 프로세스수 및 유형을 유지합니다.

언제든 서버 프로세스 구성을 추가, 변경 또는 삭제하여 실행 시간 구성을 변경할 수 있습니다. 각 인스턴스는 플릿의 실행 시간 구성에 대한 업데이트를 정기적으로 확인하여 변경 사항이 빠르게 구현되도록 합니다.GameLift가 실행 시간 구성 변경을 채택하는 방식은 다음과 같습니다.

1. 인스턴스가 올바른 서버 프로세스 유형 및 수를 실행 중인지 점검하기 전에, 인스턴스는 최신 버전의 실행시간 구성에 대한 요청을 GameLift 서비스로 보냅니다.

2. 인스턴스가 최신 실행 시간 구성을 기준으로 활성 프로세스를 점검하고 다음과 같이 처리합니다.• 업데이트된 실행 시간 구성에서 서버 프로세스 유형을 제거하는 경우: 이러한 유형의 활성 서버 프로세

스는 종료될 때까지 계속 실행되며 종료 시 대체되지 않습니다.• 업데이트된 실행 시간 구성에서 서버 프로세스 유형에 대한 동시 프로세스 수를 줄이는 경우: 이러한 유

형의 초과 서버 프로세스는 종료될 때까지 계속 실행되며 종료 시 대체되지 않습니다.• 업데이트된 실행 시간 구성에서 새 서버 프로세스 유형을 추가하거나 기존 유형에 대한 동시 프로세스

를 증가시키는 경우: 인스턴스의 서버 프로세스에 대한 최대 GameLift를 기준으로 새 서버 프로세스가즉시 시작됩니다. 이 경우 기존 프로세스가 종료되어야만 새 서버 프로세스가 시작됩니다.

여러 프로세스에 대한 플릿 최적화

여러 프로세스를 활성화하려면 최소한 다음 작업을 수행해야 합니다.

• 플릿에 배포할 모든 게임 서버 실행 파일이 포함된 빌드를 생성 (p. 89)하고 GameLift에 업로드합니다.빌드에 포함된 모든 게임 서버는 동일한 플랫폼에서 실행되어야 하며 C++용 GameLift Server SDK 버전3.0.7 이상을 이용해 GameLift에 통합되어야 합니다.

• 하나 이상의 서버 프로세스 구성과 여러 개의 동시 프로세스로 이루어진 실행 시간 구성을 생성합니다.• 이 플릿에서 호스팅하는 게임에 연결되는 게임 클라이언트는 AWS SDK 버전 2016-08-04 이상을 이용해

통합되어야 합니다.

또한 다음 게임 서버 통합 권장 사항을 수행하여 플릿 성능을 최적화하십시오.

• GameLift가 프로세스를 효율적으로 재활용할 수 있도록 서버 프로세스 종료 시나리오를 처리합니다. 이렇게 하지 않으면 서버 프로세스가 실패할 때까지 종료되지 않으며 실행 시간 구성 업데이트의 구현이 느려질 수 있습니다.• 서버 API ProcessEnding()을 호출하는 게임 서버 코드에 종료 절차를 추가합니다.• 게임 서버 코드에 콜백 함수 OnProcessTerminate()를 구현하여 GameLift의 종료 요청을 안전하게

처리합니다.• 비정상 서버 프로세스가 종료되고 신속하게 다시 시작되어야 합니다. 게임에 “정상” 및 “비정상”이 의미하

는 바를 정의하고 각 프로세스의 상태를 유지합니다. 게임 서버 코드에 OnHealthCheck() 콜백 함수를구현하여 GameLift에 이 상태를 다시 보고합니다. GameLift는 3개의 연속된 보고서에서 비정상으로 보고된 서버 프로세스를 자동으로 종료합니다. OnHealthCheck()를 구현하지 않으면, 프로세스가 통신에 응답하지 않는 한 GameLift는 서버 프로세스를 정상이라고 가정합니다. 그 결과, 성능이 저하된 서버 프로세스가 계속 존재하면서 실패하기 전까지 리소스를 낭비할 수 있습니다.

버전99

Amazon GameLift 개발자 안내서플릿 설계 가이드

인스턴스당 프로세스 수 선택인스턴스에서 실행할 동시 프로세스 수를 결정할 때 다음과 같이 유념해야 할 세 가지 제한이 있습니다.

• GameLift는 각 인스턴스에 지정할 수 있는 최대 동시 프로세스 수를 제한합니다. 실행 시간 구성에 몇 개의서버 프로세스 구성이 지정되어 있든, 각 플릿의 서버 프로세스 구성에 대한 모든 동시 프로세스의 총합은이 제한을 초과할 수 없습니다.

• 선택한 Amazon EC2 인스턴스 유형에 따라 허용 가능한 성능 수준을 유지하기 위해 동시에 실행할 수 있는 프로세스 수가 제한될 수 있습니다. 게임에 대해 다양한 구성을 테스트하여 선호하는 인스턴스 유형에서 최적의 프로세스 수를 확인해야 합니다. 선택에 영향을 미칠 수 있는 요인으로는 게임 서버의 리소스 요구사항, 각 게임 세션에서 호스팅할 플레이어 수, 플레이어의 기대 성능 등이 있습니다.

• 플릿의 실행 시간 구성을 변경할 경우 GameLift는 구성된 총 동시 실행 프로세스 수를 초과하여 프로세스를 실행하지 않음을 유의해야 합니다. 이는 기존 프로세스가 종료해야만 새 프로세스가 시작하므로 기존실행 시간 구성에서 새로운 구성으로의 이전이 점진적으로 발생할 수 있다는 의미입니다. 예를 들어 시작파라미터가 "-loglevel=1"로 설정된 서버 실행 파일 myGame.exe의 동시 프로세스 10개를 실행하도록 구성된 플릿이 있다고 가정하겠습니다. 이 구성을 myGame.exe의 동시 프로세스 10개를 계속 실행하지만시작 파라미터를 "-loglevel=4"로 변경하여 업데이트합니다. 플릿 내 인스턴스가 이미 10개의 프로세스를실행 중이므로, 각 인스턴스는 기존 시작 파라미터의 프로세스가 끝날 때까지 새 시작 파라미터의 프로세스를 시작할 수 없습니다.

GameLift에 스팟 인스턴스 사용호스팅 리소스 플릿을 설정할 때 스팟 인스턴스, 온디맨드 인스턴스 또는 두 인스턴스 조합을 사용할 수 있습니다. 온디맨드 인스턴스 및 스팟 인스턴스 (p. 97) 단원에서 스팟 인스턴스를 GameLift에서 사용하는 방법을 자세히 알아보십시오. 스팟 플릿을 사용하도록 선택한 경우 게임 통합을 약간 조정해야 합니다.

FlexMatch를 매치메이킹에 사용하고 있나요? 매치메이킹 배치를 위해 기존 게임 세션 대기열에 스팟 플릿을추가할 수 있습니다.

스팟 플릿에 게임 및 호스팅 리소스를 설정하려면

1. "스팟 최적화" 구성을 사용하여 대기열을 설계합니다. 대기열을 사용하여 플릿 사용을 관리하는 것이 가장 좋은 방법이지만 스팟 인스턴스를 사용할 때는 필수 사항입니다. 이 단계에서는 대기열에 포함할 리전을 식별하고, 게임에 적합한 인스턴스 유형(하드웨어)을 선택하고, FleetIQ가 게임 세션 배치의 우선순위를 지정하는 방법을 결정해야 합니다. 대기열의 각 리전에는 백업 리소스로서 하나 이상의 스팟 플릿과 한 개의 온디맨드 플릿을 보유하는 것이 좋습니다. 여러 스팟 플릿이 있는 대기열의 경우 이러한 플릿은 항상 사용 가능한 스팟 플릿을 보유할 수 있는 가능성을 높이기 위해 서로 다른 인스턴스 유형을 사용해야 합니다. 이러한 설계는 게임 서버의 탄력성을 높여줍니다. 스팟 최적화 대기열을 설계하는 방법은 스팟 인스턴스를 위한 대기열 설계 (p. 127) 단원을 참조하십시오.

대기열에 플릿을 생성했으면 대기열을 만들고, 플릿 대상을 추가하고, 플릿 우선 순위를 설정할 수 있습니다. 새 대기열의 생성 및 구성에 대한 자세한 내용은 대기열 생성 (p. 129) 단원을 참조하십시오.

2. 스팟 최적화 대기열에 플릿을 생성합니다. 대기열을 생성하기 전에 먼저 플릿을 생성해야 합니다. 스팟플릿 및 온디맨드 플릿은 플릿 유형 지정만 다른 동일한 구성을 가질 수 있습니다. 새 플릿의 생성 및 구성에 대한 자세한 내용은 사용자 지정 게임 빌드용 GameLift 플릿 배포 (p. 101) 단원을 참조하십시오.

Note

플릿 이름에 플릿 유형(스팟 또는 온디맨드)을 포함하는 것이 좋습니다. 이렇게 하면 대기열에플릿을 추가할 때와 같이 플릿 이름 목록에서 스팟 플릿을 한 눈에 쉽게 식별할 수 있습니다.

3. 게임 클라이언트 또는 클라이언트 서비스가 스팟 최적화 대기열을 사용하여 새 게임 세션을 배치할 수있습니다. 아직 수행하지 않은 경우 특정한 단일 플릿에서 게임 세션을 생성하는 대신 대기열에서 게임세션 배치를 사용하도록 게임 클라이언트 코드를 업데이트합니다. 대기열을 사용하여 게임 세션을 배치하면 FleetIQ를 통해 비용, 중단율 및 플레이어 지연 시간에 따라 가장 적합한 가용 플릿을 선택할 수 있습니다. 또한 선호하는 플릿을 일시적으로 사용할 수 없는 경우에 대비하여 대체 호스팅 리소스를 준비할 수 있습니다. 게임 클라이언트에서 게임 세션 배치를 구현하는 방법은 게임 세션 만들기 (p. 48) 단원을 참조하십시오.

버전100

Amazon GameLift 개발자 안내서사용자 지정 게임 빌드용 플릿 배포

4. 게임 서버가 스팟 중단을 처리할 수 있습니다. AWS에서 해당 용량이 다시 필요하면 2분 알림으로 스팟 인스턴스를 중단시킬 수 있습니다. 게임 서버는 중단이 발생했을 때 이를 정상적으로 처리하고 플레이어의 영향을 최소화해야 합니다. AWS가 스팟 인스턴스를 회수하려고 하면 최대 2분 전에 종료 알림을 보내고 GameLift는 영향을 받는 모든 서버 프로세스로 전달합니다. 이 작업은 Server SDK 콜백 함수 onProcessTerminate()를 호출하여 수행됩니다. 이 콜백 함수를 구현하는 것이 항상 가장 좋은방법이며, 스팟 인스턴스를 사용할 때는 특히 중요합니다. 이 콜백을 구현하면 게임 세션을 정상적으로 끝내기 위한 조치를 취하거나 게임 세션과 플레이어를 새 배치로 이동하는 방법을 찾을 수 있습니다.onProcessTerminate() 구현에 대한 자세한 내용은 서버 프로세스 종료 (p. 44) 단원을 참조하십시오.

Note

AWS는 종료할 인스턴스가 선택되자마자 알림을 제공하지만 경고가 도착하기 전에 스팟 인스턴스가 종료될 수도 있습니다. 게임 서버는 예기치 않은 중단을 처리할 수 있도록 준비되어야합니다.

5. 스팟 플릿 및 대기열의 성능을 평가합니다. 새 대기열이 새 게임 세션을 능동적으로 배치하면 GameLift지표를 사용하여 성능을 평가합니다. 주요 지표는 다음과 같습니다.

• 중단율 – 스팟 플릿에서 인스턴스 및 게임 세션에 대한 스팟 관련 중단의 횟수와 빈도를 추적합니다.이러한 플릿 지표(InstanceInterruptions 및 GameSessionInterruptions)는 GameLift 콘솔또는 Amazon CloudWatch에서 볼 수 있습니다(플릿에 대한 GameLift 지표 (p. 172) 참조). 지표 그룹에서 플릿 지표를 집계하면 CloudWatch에서 인스턴스 유형 및 운영 체제별 중단을 볼 수도 있습니다. 스팟 관련 이유로 종료된 게임 세션에는 "TERMINATED" 상태와 "INTERRUPTED" 상태 이유가있습니다.

• 대기열 효율성 – 배치 성공률, 평균 대기 시간 및 대기열 깊이를 포함한 대기열의 지표를 추적하여 스팟 플릿 사용이 대기열 성능에 영향을 미치지 않는지 확인합니다. 대기열 지표는 GameLift 콘솔 또는Amazon CloudWatch를 사용하여 볼 수 있습니다.

• 플릿 사용률 – 인스턴스, 게임 세션 및 플레이어 세션에 대한 데이터를 포함하여 플릿 사용률을 모니터링합니다. 온디맨드 플릿의 사용은 FleetIQ가 스팟 플릿으로의 위험한 배치를 피하고 온디맨드 플릿에 배치되도록 선택한다는 지표가 될 수 있습니다. 플릿 사용률 지표는 GameLift 콘솔 또는 AmazonCloudWatch를 사용하여 볼 수 있습니다.

사용자 지정 게임 빌드용 GameLift 플릿 배포게임에 Realtime 서버를 사용할 경우, Realtime 서버 플릿 배포 (p. 105) 단원을 참조하십시오.

GameLift 서비스에 업로드되어 Ready 상태인 모든 게임 빌드에 대해 게임 서버를 호스팅할 새로운 플릿을생성하여 배포할 수 있습니다.

사용자 지정 게임 빌드용 플릿을 생성하려면GameLift 콘솔 또는 AWS Command Line Interface(CLI)를 사용하여 플릿을 생성합니다.

새 플릿을 만든 후에는 플릿이 배포되어 게임 서버가 설치되고 시작되기 때문에 플릿 상태가 여러 단계를 거치게 됩니다. 플릿이 ACTIVE(활성) 상태가 되면 게임 세션을 호스팅할 준비가 된 것입니다. 플릿 생성 문제에 도움을 받으려면 GameLift 플릿 문제 디버깅 (p. 110) 단원을 참조하십시오.

Console

1. https://console.aws.amazon.com/gamelift/에서 GameLift 콘솔을 엽니다.2. Builds 페이지에서 플릿을 만들려는 빌드를 찾고 상태가 Ready인지 확인합니다. 빌드(빌드 상태의

왼쪽에 있는 옵션 버튼 이용)를 선택하고 Create fleet from build를 클릭합니다.3. 플릿 생성 페이지에서 플릿 세부 정보를 입력합니다.

• Name – 목록 및 측정치에서 쉽게 구별할 수 있도록, 의미 있는 플릿 이름을 생성합니다.

버전101

Amazon GameLift 개발자 안내서사용자 지정 게임 빌드용 플릿 배포

• Description –(선택 사항) 더 쉽게 구별할 수 있도록 플릿에 대한 짧은 설명을 추가합니다.• 플릿 유형 –이 플릿에 온디맨드를 사용할지 또는 스팟 인스턴스를 사용할지 선택합니다. 컴퓨팅

리소스 선택 (p. 97) 단원에서 플릿 유형을 자세히 알아보십시오.• Metric group –(선택 사항) 신규 또는 기존 플릿 측정치 그룹의 이름을 입력합니다. Amazon

CloudWatch를 사용하여 GameLift 지표를 추적하는 경우, 동일한 지표 그룹에 추가하여 복수 플릿에 대한 지표를 집계할 수 있습니다.

• 인스턴스 역할 ARN – (선택 사항) 이 플릿과 연결할 IAM 역할에 대한 ARN 값을 입력합니다. 이설정을 통해 플릿의 모든 인스턴스가 역할을 맡을 수 있으며, 정의된 AWS 서비스 집합으로 액세스 권한을 확장합니다. 플릿에서 AWS 리소스에 액세스 (p. 45) 방법에 대해 자세히 알아보십시오.

• 인증서 유형 – GameLift에서 플릿에 대한 TLS 인증서를 생성할지 여부를 선택합니다. 연결할 때플릿 TLS 인증서를 사용하여 게임 클라이언트에서 게임 서버를 인증하고 모든 클라이언트/서버통신을 암호화할 수 있습니다. TLS 활성화 플릿에 있는 각 인스턴스에 대해 GameLift는 인증서를사용하여 새 DNS 항목도 생성합니다. 다음 리소스를 사용하여 게임에 대한 인증 및 암호화를 설정합니다. 플릿이 생성된 후에는 인증서 유형을 변경할 수 없습니다.

• Binary 형식 – "빌드" 바이너리 형식을 선택합니다.• Build – Create fleet from build feature(빌드 기능을 통해 플릿 생성)를 사용하면 이름, ID, 운영 체

제를 포함한 빌드 정보가 자동으로 채워집니다. 반면 드롭다운 목록에서 유효한 빌드를 선택합니다.

4. 인스턴스 유형. 목록에서 Amazon EC2 인스턴스 유형을 선택합니다. 나열되는 인스턴스 유형은 현재 리전, 선택한 게임 빌드의 운영 체제, 플릿 유형(온디맨드 또는 스팟)을 비롯한 여러 요인에 따라다릅니다. 컴퓨팅 리소스 선택 (p. 97) 단원에서 인스턴스 유형 선택을 자세히 알아보십시오. 플릿이 생성된 후에는 인스턴스 유형을 변경할 수 없습니다.

5. 프로세스 관리 각 인스턴스에 대해 원하는 서버 프로세스 실행 방식을 구성합니다.

a. 서버 프로세스 할당:

각 인스턴스에서 실행하고자 하는 게임 서버 프로세스의 유형 및 개수를 지정합니다. 각 플릿마다 하나 이상의 서버 프로세스 구성이 정의되어 있어야 하고, 플릿은 복수의 구성을 가질 수 있습니다. 예를 들어, 게임 빌드에 복수의 서버 실행 파일이 있는 경우, 각 실행 파일마다 구성이있어야 합니다.

• Launch path – 빌드에 게임 실행 파일 경로를 입력합니다. 모든 실행 경로는 게임 서버 위치(사용 중인 운영 체제에 따라 다름)로 시작해야 합니다. Windows 인스턴스에서 게임 서버는C:\game 경로에 빌드됩니다. Linux 인스턴스에서 게임 서버는 /local/game에 빌드되므로 모든 실행 경로가 이 위치로 시작해야 합니다. 예: C:\game\MyGame\server.exe 또는/local/game/MyGame/server.exe.

• Launch parameters –(선택 사항) 시작 시 게임 실행 파일로 정보를 전달할 수 있습니다. 여기에 일련의 명령줄 파라미터로 정보를 입력합니다. 예: +sv_port 33435 +start_lobby.

• Concurrent processes –플릿 내 각 인스턴스에서 이 구성으로 동시에 실행할 수 있는 서버 프로세스 개수를 표시합니다. 동시 서버 프로세스 수에 대한 GameLift 한도를 확인하십시오.이 값은 게임 서버가 사용하는 SDK에 따라 다릅니다.

서버 프로세스 구성을 입력하고 나면 녹색 확인 표시 버튼을 클릭하여 구성을 저장합니다. 추가서버 프로세스 구성을 추가하려면 Add configuration을 클릭합니다.

인스턴스당 동시 서버 프로세스 한도는 모든 구성에 대한 총 동시 프로세스 수에 적용됩니다.프로세스가 하나로 제한된 경우 단 하나의 구성만 가능하며 동시 프로세스는 1로 설정되어야합니다1. 한도를 초과하도록 플릿을 구성하면 플릿이 활성화되지 않습니다.

서버 프로세스 구성 모음을 플릿의 런타임 구성이라고 합니다. 주어진 시간에 이 플릿의 각 인스턴스에서 실행될 모든 서버 프로세스를 설명합니다.

버전102

Amazon GameLift 개발자 안내서사용자 지정 게임 빌드용 플릿 배포

b. 게임 세션 활성화:

다음 한도를 설정하여 이 플릿에서 인스턴스에 대해 새 게임 세션을 어떻게 활성화할 것인지 결정합니다.

• 최대 동시 게임 세션 정품 인증 – 동시에 활성화할 수 있는 인스턴스의 게임 세션 수를 제한합니다. 이 제한은 여러 개의 새 게임 세션을 시작하면 인스턴스에서 실행 중인 다른 게임 세션의 성능에 영향을 미칠 수 있으므로 유용합니다.

• 새 정품 인증 제한 시간 – 이 설정에서는 GameLift가 새 게임 세션 활성화를 허용하는 시간을제한합니다. 게임 세션이 활성화를 완료하고 ACTIVE 상태로 이동하지 못하는 경우 게임 세션 활성화가 종료됩니다.

6. EC2 포트 설정 포트 설정 추가를 클릭하여 이 플릿에서 배포된 서버 프로세스에 연결되는 인바운드트래픽에 대한 액세스 권한을 정의합니다. 한 플릿에 여러 포트 설정을 생성할 수 있습니다. 플릿에하나 이상의 포트 설정을 구성한 후 액세스를 허용해야 합니다. 이 시점에서 포트 설정을 지정하지않는 경우 나중에 플릿을 편집할 수 없습니다.

• Port range –는 게임 서버가 인바운드 연결을 허용하는 데 사용할 수 있는 포트 번호의 범위를지정합니다. 포트 범위는 nnnnn[-nnnnn] 형식으로 1025~60000의 값을 사용해야 합니다. 예:1500 또는 1500-20000.

• Protocol –은 사용할 플릿에 대한 통신 프로토콜 유형을 선택합니다.• IP address range – 이 플릿의 인스턴스에 유효한 IP 주소 범위를 지정합니다. CIDR 표기법을 사

용합니다. 예: 0.0.0.0/0 (이 예는 연결을 시도하는 모든 사람에게 액세스를 허용합니다.)7. [Protection policy] 섹션에서 이 플릿의 인스턴스에 게임 세션 보호를 적용할 것인지 여부를 선택합

니다. 보호를 적용한 인스턴스가 활성 게임 세션을 호스팅하고 있는 경우, 축소 이벤트 중에 종료되지 않습니다. 개별 게임 세션에 보호를 설정할 수도 있습니다. 플릿이 생성되면 플릿을 편집하여 플릿 전체의 보호 정책을 변경할 수 있습니다.

8. 새로운 플릿의 구성 설정을 완료했으면 플릿 초기화를 클릭합니다. GameLift는 새 플릿에 ID를 할당하고 플릿 활성화 프로세스를 시작합니다. 플릿 페이지에서 새 플릿의 상태를 볼 수 있습니다.

플릿 상태와 상관없이 플릿의 메타데이터 및 구성을 언제든 업데이트할 수 있습니다(GameLift 플릿 관리 (p. 108) 참조). 플릿이 ACTIVE 상태가 되었을 때만 플릿 용량을 업데이트할 수 있습니다(GameLift플릿 용량 조정 (p. 115) 참조).

AWS CLI

AWS CLI로 플릿을 생성하려면 명령줄 창을 열고 create-fleet 명령을 이용해 새 플릿을 정의합니다.이 명령에 대한 전체 문서는 AWS CLI 명령 참조 설명서를 참조하십시오. AWS Command Line Interface도구를 다운로드하여 설치합니다.

아래 표시된 예제 create-fleet 요청은 다음과 같은 특징을 가진 새로운 플릿을 만듭니다.

• 플릿은 선택한 게임 빌드에 적절한 운영 체제와 함께 c5.large 온디맨드 인스턴스를 사용합니다.• 지정된 게임 서버 빌드를 배포합니다(준비 상태여야 함).• TLS 인증서 생성이 활성화됩니다.• 플릿의 각 인스턴스는 10개의 동일한 게임 서버 프로세스를 동시에 실행하므로 각 인스턴스가 최대

10개의 게임 세션을 동시에 호스팅할 수 있습니다.• 각 인스턴스에서 GameLift는 두 개의 새 게임 세션만 동시에 활성화할 수 있습니다. 또한 300초 이내

에 플레이어를 호스팅할 준비가 되지 않은 경우 모든 활성 게임 세션을 종료합니다.• 이 플릿의 인스턴스에서 호스팅되는 모든 게임 세션에는 게임 세션 보호가 설정되어 있습니다. 개별

게임 세션별로 해제할 수 있습니다.• 각 플레이어는 15분 내에 3개의 새 게임 세션을 만들 수 있습니다.• 이 플릿에서 호스팅되는 각 게임 세션에는 지정된 IP 주소 및 포트 범위에 속하는 연결 포인트가 있습

니다.

버전103

Amazon GameLift 개발자 안내서사용자 지정 게임 빌드용 플릿 배포

• 이 플릿에 대한 지표는 EMEAfleets 지표 그룹에 추가됩니다. 이 예제에서 이 지표 그룹은 EMEA 리전의 모든 플릿에 대한 지표를 결합합니다.

$ aws gamelift create-fleet --name "SampleFleet123" --description "The sample test fleet" --ec2-instance-type "c5.large" --fleet-type "ON_DEMAND" --build-id "build-92f061ed-27c9-4a02-b1f4-6f85b2385620" --certificate-configuration "CertificateType=GENERATED" --runtime-configuration "GameSessionActivationTimeoutSeconds=300, MaxConcurrentGameSessionActivations=2, ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe, Parameters=+sv_port 33435 +start_lobby, ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3, PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP" --MetricGroups "EMEAfleets"

복사 가능 버전:

aws gamelift create-fleet --name "SampleFleet123" --description "The sample test fleet" --fleet-type "ON_DEMAND" --MetricGroups "EMEAfleets" --build-id "build-92f061ed-27c9-4a02-b1f4-6f85b2385620" --certificate-configuration "CertificateType=GENERATED" --ec2-instance-type "c5.large" --runtime-configuration "GameSessionActivationTimeoutSeconds=300,MaxConcurrentGameSessionActivations=2,ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe,Parameters=+sv_port 33435 +start_lobby,ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3,PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP"

플릿 생성 요청에 성공하면 GameLift는 사용자가 요청한 구성 설정과 새 플릿 ID를 포함하는 플릿 속성세트를 반환합니다. GameLift는 즉시 플릿 활성화 프로세스를 시작하고 플릿 상태를 New로 설정합니다. 이러한 CLI 명령을 사용하여 플릿의 상태를 추적하고 다른 플릿 정보를 확인할 수 있습니다.

• describe-fleet-events• describe-fleet-attributes• describe-fleet-capacity• describe-fleet-port-settings• describe-fleet-utilization• describe-runtime-configuration

이러한 명령을 사용하여 필요에 따라 플릿의 용량 및 기타 구성 설정을 변경할 수 있습니다.

• update-fleet-attributes• update-fleet-capacity• update-fleet-port-settings• update-runtime-configuration

버전104

Amazon GameLift 개발자 안내서Realtime 서버 플릿 배포

Realtime 서버 플릿 배포새로운 Realtime 게임 서버 플릿을 생성하여 게임에 대한 게임 세션을 호스팅할 수 있습니다. Realtime 서버플릿을 사용하려면 Realtime 스크립트를 생성하여 Amazon GameLift에 업로드해야 합니다. 사용자 지정 게임 서버 빌드가 있을 경우 사용자 지정 게임 빌드용 GameLift 플릿 배포 (p. 101) 단원을 참조하여 해당 빌드를 사용하여 플릿을 생성하는 방법을 알아보십시오. Amazon GameLift 콘솔 또는 AWS Command LineInterface(CLI)를 사용하여 플릿을 생성합니다. 플릿 편집 (p. 108)을 통해 플릿의 구성을 변경할 수 있습니다.

Realtime 플릿 만들기(콘솔)Amazon GameLift 콘솔을 사용하여 Realtime 플릿을 만들려면

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다. 플릿: 플릿 생성 페이지로 이동하여 새 플릿을 구성합니다.

2. 플릿 세부 정보.

• Name – 목록 및 측정치에서 쉽게 구별할 수 있도록, 의미 있는 플릿 이름을 생성합니다.• Description –(선택 사항) 더 쉽게 구별할 수 있도록 플릿에 대한 짧은 설명을 추가합니다.• 플릿 유형 –이 플릿에 온디맨드를 사용할지 또는 스팟 인스턴스를 사용할지 선택합니다. 컴퓨팅 리소

스 선택 (p. 97) 단원에서 플릿 유형을 자세히 알아보십시오.• Metric group –(선택 사항) 신규 또는 기존 플릿 측정치 그룹의 이름을 입력합니다. Amazon

CloudWatch를 사용하여 Amazon GameLift 측정치를 추적하는 경우, 동일한 측정치 그룹에 추가하여복수 플릿에 대한 측정치를 집계할 수 있습니다.

• 인스턴스 역할 ARN – (선택 사항) 이 플릿과 연결할 IAM 역할에 대한 ARN 값을 입력합니다. 이 설정을 통해 플릿의 모든 인스턴스가 역할을 맡을 수 있으며, 정의된 AWS 서비스 집합으로 액세스 권한을확장합니다. 플릿에서 AWS 리소스에 액세스 (p. 45) 방법에 대해 자세히 알아보십시오.

• 인증서 유형 – GameLift에서 플릿에 대한 TLS 인증서를 생성할지 여부를 선택합니다. Realtime 플릿에 대해 이 기능이 활성화되면 GameLift는 자동으로 클라이언트/서버 연결을 인증하고 게임 클라이언트와 서버 간의 모든 통신을 암호화합니다. 플릿이 생성된 후에는 인증서 유형을 변경할 수 없습니다.

• Binary 형식 – "스크립트" 바이너리 형식을 선택합니다.• 스크립트 – 배포하려는 Realtime 스크립트를 드롭다운 목록에서 선택합니다.

3. 인스턴스 유형. 목록에서 Amazon EC2 인스턴스 유형을 선택합니다. 나열되는 인스턴스 유형은 현재 리전, 선택한 게임 빌드의 운영 체제, 플릿 유형(온디맨드 또는 스팟)을 비롯한 여러 요인에 따라 다릅니다.컴퓨팅 리소스 선택 (p. 97) 단원에서 인스턴스 유형 선택을 자세히 알아보십시오. 플릿이 생성된 후에는 인스턴스 유형을 변경할 수 없습니다.

4. 프로세스 관리 각 인스턴스에 대해 원하는 서버 프로세스 실행 방식을 구성합니다.

a. 서버 프로세스 할당.

각 인스턴스에서 실행하고자 하는 게임 서버 프로세스의 유형 및 개수를 지정합니다. 각 플릿마다하나 이상의 서버 프로세스 구성이 정의되어 있어야 하고, 플릿은 복수의 구성을 가질 수 있습니다.예를 들어 업로드한 Realtime 스크립트에서 서로 다른 파일을 사용하여 프로세스를 시작하려면 시작하려는 각 프로세스 유형에 대한 구성이 있어야 합니다.

• 시작 경로 – 시작하려는 스크립트 파일의 이름을 입력합니다. 시작 스크립트 파일은 Init()함수를 호출해야 합니다. 배포 과정에서, 업로드한 Realtime 스크립트 파일은 압축이 해제되어 /local/game/ 디렉터리에 저장되므로 스크립트 파일 이름만 지정하면 됩니다. 예:MyRealtimeLaunchScript.js.

• 시작 파라미터 – (선택 사항) 시작 시 Realtime 스크립트로 정보를 전달할 수 있습니다. 일련의 명령줄 파라미터로 정보를 입력합니다. 예: +map Winter444.

• Concurrent processes –플릿 내 각 인스턴스에서 이 구성으로 동시에 실행할 수 있는 서버 프로세스 개수를 표시합니다.

버전105

Amazon GameLift 개발자 안내서Realtime 서버 플릿 배포

서버 프로세스 구성을 입력했으면 오른쪽의 녹색 확인 표시 버튼을 클릭하여 구성을 저장합니다. 추가 서버 프로세스 구성을 추가하려면 Add configuration을 클릭합니다.

동시 실행 서버 프로세스에 대한 Amazon GameLift 제한을 확인합니다. 인스턴스당 동시 서버 프로세스 한도는 모든 구성에 대한 총 동시 프로세스 설정에 적용됩니다. 예를 들어, 프로세스가 하나로제한된 경우 단 하나의 구성만 가능하며 동시 프로세스를 1로 설정해야 합니다. 플릿이 한도를 초과하도록 구성된 경우 플릿이 활성화되지 않습니다.

서버 프로세스 구성 모음을 플릿의 런타임 구성이라고 합니다. 주어진 시간에 이 플릿의 각 인스턴스에서 실행될 모든 서버 프로세스를 설명합니다.

b. 게임 세션 활성화(선택 사항):

다음 한도를 설정하여 이 플릿에서 인스턴스에 대해 새 게임 세션을 어떻게 활성화할 것인지 결정합니다.

• 최대 동시 게임 세션 정품 인증 – 동시에 활성화할 수 있는 인스턴스의 게임 세션 수를 제한합니다. 이 제한은 여러 개의 새 게임 세션을 시작하면 인스턴스에서 실행 중인 다른 게임 세션의 성능에 영향을 미칠 수 있으므로 유용합니다.

• 새 활성화 제한 시간 – 이 설정은 Amazon GameLift가 신규 게임 세션 활성화를 허용하는 시간을제한합니다. 게임 세션이 ACTIVE(활성) 상태가 되지 않는 경우 게임 세션 활성화 프로세스가 종료됩니다.

5. 보호 정책(선택 사항). 이 플릿의 인스턴스에 게임 세션 보호를 적용할지 여부를 지정합니다. 보호되는인스턴스는 인스턴스가 활성 게임 세션을 호스팅하고 있는 경우, 축소 이벤트 중에 종료되지 않습니다.이 설정을 사용하면 플릿 전역 보호 정책이 적용됩니다. 게임 세션을 생성할 때 개별 게임 세션에 대한보호를 설정할 수도 있습니다.

6. 새로운 플릿의 구성을 완료했으면 플릿 초기화를 클릭합니다. Amazon GameLift는 새 플릿에 ID를 할당하고 플릿 활성화 프로세스를 시작합니다. [Fleets] 페이지에서 새 플릿의 상태를 볼 수 있습니다. 플릿이활성화되면 플릿의 용량 (p. 118), 런타임 구성 및 기타 구성 설정을 필요에 따라 변경할 수 있습니다.

Realtime 플릿 만들기(AWS CLI)AWS CLI를 사용하여 Realtime 플릿을 만들려면 명령줄 창을 열고 create-fleet 명령을 이용해 새 플릿을정의합니다. 이 명령에 대한 전체 문서는 AWS CLI 명령 참조 설명서를 참조하십시오. AWS Command LineInterface 도구를 다운로드하여 설치합니다.

아래 표시된 예제 create-fleet 요청은 다음과 같은 특징을 가진 새로운 플릿을 만듭니다.

• 이 플릿은 c5.large 스팟 인스턴스를 사용합니다.• 그리고 지정된 Realtime 스크립트를 배포합니다.• 플릿의 각 인스턴스는 10개의 동일한 Realtime 스크립트를 동시에 실행하므로 각 인스턴스가 최대 10개의

게임 세션을 동시에 호스팅할 수 있습니다.• 각 인스턴스에서 Amazon GameLift는 두 개의 새 게임 세션만 동시에 활성화할 수 있습니다. 또한 60초 이

내에 플레이어를 호스팅할 준비가 되지 않은 경우 모든 활성 게임 세션을 종료합니다.• 이 플릿의 인스턴스에서 호스팅되는 모든 게임 세션에는 게임 세션 보호가 설정되어 있습니다. 개별 게임

세션별로 해제할 수 있습니다.• 각 플레이어는 15분 내에 3개의 새 게임 세션을 만들 수 있습니다.• 이 플릿에 대한 지표는 EMEAfleets 지표 그룹에 추가됩니다. 이 예제에서 이 지표 그룹은 EMEA 리전의 모

든 플릿에 대한 지표를 결합합니다.

버전106

Amazon GameLift 개발자 안내서Realtime 서버 플릿 배포

Note

Realtime Servers 플릿의 경우 Amazon GameLift는 Realtime 서버가 사용할 TCP 및 UDP 범위를자동으로 설정합니다. CLI 명령 describe-fleet-port-settings를 호출하여 자동 설정을 볼수 있습니다.

$ aws gamelift create-fleet --name "SampleRealtimeFleet123" --description "A sample Realtime fleet" --ec2-instance-type "c5.large" --fleet-type "SPOT" --script-id "script-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --certificate-configuration "CertificateType=GENERATED" --runtime-configuration "GameSessionActivationTimeoutSeconds=60, MaxConcurrentGameSessionActivations=2, ServerProcesses=[{LaunchPath=/local/game/myRealtimeLaunchScript.js, Parameters=+map Winter444, ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3, PolicyPeriodInMinutes=15" --MetricGroups "EMEAfleets"

복사 가능 버전:

aws gamelift create-fleet --name "SampleRealtimeFleet123" --description "A sample Realtime fleet" --ec2-instance-type "c5.large" --fleet-type "SPOT" --script-id "script-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --certificate-configuration "CertificateType=GENERATED" --runtime-configuration "GameSessionActivationTimeoutSeconds=60,MaxConcurrentGameSessionActivations=2,ServerProcesses=[{LaunchPath=/local/game/myRealtimeLaunchScript.js,Parameters=+map Winter444,ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3,PolicyPeriodInMinutes=15" --MetricGroups "EMEAfleets"

집합 생성 요청에 성공하면 사용자가 요청한 구성 설정과 새 집합 ID를 포함하는 집합 속성 세트를 AmazonGameLift 반환합니다. Amazon GameLift 즉시 집합 활성화 프로세스를 개시하고 집합 상태를 New로 설정합니다. 이러한 CLI 명령을 사용하여 플릿의 상태를 추적하고 다른 플릿 정보를 확인할 수 있습니다.

• describe-fleet-events• describe-fleet-attributes• describe-fleet-capacity• describe-fleet-port-settings• describe-fleet-utilization• describe-runtime-configuration

플릿이 활성화되면 이러한 명령을 사용하여 필요에 따라 플릿의 용량 및 기타 구성 설정을 변경할 수 있습니다.

• update-fleet-attributes• update-fleet-capacity• update-fleet-port-settings• update-runtime-configuration

버전107

Amazon GameLift 개발자 안내서플릿 관리

GameLift 플릿 관리GameLift 콘솔 또는 AWS CLI를 사용하여 플릿의 속성, 포트 설정 및 실행 시간 구성 업데이트를 포함하여 기존 플릿을 관리합니다. 플릿을 삭제할 수도 있습니다.

플릿 구성 업데이트 방법GameLift 콘솔에서 Edit fleet 페이지를 사용하여 플릿의 구성을 변경합니다. 빌드 ID 및 인스턴스 유형을제외한 모든 플릿 속성을 변경할 수 있습니다. 조정 설정을 변경하려면 GameLift를 통해 플릿 용량 Auto-Scale (p. 119) 단원을 참조하십시오.

Note

활성 플릿은 삭제되었거나 오류 상태에 있는 빌드를 통해 배포될 수 있습니다. 이러한 점은 플릿 상태 또는 게임 세션을 호스팅하는 기능에 영향을 주지 않습니다. 이 경우 (빌드 정보를 가져오는 동안오류가 발생하면) 삭제 완료 빌드 상태 또는 오류를 볼 수 있습니다.

GameLift Console

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 메뉴 표시줄에서 플릿을 선택하여 플릿 목록을 보고 업데이트하고자 하는 플릿의 이름을 클릭합니

다. ACTIVE 상태에 있는 플릿만 편집할 수 있습니다.3. 플릿 상세 페이지의 작업에서 플릿 편집을 선택합니다.4. 플릿 편집 페이지에서 다음과 같은 업데이트를 할 수 있습니다. (보다 자세한 필드 설명은 사용자 지

정 게임 빌드용 GameLift 플릿 배포 (p. 101) 단원을 참조하십시오.)

• 이름과 설명처럼 플릿 속성을 변경합니다.• Metric groups(지표 그룹)을 추가 또는 삭제하여 Amazon CloudWatch에서 여러 플릿에 대해 집계

된 GameLift 지표를 추적하는 데 사용합니다.• 서버가 프로세싱되어 게임 세션을 실행하고 호스팅하는 방법을 서버 프로세스 할당 (실행 시간

구성) 및 게임 세션 정품 인증 설정을 업데이팅하여 변경합니다.• 이 플릿의 서버 프로세서에 연결되었던 EC2 포트 설정을 업데이트합니다.• 리소스 생성 제한 설정 업데이트• 게임 세션 보호를 켜고 끕니다.

5. 제출을 클릭해 변경 사항을 저장합니다.

AWS CLI

다음 AWS CLI 명령을 사용하여 플릿을 업데이트합니다.

• update-fleet-attributes• update-fleet-port-settings• update-runtime-configuration

플릿을 삭제하려면더 이상 필요 없는 플릿은 삭제할 수 있습니다. 플릿을 삭제하면 관련된 게임 세션과 플레이어 세션과 관련된모든 데이터 및 수집 지표 데이터가 영구적으로 제거됩니다. 대신에, 플릿 보관, Auto Scaling 비활성화 및 수동으로 인스턴스 0로 플릿을 조정합니다.

Note

삭제할 플릿에 VPC 피어링 연결이 있는 경우에는 먼저 CreateVpcPeeringAuthorization을 호출하여권한 부여를 요청해야 합니다. VPC 피어링 연결을 명시적으로 삭제할 필요는 없습니다. 이것은 플릿 삭제 프로세스에서 실시됩니다.

버전108

Amazon GameLift 개발자 안내서플릿에 별칭 추가

Amazon GameLift 콘솔 또는 AWS CLI 도구를 사용하여 플릿을 삭제할 수 있습니다.

GameLift Console

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 메뉴 표시줄에서 플릿을 선택하여 플릿 목록을 보고 삭제하고자 하는 플릿의 이름을 클릭합니다.

ACTIVE 또는 ERROR 상태의 플릿만 삭제할 수 있습니다.3. 선택한 플릿의 플릿 세부 정보 페이지에서 해당 플릿의 활성 인스턴스가 0개인지 확인합니다. 플릿

에 아직도 인스턴스가 있는 경우에는 Scaling(조정) 탭으로 이동하여 다음을 실행합니다.

• 플릿의 모든 조정 정책 비활성화 확인란을 선택합니다. 이렇게 하면 수동 조정 설정에 방해가 되는 모든 자동 조정이 중지됩니다.

• 원하는 인스턴스 수를 “0”으로 직접 조정합니다.

플릿을 축소하는 데 몇 분 정도 걸릴 수 있습니다. 게임 세션이 보호되는 활성 상태의 게임 세션이인스턴스에 있는 경우에는 게임 세션이 끝날 때까지 기다리거나 활성 게임 세션의 보호를 중지해야합니다(이 작업을 콘솔에서는 실행하지 못합니다. UpdateGameSession 참조).

4. 플릿을 축소하여 활성 인스턴스가 0이 되면 플릿을 삭제할 수 있습니다. 플릿 세부 정보 페이지 상단의 작업에서 플릿 종료를 선택합니다.

5. [Terminate fleet] 대화 상자에서 플릿 이름을 입력하여 삭제를 확인합니다.6. Delete를 클릭합니다.

AWS CLI

AWS Command Line Interface 도구를 다운로드하여 설치합니다.

1. 명령줄 창에서 describe-fleet-capacity를 호출하여 삭제할 플릿이 축소되어 활성 인스턴스가 0인지확인합니다. 플릿에 여전히 활성 인스턴스가 있는 경우에는

a. stop-fleet-actions를 호출하여 자동 조정을 비활성화합니다.b. update-fleet-capacity를 호출하고 파라미터 desired-instances를 "0"으로 설정합니다.c. 플릿이 축소되어 활성 인스턴스가 0이 될 때까지 기다립니다. 몇 분 정도 걸릴 수 있습니다. 게

임 세션이 보호되는 활성 상태의 게임 세션이 인스턴스에 있는 경우에는 게임 세션이 끝날 때까지 기다리거나 활성 게임 세션의 보호를 중지해야 합니다(update-game-session 참조).

2. 플릿이 축소되면 delete-fleet을 호출하여 플릿을 삭제합니다.

GameLift 플릿에 별칭 추가GameLift 별칭은 플릿 지정을 추상화하는 데 사용됩니다. 플릿 지정은 Amazon GameLift가 플레이어를 위한새로운 게임 세션을 만들 때 사용 가능한 리소스를 검색하는 위치를 알려 줍니다. 특정 플릿 ID 대신 별칭을사용하면 별칭의 대상 위치를 변경하여 플레이어 트래픽을 한 대상에서 다른 대상으로 더 쉽고 원활하게 전환할 수 있습니다.

두 종류의 별칭 라우팅 전략이 있습니다.

• Simple – 단순한 별칭은 플레이어 트래픽을 지정된 플릿 ID로 라우팅합니다. 언제든 별칭에 대한 플릿 ID를 업데이트할 수 있습니다.

• Terminal – terminal 별칭은 집합으로 확인되지 않습니다. 대신, 메시지를 클라이언트로 다시 전달합니다.예를 들어 만료된 클라이언트를 이용하는 플레이어를 업그레이드를 받을 수 있는 위치로 보내고 싶을 수있습니다.

플릿의 수명은 유한하며, 게임 수명 동안 플릿을 전환해야 하는 몇 가지 이유가 있습니다. 특히, 플릿의 게임서버 빌드를 업데이트하거나 기존 플릿에서 특정 컴퓨팅 리소스 속성(인스턴스 유형, 스팟/온디맨드 사용)을

버전109

Amazon GameLift 개발자 안내서플릿 문제 디버깅

변경할 수 없습니다. 대신 변경 사항을 적용한 새로운 플릿을 생성한 다음 플레이어를 새로운 플릿으로 전환해야 합니다. 별칭이 있는 경우 플릿 전환은 게임에 최소한의 영향을 미치며 플레이어에게는 보이지 않습니다.

별칭은 주로 대기열을 사용하지 않는 게임에서 유용합니다. 대기열에서 플릿을 전환하는 것은 새로운 플릿을만들고, 대기열에 추가하고, 플레이어에게 보이지 않는 오래된 플릿을 제거하는 간단한 문제입니다. 반면, 대기열을 사용하지 않는 게임 클라이언트는 GameLift 서비스와 통신할 때 사용할 플릿을 지정해야 합니다. 별칭이 없는 경우 플릿 전환 시 게임 코드를 업데이트하고 업데이트된 게임 클라이언트를 플레이어에게 배포해야 할 수 있습니다. 별칭이 있는 경우 둘 다 방지할 수 있습니다.

새 별칭 만들기여기에 설명된 대로 GameLift 콘솔을 사용하거나 AWS CLI 명령 create-alias를 사용하여 별칭을 만들 수 있습니다.

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 메뉴 모음에서 [Aliases]를 선택합니다.3. [Aliases] 페이지에서 [Create alias]를 클릭합니다.4. [Create alias] 페이지의 [Alias details] 부분에서 다음 작업을 수행하십시오.

• Alias name – 카탈로그에서 별칭을 쉽게 구별할 수 있도록, 기억하기 쉬운 이름을 입력합니다.• Description – (선택 사항) 더 확실히 구별할 수 있도록 별칭에 대한 짧은 설명을 입력합니다.

5. [Routing options] 부분의 [Type] 항목에서 [Simple] 또는 [Terminal]을 선택합니다.

• [Simple]을 선택한 경우 별칭에 연결할 수 있는 플릿을 선택합니다. simple 별칭은 플레이어 트래픽을관련 플릿으로 라우팅합니다.

• [Terminal]을 선택한 경우 플레이어에게 표시할 메시지를 입력합니다. terminal 별칭은 플릿으로 확인되지 않고 메시지를 클라이언트에게 전달하기만 합니다.

6. [Configure alias]를 클릭합니다.

별칭 편집하기여기에 설명된 대로 GameLift 콘솔을 사용하거나 AWS CLI 명령 update-alias를 사용하여 별칭을 편집할 수있습니다.

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 메뉴 모음에서 [Aliases]를 선택합니다.3. [Aliases] 페이지에서 편집할 별칭의 이름을 클릭합니다.4. 선택한 alias 페이지의 [Actions]에서 [Edit alias]를 선택합니다.5. [Edit alias] 페이지에서 다음을 편집할 수 있습니다.

• Alias name – 별칭의 표시 이름.• Description – 별칭에 대한 간략한 설명.• Type – 플레이어 트래픽 라우팅 전략. [Simple]을 선택하여 연결된 플릿을 변경하거나 [Terminal]을 선

택하여 종료 메시지를 편집합니다.6. [Submit]을 클릭합니다.

GameLift 플릿 문제 디버깅이 주제에서는 관리형 GameLift 솔루션의 플릿 구성 문제에 대한 지침을 제공합니다. 추가적인 문제 해결을위해 플릿이 활성화되면 플릿 인스턴스에 원격으로 액세스할 수 있습니다. GameLift 플릿 인스턴스에 원격으로 액세스 (p. 113) 단원을 참조하십시오.

버전110

Amazon GameLift 개발자 안내서플릿 문제 디버깅

플릿 생성 문제플릿 생성 작동 방식

새 플릿이 생성되면 GameLift 서비스가 일련의 작업을 수행하여 플릿 구성에 따른 단일 인스턴스를 준비합니다. 플릿 생성의 각 단계가 완료되면 플릿 현재 상태와 함께 플릿에 따라 일련의 이벤트가 생성됩니다.GameLift 콘솔을 사용하여 (플릿 세부 정보 페이지에서 Events 탭 참조) 플릿 생성에 따른 이벤트를 포함한모든 이벤트를 추적할 수 있습니다.

플릿 생성 중에 문제가 발생하면 오류 설명 메시지와 함께 플릿의 상태가 Error 상태로 변경됩니다. 플릿 생성이 실패한 이 단계는 좋은 지표도 될 수 있습니다. 플릿 생성 단계는

• New(새로운) – 플릿 기록이 생성됩니다. 초기 인스턴스에 따라 할당된 리소스• Downloading(다운로드 중) – 게임 빌드 파일을 인스턴스로 다운로드하고 추출합니다.• Validating(확인 중) – 다운로드된 게임 빌드 파일이 검증됩니다.• Building(빌드 중) – 인스턴스에 게임 서버 빌드를 사용 가능하면 설치 스크립트를 사용하여 설치합니다.• Activating(활성화 중) – 플릿 실행 시간 구성에 따라 서버 프로세스가 시작됩니다. 게임 세션을 호스팅할

준비가 되었다는 보고를 하기 위해 적어도 하나의 프로세스가 GameLift와 통신해야 합니다.

한 서버 프로세스가 GameLift에 준비 완료를 알리면 플릿 상태가 활성으로 변경됩니다.

공통 문제

다운로드 및 검증

이 단계에서는 추출된 빌드 파일에 문제가 있거나 설치 스크립트가 실행되지 않거나 혹은 실행 시간 구성에지정된 실행 파일이 빌드 파일에 포함되지 않아 플릿 생성이 실패할 수 있습니다. GameLift는 이 문제에 대한로그를 제공합니다.

만약 로그가 이 문제를 발견하지 못한다면 문제는 내부 서비스 오류일 가능성이 있습니다. 이 경우, 플릿을다시 생성해보십시오. 문제가 지속된다면 (파일이 손상되었을 수도 있으니) 게임 빌드의 업로드를 다시 고려하십시오. GameLift 지원에 문의하거나 포럼에 질문을 게시해도 됩니다.

빌드

빌드 단계 동안의 실패 문제는 대부분 게임 빌드 파일 및/혹은 설치 스크립트 문제입니다. GameLift에 업로드할 때 게임 빌드 파일을 적절한 운영 체제가 실행 중인 시스템에 설치할 수 있는지 확인하십시오. 기존 개발환경이 아닌 건전한 OS 설치를 사용했는지 확인하십시오.

활성화하는 중

대부분의 일반 플릿 생성 문제는 Activating(활성화 중) 단계 동안 발생합니다. 이 단계에서는 게임 서버 실행가능성, 실행 시간 구성 설정, Server SDK를 사용하여 GameLift 서비스와 상호 작용하는 게임 서버 기능을비롯해 여러 요소에 대한 테스트가 진행됩니다. 플릿 활성화 단계에서 발생하는 공통적인 문제는 다음과 같습니다.

서버 프로세스를 시작하지 못합니다.

먼저, 플릿의 실행 시간 구성에서 실행 경로와 선택적 시작 파라미터를 올바르게 설정했는지 확인합니다. GameLift 콘솔(플릿 세부 정보 페이지에서 용량 할당 (p. 169) 참조) 탭을 사용하거나 AWS CLI 명령 describe-runtime-configuration을 호출하여 플릿의 현재 실행 시간 구성을 볼 수 있습니다. 실행 시간구성이 올바르게 보인다면 게임 빌드 파일 및/또는 설치 스크립트 문제를 확인합니다.

서버 프로세스가 시작되지만 플릿을 활성화할 수 없습니다.

서버 프로세스가 시작되고 계속 성공적으로 실행되지만 플릿이 활성 상태로 변경되지 않는 경우, 서버프로세스가 GameLift에 게임 세션을 호스팅할 준비가 되었음을 알리는 데 실패했기 때문일 가능성이 높

버전111

Amazon GameLift 개발자 안내서플릿 문제 디버깅

습니다. 게임 서버가 Server API 작업 ProcessReady()를 올바르게 호출하고 있는지 확인합니다(서버프로세스 준비 (p. 42) 참조).

VPC 피어링 연결 요청 실패

VPC 피어링 연결로 생성되는 플릿은(새 플릿으로 VPC 피어링을 설정하려면 (p. 161) 참조) 이 활성화단계에서 VPC 피어링이 실행됩니다. 어떤 이유로든 VPC 피어링에 실패할 경우 새 플릿이 활성 상태로바뀌지 못합니다. describe-vpc-peering-connections를 호출하여 피어링 요청이 성공했는지 여부를 추적할 수 있습니다. 유효한 VPC 피어링 권한 부여가 존재하는지 확인해야 합니다(describe-vpc-peering-authorizations). 권한 부여는 24시간 동안만 유효하기 때문입니다.

서버 프로세스 문제서버 프로세스가 시작되었지만 곧 실패했거나 상태 불량을 보고합니다.

게임 빌드와 관련된 문제 외에, 인스턴스에서 동시에 너무 많은 서버 프로세스를 실행하려고 할 경우에도 이런 결과가 발생할 수 있습니다. 동시에 실행 가능한 최적 프로세스 수는 인스턴스 유형과 게임 서버의 리소스 요구 사항에 따라 다릅니다. 성능이 개선되는지 보려면 플릿의 실행 시간 구성에 설정되어 있는 동시 프로세스 수를 줄여보십시오. GameLift 콘솔(플릿의 용량 할당 설정 편집)을 사용하거나 AWSCLI 명령 update-runtime-configuration을 호출하여 플릿의 실행 시간 구성을 변경할 수 있습니다.

플릿 삭제 문제최대 인스턴스 카운트 때문에 플릿을 종료할 수 없습니다.

이 오류 메시지는 삭제되어 허용되면 안 되는 플릿의 인스턴스가 여전히 활성 상태임을 나타냅니다. 먼저 플릿의 활성 인스턴스를 0으로 축소해야 합니다. 플릿의 인스턴스 카운트를 “0”으로 직접 설정한 후축소가 적용될 때까지 기다립니다. 수동 설정에 방해가 되므로 자동 조정(auto-scaling) 기능을 해제해야합니다.

VPC 작업이 허용되지 않습니다.

이 문제는 VPC 피어링 연결을 생성한 플릿에만 적용됩니다(GameLift에 대한 VPC 피어링 (p. 160) 참조). 이 시나리오는 플릿 삭제 프로세스에 플릿의 VPC와 VPC 피어링 연결 삭제도 포함되기 때문에 발생합니다. GameLift 서비스 API CreateVpcPeeringAuthorization()을 호출하거나 AWS CLI 명령 create-vpc-peering-authorization를 사용하여 먼저 권한부터 받아야 합니다. 권한을 받은 후에 플릿을삭제할 수 있습니다.

Realtime 서버 플릿 문제좀비 게임 세션: 게임을 시작하고 실행하지만 절대로 끝나지 않습니다.

이 문제가 다음 시나리오 중 하나처럼 관찰될 수 있습니다.• 플릿의 Realtime 서버에서 스크립트 업데이트를 픽업하지 않습니다.• 플릿이 최대 용량에 빠르게 도달하고, 플레이어 활동(예: 새로운 게임 세션 요청)이 감소해도 축소되지

않습니다.

대부분 Realtime 스크립트에서 processEnding 호출에 실패한 것이 원인입니다. 플릿이 활성화되고게임 세션이 시작되더라도 이를 중지할 방법이 없습니다. 따라서 게임 세션을 실행 중인 Realtime 서버가 비워지지 않아 새로운 세션을 시작하지 못하고 새로운 Realtime 서버가 확보될 때만 새로운 게임 세션이 시작될 수 있습니다. 그리고 Realtime 스크립트 업데이트는 이미 실행 중인 게임 세션에 영향을 주지 않습니다.

이를 방지하기 위해서는 processEnding 호출을 시작하는 메커니즘이 스크립트에 있어야 합니다.Realtime 서버 스크립트 예제 (p. 65)에서 설명한 것처럼 한 가지 방법은 일정 시간 동안 플레이어가 연결되지 않을 경우 스크립트에서 현재 게임 세션을 종료하도록 유휴 세션 제한 시간을 프로그래밍하는 것입니다.

버전112

Amazon GameLift 개발자 안내서플릿 인스턴스에 원격으로 액세스

그러나 이 시나리오가 발생할 경우 Realtime 서버의 중단을 막는 두 가지 차선책이 있습니다. 그 방법은 Realtime 서버 프로세스 — 또는 기본 플릿 인스턴스 —가 다시 시작하게 하는 것입니다. 이 경우GameLift가 게임 세션을 자동으로 종료합니다. Realtime 서버가 비워지면 Realtime 스크립트 최신 버전을 사용하여 새로운 게임 세션을 시작할 수 있습니다.

이 문제의 정도에 따라 두 가지 방법으로 해결할 수 있습니다.• 전체 플릿을 축소합니다. 이 방법은 간단하면서 광범위한 영향을 줍니다. 플릿을 제로 인스턴스로 숙

소하고, 플릿이 완전히 축소될 때까지 기다렸다가 다시 확장합니다. 그러면 기존 게임 세션이 모두 지워져 가장 최근에 업데이트된 Realtime 스크립트로 새로 시작할 수 있습니다.

• 인스턴스에 원격으로 액세스하여 프로세스를 다시 시작합니다. 이 방법은 해결할 프로세스가 적을 경우에 좋습니다. 이미 인스턴스에 로그인한 경우에는(예: 테일 로그 또는 디버깅을 위해) 이 방법이 가장 빠른 방법일 수 있습니다. GameLift 플릿 인스턴스에 원격으로 액세스 (p. 113) 단원을 참조하십시오.

Realtime 스크립트에서 processEnding을 호출하는 방법을 포함시키지 않을 경우 플릿이 활성화되어 게임세션이 시작되어도 두 가지 어려운 상황이 발생할 수 있습니다. 첫째, 실행 중인 게임 세션이 끝나지 않습니다. 따라서 이 게임 세션을 실행 중인 서버 스포세스가 결코 비워지지 않아 새 게임 세션을 시작하지 못합니다. 둘째, Realtime 서버가 스크립트 업데이트를 픽업하지 않습니다.

GameLift 플릿 인스턴스에 원격으로 액세스현재 GameLift 플릿에서 실행 중인 모든 플릿 인스턴스에 원격으로 액세스할 수 있습니다. 이 기능은 플릿 활성화 문제를 해결하는 데 유용합니다. 이 기능을 이용하면 실제 플레이어 트래픽을 이용해 벤치마킹 도구를실행하거나 로그 업데이트를 추적하는 등 실제 게임 서버 활동을 파악할 수 있습니다.

개별 GameLift 인스턴스에 원격으로 액세스할 경우 다음 사항을 염두에 두십시오.

• GameLift 서비스가 집합 활동과 용량을 계속 관리합니다. 인스턴스에 원격 연결을 구성해도 GameLift의연결 관리 방식에는 어떤 영향도 미치지 않습니다. 결과적으로, 이 인스턴스가 플릿 런타임 구성을 계속 실행하고, 서버 프로세스를 중지/시작하며, 게임 세션을 생성/종료하고, 플레이어 연결을 허용합니다. 뿐만아니라 GameLift 서비스가 축소 이벤트의 일부로 언제든 인스턴스를 종료할 수 있습니다.

• 활성 게임 세션을 호스팅하고 있으며 현재 플레이어가 연결된 인스턴스에 로컬 변경을 수행하면 플레이어경험에 큰 영향을 미칠 수 있습니다. 예를 들어 로컬 변경은 개별 플레이어 연결을 끊고, 게임 세션과 충돌하거나 심지어 전체 인스턴스를 종료하여 여러 게임 세션과 플레이어에게 영향을 미칠 가능성이 있습니다.

GameLift 인스턴스에서 게임이 배포되고 관리되는 방식에 관한 자세한 내용은 다음 주제를 참조하십시오.

• Amazon GameLift 작동 방식 (p. 3)• GameLift 플릿 문제 디버깅 (p. 110)• 플릿의 여러 프로세스 관리 방식 (p. 98)

인스턴스에 연결Windows나 Linux를 실행 중인 원격 인스턴스에 액세스할 수 있습니다. Windows 인스턴스에 연결하려면 원격 데스크톱 프로토콜(RDP) 클라이언트를 사용합니다. Linux 인스턴스에 연결하려면 SSH 클라이언트를 사용합니다.

AWS CLI를 이용해 원격 인스턴스에 액세스하는 데 필요한 정보를 얻습니다. 도움말은 AWS CLI CommandReference를 참조하십시오. AWS Command Line Interface 도구를 다운로드하여 설치합니다. 또한GameLift Service API Reference에서 사용 가능한 설명서와 AWS SDK를 참조할 수 있습니다.

1. 연결할 인스턴스의 ID를 찾습니다. 액세스를 요청할 때 인스턴스 ID를 지정해야 합니다. 플릿 ID와 함께AWS CLI 명령 describe-instances(또는 API 호출 DescribeInstances)를 사용하여 플릿의 모든 인스턴스

버전113

Amazon GameLift 개발자 안내서플릿 인스턴스에 원격으로 액세스

에 대한 정보를 얻을 수 있습니다. 예제 요청 및 응답을 포함한 도움이 필요하면 CLI 또는 API 참조 가이드를 보십시오.

2. 인스턴스에 대한 액세스 자격 증명을 요청합니다. 인스턴스 ID를 확보한 후에 명령 get-instance-access(또는 API 호출 GetInstanceAccess)를 이용해 액세스 자격 증명과 기타 정보를 요청합니다. 예제 요청및 응답을 포함한 도움이 필요하면 CLI 또는 API 참조 가이드를 보십시오. 요청이 수락되면 GameLift가인스턴스의 운영 체제, IP 주소, 자격 증명 세트(사용자 이름과 비밀 키)를 반환합니다. 자격 증명 형식은인스턴스 운영 체제에 따라 다릅니다. 다음 지침을 이용해 RDP나 SSH에 대한 자격 증명을 가져옵니다.

• Windows 인스턴스 Windows 인스턴스–에 연결을 시도하면 RDP가 사용자 이름과 암호를 요구합니다. get-instance-access 요청이 단순한 문자열로 이러한 값을 반환하므로 이 반환된 값을 그대로 사용할 수 있습니다. 예제 자격 증명:

"Credentials": { "Secret": "aA1bBB2cCCd3EEE", "UserName": "gl-user-remote"}

• Linux인스턴스의 경우 – Linux 인스턴스에 연결을 시도하면 SSH가 사용자 이름과 프라이빗 키를 요구합니다. GameLift는 RSA 프라이빗 키를 발행하고 줄 바꿈을 나타내는 줄 바꿈 문자(\n)를 포함해하나의 문자열로 반환합니다. 프라이빗 키를 사용할 수 있도록 하려면 (1) 문자열을 .pem 파일로 변환하고 (2) 새 파일에 대한 권한을 설정해야 합니다. 예제 자격 증명이 반환되었습니다.

"Credentials": { "Secret": "-----BEGIN RSA PRIVATE KEY-----nEXAMPLEKEYKCAQEAy7WZhaDsrA1W3mRlQtvhwyORRX8gnxgDAfRt/gx42kWXsT4rXE/b5CpSgie/\nvBoU7jLxx92pNHoFnByP+Dc21eyyz6CvjTmWA0JwfWiW5/akH7iO5dSrvC7dQkW2duV5QuUdE0QW\nZ/aNxMniGQE6XAgfwlnXVBwrerrQo+ZWQeqiUwwMkuEbLeJFLhMCvYURpUMSC1oehm449ilx9X1F\nG50TCFeOzfl8dqqCP6GzbPaIjiU19xX/azOR9V+tpUOzEL+wmXnZt3/nHPQ5xvD2OJH67km6SuPW\noPzev/D8V+x4+bHthfSjR9Y7DvQFjfBVwHXigBdtZcU2/wei8D/HYwIDAQABAoIBAGZ1kaEvnrqu\n/uler7vgIn5m7lN5LKw4hJLAIW6tUT/fzvtcHK0SkbQCQXuriHmQ2MQyJX/0kn2NfjLV/ufGxbL1\nmb5qwMGUnEpJaZD6QSSs3kICLwWUYUiGfc0uiSbmJoap/GTLU0W5Mfcv36PaBUNy5p53V6G7hXb2\nbahyWyJNfjLe4M86yd2YK3V2CmK+X/BOsShnJ36+hjrXPPWmV3N9zEmCdJjA+K15DYmhm/tJWSD9\n81oGk9TopEp7CkIfatEATyyZiVqoRq6k64iuM9JkA3OzdXzMQexXVJ1TLZVEH0E7bhlY9d8O1ozR\noQs/FiZNAx2iijCWyv0lpjE73+kCgYEA9mZtyhkHkFDpwrSM1APaL8oNAbbjwEy7Z5Mqfql+lIp1\nYkriL0DbLXlvRAH+yHPRit2hHOjtUNZh4Axv+cpg09qbUI3+43eEy24B7G/Uh+GTfbjsXsOxQx/x\np9otyVwc7hsQ5TA5PZb+mvkJ5OBEKzet9XcKwONBYELGhnEPe7cCgYEA06Vgov6YHleHui9kHuws\nayav0elc5zkxjF9nfHFJRry21R1trw2Vdpn+9g481URrpzWVOEihvm+xTtmaZlSp//lkq75XDwnU\nWA8gkn6O3QE3fq2yN98BURsAKdJfJ5RL1HvGQvTe10HLYYXpJnEkHv+Unl2ajLivWUt5pbBrKbUC\ngYBjbO+OZk0sCcpZ29sbzjYjpIddErySIyRX5gV2uNQwAjLdp9PfN295yQ+BxMBXiIycWVQiw0bH\noMo7yykABY7Ozd5wQewBQ4AdSlWSX4nGDtsiFxWiI5sKuAAeOCbTosy1s8w8fxoJ5Tz1sdoxNeGs\nArq6Wv/G16zQuAE9zK9vvwKBgF+09VI/1wJBirsDGz9whVWfFPrTkJNvJZzYt69qezxlsjgFKshy\nWBhd4xHZtmCqpBPlAymEjr/TOlbxyARmXMnIOWIAnNXMGB4KGSyl1mzSVAoQ+fqR+cJ3d0dyPl1j\njjb0Ed/NY8frlNDxAVHE8BSkdsx2f6ELEyBKJSRr9snRAoGAMrTwYneXzvTskF/S5Fyu0iOegLDa\nNWUH38v/nDCgEpIXD5Hn3qAEcju1IjmbwlvtW+nY2jVhv7UGd8MjwUTNGItdb6nsYqM2asrnF3qS\nVRkAKKKYeGjkpUfVTrW0YFjXkfcrR/V+QFL5OndHAKJXjW7a4ejJLncTzmZSpYzwApc=\n-----END RSA PRIVATE KEY-----", "UserName": "gl-user-remote"}

AWS CLI를 사용할 경우, --query 및 --output 파라미터를 자체 get-instance-access 요청에 포함하여 올바른 형식의 .pem 파일을 자동적으로 생성할 수 있습니다.

.pem 파일에 대한 권한을 설정하려면 다음 명령을 실행합니다.

$ chmod 400 MyPrivateKey.pem

3. 원격 연결을 위한 포트를 엽니다. GameLift 플릿의 인스턴스는 플릿 구성에서 권한이 있는 포트를 통해서만 액세스할 수 있습니다. describe-fleet-port-settings 명령을 사용하여 플릿의 포트 설정을볼 수 있습니다.

버전114

Amazon GameLift 개발자 안내서플릿 용량 조정

모범 사례로, 필요할 때만 원격 액세스용 포트를 열고 완료되면 닫을 것을 권장합니다. update-fleet-port-settings 명령을 사용하여 원격 연결을 위한 포트 설정을 추가합니다(예: SSH는 22,RDP는 3389). IP 범위 값에는 연결에 사용할 장치의 IP 주소를 지정합니다(CIDR 형식으로 변환). 예:

$ aws gamelift update-fleet-port-settings --fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa" --inbound-permission-authorizations "FromPort=22,ToPort=22,IpRange=54.186.139.221/32,Protocol=TCP"

4. 원격 연결 클라이언트를 엽니다. Windows용 원격 데스크톱 또는 Linux 인스턴스용 SSH를 사용합니다.IP 주소, 포트 설정, 액세스 자격 증명을 사용하여 인스턴스에 연결합니다.

SSH 예:

ssh -i MyPrivateKey.pem [email protected]

원격 인스턴스의 파일 보기인스턴스에 원격으로 연결하려면 완전한 사용자 및 관리자 액세스가 필요합니다. 즉 게임 호스팅에 오류와장애를 야기할 수도 있다는 뜻입니다. 인스턴스에서 활성 플레이어 게임을 호스팅하는 경우, 게임 세션 충돌및 플레이어 연결 해제, 게임 종료 프로세스 방해, 저장된 게임 데이터와 로그에 오류 유발 등의 위험을 떠안게 됩니다.

인스턴스의 호스팅 리소스는 다음 위치에 있습니다.

• 게임 빌드 파일. GameLift에 업로드한 게임 빌드에 포함된 파일입니다. 여기에는 하나 이상의 게임 서버 실행 파일, 자산, 종속성 파일이 포함됩니다. 이 파일은 game이라는 루트 디렉터리에 위치합니다.• Windows: c:\game• Linux: /local/game

• 게임 로그 파일. 게임 서버가 생성하는 로그 파일은 game루트 디렉터리에서 사용자가 지정한 디렉터리 경로에 저장됩니다.

• GameLift 호스팅 리소스. GameLift 서비스가 게임 호스팅을 관리하기 위해 사용한 파일은 Whitewater라는 루트 디렉터리에 있습니다. 어떤 이유로든 이 파일을 변경해서는 안 됩니다.

• 런타임 구성. 플릿의 런타임 구성은 개별 인스턴스에 대해 액세스할 수 없습니다. 실행 시간 구성에 대한변경 사항(시작 경로, 시작 파라미터, 최대 동시 프로세스 수)을 테스트하려면 플릿 규모의 실행 시간 구성을 업데이트해야 합니다(AWS SDK 작업 UpdateRuntimeConfiguration 또는 AWS CLI update-runtime-configuration 참조).

• TLS 인증서. TLS 인증서 생성이 활성화되어 있는 플릿에 인스턴스가 있는 경우 인증서, 인증서 체인, 프라이빗 키, 루트 인증서를 포함한 인증서 파일은 다음 위치에 저장됩니다.• Windows: c:\\GameMetadata\Certificates• Linux: /local/gamemetadata/certificates/

GameLift 플릿 용량 조정인스턴스에서 측정되는 플릿 용량은 플릿이 동시에 호스팅할 수 있는 게임 세션 수 및 확장 가능한 동시 플레이어 수를 나타냅니다. 게임 호스팅에서 가장 어려운 작업 중 하나는 리소스가 필요하지 않을 때 리소스 비용을 낭비하지 않으면서 모든 플레이어를 수용할 수 있는 충분한 용량을 유지하는 것입니다. 자세한 내용은GameLift에서 용량 조정 작동 방식 (p. 5)을 참조하십시오.

플릿 조정을 완전하게 제어할 수 있습니다. 특정 인스턴스의 수에 맞춰 용량을 수동으로 설정하거나 현재 플레이어 수요를 기준으로 용량을 조정하는 Auto-scaling을 활용할 수 있습니다. Auto-scaling의 옵션인 대상 추

버전115

Amazon GameLift 개발자 안내서콘솔에서 플릿 용량을 설정하려면

적(Target Tracking)을 켜서 시작하는 것이 좋습니다. 대상 추적은 현재 플레이어를 수용할 수 있는 충분한 호스팅 리소스와 예상치 못한 플레이어 수요 급증을 처리할 수 있는 충분한 추가 리소스를 유지하는 데 도움이되는 효과적이고 사용하기 쉬운 조정 도구입니다. 대부분의 게임에서 대상 추적은 가장 효과적인 솔루션입니다.

이번 섹션은 다음 작업에 대한 상세한 도움을 제공합니다.

• 용량 조정의 최소 및 최대 제한 조정 (p. 116)• 수동으로 용량 수준 설정 (p. 118)• 대상 추적을 이용하는 Auto-scaling 켜기 (p. 120)• 규칙 기반 Auto-scaling 관리(고급 기능) (p. 121)• Auto-scaling을 일시적으로 비활성화 (p. 118)

대부분의 플릿 조정 작업은 GameLift 콘솔을 사용해 수행할 수 있습니다. 또한 모든 플릿 조정에 GameLift 서비스 API의 AWS SDK나 AWS CLI를 사용할 수 있습니다.

콘솔에서 플릿 용량을 설정하려면1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 집합 페이지에서 집합의 세부 정보 페이지를 열 활성 집합의 이름을 클릭합니다. (대시보드를 통해 집합

의 세부 정보 페이지에 액세스할 수도 있습니다.)3. Scaling(조정) 탭을 열어 과거 조정 지표를 확인하거나, 현재 설정을 확인 또는 변경할 수 있습니다. 설정

은 지표 그래프 아래 위치해 있습니다. 이번 섹션에서는 조정 제한을 보거나 업데이트하고, 수동으로 플릿 용량을 조정하고, auto-scaling을 활성화 또는 비활성화하고, 대상 기반의 auto-scaling을 켜고, 모든활성 auto-scaling 정책을 확인할 수 있습니다.

주제• GameLift 플릿 용량 제한 설정 (p. 116)• GameLift 플릿에서 수동으로 용량 설정 (p. 118)• GameLift를 통해 플릿 용량 Auto-Scale (p. 119)

GameLift 플릿 용량 제한 설정플릿의 크기는 포함된 인스턴스의 수로 정의됩니다. 각 플릿에는 최소 및 최대 제한 값이 정의되어 있습니다.게임에 필요한 정도에 따라 설정할 수 있습니다. (Auto-scaling이나 수동 조정을 이용하는)플릿 용량에 대한모든 변경 요청은 현재 제한 값 이내여야 합니다. 새 플릿의 기본 제한 값은 최소는 0개 인스턴스, 최대는 1개인스턴스입니다. 플릿을 확장하기 전에 플릿의 제한 값을 조정해야 합니다.

플릿을 Auto-scaling 하는 경우, 최대 제한을 사용하면 GameLift가 플레이어 수요를 수용하기 위해 필요한 플릿을 확장하는 동시에 DDOS 공격 등의 상황에서 호스팅 비용이 급등하는 것을 방지합니다. 용량이 최대 제한 값에 가까워졌을 때 이를 경보하도록 CloudWatch를 설정하면 상황을 평가해 필요에 따라 수동으로 조정을 할 수 있습니다. (또한 결제 알림을 설정해 AWS 비용을 모니터링 할 수 있습니다.). 최소 제한은 일부 호스팅을 항상 사용 가능한 상태로 유지하기 원할 때 유용합니다.

제한은 수동으로 조정한 플릿에도 적용됩니다. 제한 값 범위를 넘는 값으로 플릿 용량을 조정하려면, 먼저 제한 값을 변경해야 합니다. 플릿 용량이 게임 가용성과 플레이어 경험에 큰 영향을 미치기 때문에 제한 기능을사용해 용량을 추가적으로 제어하는 계층을 만들 수 있습니다.

GameLift 콘솔이나 AWS CLI를 사용해 플릿 용량의 제한을 설정할 수 있습니다. 플릿은 활성화 상태이어야합니다.

버전116

Amazon GameLift 개발자 안내서플릿 용량 제한 설정

용량 제한을 설정하려면Console

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 집합 페이지에서 집합의 세부 정보 페이지를 열 활성 집합의 이름을 클릭합니다. (대시보드를 통해

집합의 세부 정보 페이지에 액세스할 수도 있습니다.)3. Scaling(조정) 탭을 열어 과거 조정 지표를 확인하거나, 현재 설정을 확인 또는 변경할 수 있습니다.

조정 설정은 지표 그래프 아래 위치해 있습니다.4. Instance Limits(인스턴스 제한) 아래에서 최소 및 최대 인스턴스 수를 설정합니다. 각 컨트롤에서

확인 표시 버튼 을 클릭하여 변경 사항을 커밋합니다.

현재 플릿의 원하는 인스턴스 값이 새로운 제한 범위 밖일 경우 오류가 발생합니다. 이 경우, 먼저플릿의 원하는 인스턴스 수를 새로운 제한 범위 이내로 조정해야 합니다. Scaling(조정) 탭에서 이렇게 설정할 수 있습니다. 플릿에 auto-scaling을 사용하고 있는 경우, auto-scaling을 비활성화하고 원하는 인스턴스 수를 수동으로 조정한 후 새로운 제한 범위를 설정한 다음 auto-scaling을 다시 활성화 시킵니다.

Scaling(조정) 탭 맨 위의 그래프에 새 제한 값이 즉시 표시됩니다.AWS CLI

1. 현재 용량 설정을 확인합니다. 명령줄 창에서 용량 변경을 원하는 플릿의 플릿 ID와 함께 describe-fleet-capacity 명령을 사용합니다. 이 명령은 현재 인스턴의 수와 용량 제한이 포함된 FleetCapacity객체를 반환합니다. 새 인스턴스 제한 값이 현재 원하는 인스턴스에 대한 설정을 수용하는지 확인합니다.

aws gamelift describe-fleet-capacity --fleet-id <unique fleet identifier>

2. 제한에 대한 설정을 업데이트합니다. 명령줄 창에 다음 파라미터와 함께 update-fleet-capacity 명령을 사용합니다. 동일한 명령으로 두 인스턴스 제한 값과 원하는 인스턴스 수를 조정할 수 있습니다.

--fleet-id <unique fleet identifier>--max-size <maximum capacity for auto-scaling>--min-size <minimum capacity for auto-scaling>--desired-instances <fleet capacity as an integer> [Optional]

예:

aws gamelift update-fleet-capacity--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--max-size 10--min-size 1--desired-instances 10

복사 가능 버전:

aws gamelift update-fleet-capacity --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --max-size 10 --min-size 1 --desired-instances 10

요청이 성공하면 플릿 ID가 반환됩니다. 새 max-size 또는 min-size 값이 기존의 원하는 인스턴스에 대한설정과 충돌하는 경우 오류가 반환됩니다.

버전117

Amazon GameLift 개발자 안내서수동으로 플릿 용량 설정

GameLift 플릿에서 수동으로 용량 설정새 플릿을 생성하면, 플릿 용량은 자동으로 한 개 인스턴스로 설정됩니다. 이에 대한 응답으로 GameLift는 구성된 게임 서버 프로세스로 새 인스턴스 하나를 시작시킵니다. 플릿 용량을 변경하려면 auto-scaling을 켜거나, 해당 플릿에 대해 원하는 인스턴스의 수를 수동 설정합니다. 플릿 용량 조정 (p. 5) 단원에 대해 자세히 알아봅니다.

Auto-scaling이 불필요할 때나 일시적으로 또는 영구적으로 임의의 인스턴스 수에서 용량을 유지해야 할 때수동 플릿 용량 설정이 유용할 수 있습니다. 원하는 용량을 수동으로 설정하는 경우, 이 작업은 (1) 플릿에 대한 auto-scaling 정책이 없을 때나 (2) auto-scaling을 비활성화 시켰을 때에만 이런 작업이 실제 플릿 용량에영향을 준다는 점을 유념해야 합니다. Auto-scaling을 활성화한 경우, 그 즉시 조정 규칙에 따라 원하는 용량으로 재설정됩니다.

GameLift 콘솔이나 AWS CLI를 사용하여 플릿 용량을 수동으로 설정할 수 있습니다. 플릿은 활성화 상태이어야 합니다.

Auto-scaling 비활성화Auto-scaling 비활성화를 사용하여 특정 플릿에 대한 auto-scaling을 끄고 수동 조정으로 돌아갈 수 있습니다.언제든지 특정 플릿의 auto-scaling 정책을 삭제할 수 있지만, 이 기능을 이용하면 임시로 auto-scaling을 끄고 정책은 나중에 사용할 수 있도록 그대로 유지할 수 있습니다. 예를 들어 임박한 주요 업데이트를 준비하기 위해 확장을 해야 할 때 auto-scaling을 끄고, 원하는 플릿 용량을 수동 설정한 후 이 이벤트가 진행된 후에 auto-scaling을 다시 활성화시킬 수 있습니다. Auto-scaling을 비활성화시키면, 현재 활성화된 정책과 미래를 위해 생선한 정책 등을 포함해 해당 플릿에 대한 모든 auto-scaling 작업이 정지됩니다. GameLift 콘솔에서Auto-scaling을 활성화/비활성화 할 수 있습니다("수동으로 용량을 설정하려면"에서 4단계 참조).

수동으로 플릿 용량을 설정하려면Console

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 집합 페이지에서 집합의 세부 정보 페이지를 열 활성 집합의 이름을 클릭합니다. (대시보드를 통해

집합의 세부 정보 페이지에 액세스할 수도 있습니다.)3. Scaling(조정) 탭을 열어 과거 조정 지표를 확인하거나, 현재 설정을 확인 또는 변경할 수 있습니다.

조정 설정은 지표 그래프 아래 위치해 있습니다.4. Auto-Scaling Policies(Auto-scaling 정책) 아래에서 "Disable all scaling policies(모든 조정 정책 비활

성화)" 확인란을 선택하고 확인 표시 버튼 를 클릭해 변경 사항을 커밋합니다. 이 설정은 플릿의 모든 auto-scaling 작업을 정지시킵니다. 현재 플릿에 대한 정책이 없어도 이렇게 하는 것이 좋습니다.새로 생성한 정책이 적용되는 것을 방지하기 위해서입니다. 변경 사항을 적용하면 활성 상태의 조정정책이 나열된 테이블에 모든 정책이 '비활성'화 된 것이 표시됩니다.

5. Auto-Scaling Policies(Auto-scaling 정책) 아래 "수동으로 원하는 인스턴스 수를...로 조정" 옵션에서플릿에 대한 인스턴스 수를 지정합니다. 이 값을 통해 활성 상태로 유지하고 게임 세션 호스팅에 대한 준비를 할 인스턴스 수를 GameLift에 알려줍니다. 변경 사항을 커밋하려면 확인 표시 버튼 .

새로 지정한 원하는 인스턴스 값이 플릿 용량 제한 밖일 경우 오류가 발생합니다. 이 경우, 먼저 새로 지정한 인스턴스 수가 허용되도록 플릿의 인스턴스 제한을 조정해야 합니다. Scaling(조정) 탭에서도 인스턴스 제한을 설정할 수 있습니다.

인스턴스 제한 및 수동 조정 수준에 대한 변경 사항을 커밋하자마자 새 값이 Scaling(조정) 탭의 맨 위에있는 그래프에 반영됩니다. GameLift는 추가 인스턴스를 배포하거나 불필요한 인스턴스를 종료함으로써 즉시 변경 사항에 대응합니다. 이 프로세스가 완료되면 Active(활성) 인스턴스 수가 새로 업데이트한원하는 값에 맞게 변경됩니다. 이 프로세스는 몇 분 정도 걸릴 수 있습니다.

버전118

Amazon GameLift 개발자 안내서플릿 용량 Auto-Scale

AWS CLI

1. 현재 용량 설정을 확인합니다. 명령줄 창에서 용량 변경을 원하는 플릿의 플릿 ID와 함께 describe-fleet-capacity 명령을 사용합니다. 이 명령은 현재 인스턴의 수와 용량 제한이 포함된 FleetCapacity객체를 반환합니다. 새 인스턴스 수가 최소 제한과 최대 제한 사이인지 확인합니다.

aws gamelift describe-fleet-capacity --fleet-id <unique fleet identifier>

2. 원하는 용량으로 업데이트합니다. update-fleet-capacity 명령과 함께 플릿 ID와 새 desired-instances 값을 사용합니다. 이 값이 현재 제한 값 범위 밖일 경우 동일한 명령에 조정한 제한 값을포함시킵니다.

--fleet-id <unique fleet identifier>--desired-instances <fleet capacity as an integer>--max-size <maximum capacity for auto-scaling> [Optional]--min-size <minimum capacity for auto-scaling> [Optional]

예:

aws gamelift update-fleet-capacity--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--desired-instances 5--max-size 10--min-size 1

복사 가능 버전:

aws gamelift update-fleet-capacity --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --desired-instances 5 --max-size 10 --min-size 1

요청이 성공하면 플릿 ID가 반환됩니다. 새 desired-instances 설정이 최소/최대 제한 밖일 경우 오류가반환됩니다.

GameLift를 통해 플릿 용량 Auto-ScaleAuto-scaling을 사용하여 게임 서버상의 활동에 따라 동적으로 플릿 용량을 조정합니다. 플레이어가 도착해 게임 세션을 시작하면 auto-scaling이 더 많은 인스턴스를 추가하고, 플레이어의 수요가 줄어들면 auto-scaling이 불필요한 인스턴스를 종료할 수 있습니다. Auto-scaling은 호스팅 리소스와 비용을 최소화하면서,부드럽고 빠른 플레이어 경험을 제공할 수 있는 효과적인 방법입니다. 자세한 내용은 GameLift에서 Auto-scaling 작동 방식 (p. 6)을 참조하십시오.

GameLift에 확대나 축소를 지시하는 조정 정책을 생성해 Auto-scaling을 활용할 수 있습니다. 대상 기반과 규칙 기반이라는 두 가지 조정 정책이 있습니다. 대상 기반 정책(—대상 추적 및 —완전한 솔루션 제공)은 가장단순하고 효과적인 옵션으로 권장됩니다. Auto-scaling 의사 결정 프로세스의 각 요소를 정의해야 하는 규칙기반 조정 정책은 특정 문제를 다루는 데 유용합니다. 대상 기반 auto-scaling을 보완할 때 가장 좋습니다.

GameLift 콘솔, AWS CLI 또는 AWS SDK. 중 하나를 사용하여 대상 기반 Auto-scaling을 관리할 수 있습니다. 규칙 기반 auto-scaling은 콘솔에서 규칙 기반 조정 정책을 확인할 수 있는 경우에도 AWS CLI나 AWSSDK 중 하나만 사용해 관리할 수 있습니다.

주제• 대상 추적을 이용하는 Auto-Scale (p. 120)• 규칙 기반 정책을 사용한 Auto-Scale (p. 121)

버전119

Amazon GameLift 개발자 안내서플릿 용량 Auto-Scale

대상 추적을 이용하는 Auto-Scale대상 추적은 주요 플릿 지표인 "사용 가능한 게임 세션 비율"을 토대로 용량 수준을 조정합니다. 이 지표는 현재 용량에서 사용 가능한 게임 세션 슬롯의 수(—즉시 시작시킬 수 있는 여분의 게임 세션)를 측정합니다. 이지표는 갑작스러운 플레이어 수요 증가에 대한 플릿의 버퍼를 나타냅니다.

용량 버퍼를 유지해야 하는 기본적인 이유는 플레이어 대기 시간 때문입니다. 게임 세션 슬롯이 준비되어 대기하고 있는 경우, 새 플레이어의 게임 세션 참여에 필요한 시간을 '초'로 측정할 수 있습니다. 리소스를 사용할 수 없는 경우, 플레이어는 기존 게임 세션이 끝나거나, 새 리소스를 사용할 수 있을 때까지 대기해야 합니다. 새 인스턴스 및 서버 프로세스 시작에 몇 분이 소요될 수 있습니다.

대상 추적을 설정하는 경우 플릿에서 유지하고 싶은 버퍼 크기만 지정하면 됩니다. "사용 가능한 게임 세션백분율" 지표가 사용 가능한 리소스의 백분율을 측정하므로, 실제 버퍼 크기는 전체 플릿 용량의 백분율입니다. GameLift는 필요에 따라 원하는 만큼 인스턴스를 추가하거나 제거하여 대상 버퍼 크기를 유지합니다. 플레이어 대기 시간 최소화와 호스팅 비용 제어 중 우선시하고 싶은 것에 따라 버퍼 크기를 선택합니다. 버퍼크기가 클 수록 대기 시간이 최소화되지만, 동시에 사용하지 않을 수도 있는 추가 리소스에 대한 요금을 지불해야 합니다. 플레이어가 대기 시간에 대한 참을성이 크다면 버퍼 크기를 작게 설정해 비용을 낮출 수 있습니다.

대상 추적을 설정하려면

Console

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 집합 페이지에서 집합의 세부 정보 페이지를 열 활성 집합의 이름을 클릭합니다. (대시보드를 통해

집합의 세부 정보 페이지에 액세스할 수도 있습니다.)3. Scaling(조정) 탭을 엽니다. 탭에 플릿의 과거 조정 지표가 표시되며, 여기에는 현재 조정 설정을 조

정할 수 있는 컨트롤이 포함되어 있습니다. 조정 설정은 지표 그래프 아래 위치해 있습니다.4. Scaling: Limits(제한 조정)에서 최소 및 최대 제한이 플릿에 대해 적절하게 설정되어 있는지 확인합

니다. Auto-scaling이 활성화되어 있는 경우, 이 두 제한 값 사이에서 용량이 조정됩니다.5. Auto-Scaling Policies(Auto-Scaling 정책)에서 Maintain a buffer of X percent game session

availability(버퍼를 X 비율의 게임 세션 사용 가능으로 유지) 옵션을 확인합니다. 확인 표시 버튼을 클릭하여 설정 버퍼 크기 및 자동 조정 설정을 저장합니다. 설정을 저장하면, 새 대상 기반 정책이

Scaling policies(조정 정책) 테이블에 추가됩니다.6. Fleet에 대한 auto-scaling 옵션을 켜려면 Disable all scaling policies in the fleet(플릿에서 모든 조정

정책 비활성화)가 선택되지 않았는지 확인합니다. 이 옵션이 선택되어 있는 경우 새 대상 추적 정책을 포함해 모든 정책이 비활성화 됩니다. 이런 상태가 Scaling policies(조정 정책) 테이블에 표시되어 있습니다.

AWS CLI

1. 용량 제한을 설정합니다. update-fleet-capacity 명령을 사용하여 두 제한 값 중 하나 또는 둘 모두를설정합니다. 도움말은 GameLift 플릿 용량 제한 설정 (p. 116)를 참조하십시오.

2. 새 정책 생성. 명령줄 창을 열고 put-scaling-policy 명령과 함께 사용자의 정책 파라미터 설정을 사용합니다. 기존 정책을 업데이트하려면 정책 이름을 지정하고, 완전히 업데이트한 정책 버전을 제공합니다.

--fleet-id <unique fleet identifier>--name "<unique policy name>"--policy-type <target- or rule-based policy>--metric-name <name of metric>--target-configuration <buffer size>

예:

버전120

Amazon GameLift 개발자 안내서플릿 용량 Auto-Scale

$aws gamelift put-scaling-policy--fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa"--name "My_Target_Policy_1"--policy-type "TargetBased" --metric-name "PercentAvailableGameSessions"--target-configuration "TargetValue=5"

복사 가능 버전:

$aws gamelift put-scaling-policy --fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa" --name "My_Target_Policy_1" --policy-type "TargetBased" --metric-name "PercentAvailableGameSessions" --target-configuration "TargetValue=5"

규칙 기반 정책을 사용한 Auto-Scale규칙 기반의 조정 정책을 사용하면 플레이어의 활동에 맞춰 플릿 용량의 auto-scaling을 세부적으로 제어할수 있습니다. 각 정책에서 여러 사용 가능한 플릿 지표 중 하나와 플릿 조정을 연결시키고, 트리거 지점을 식별하고, 응답할 확장이나 축소 이벤트를 사용자 지정할 수 있습니다. 규칙 기반의 정책은 특정 상황을 처리하기 위해 대상 기반 조정 방식을 보완하는 데 아주 유용합니다.

규칙 기반 정책은 "플릿 지표가 일정 시간 동안 임계 값에 도달하거나 이를 초과하면 플릿 용량을 일정 수치만큼 변경합니다."로 정의할 수 있습니다. 이번 주제에서는 정책 설명을 만들기 위해 사용하는 구문을 설명하고, 규칙 기반 정책 생성 및 관리에 도움을 주는 정보를 제공합니다.

규칙 기반 정책 관리GameLift Service API와 함께 AWS CLI나 AWS SDK를 사용하여 규칙 기반 정책을 생성, 업데이트 및 삭제할수 있습니다. GameLift 콘솔에서 모든 활성 정책을 확인할 수 있습니다.

특정 플릿에 대한 모든 조정 정책을 일시적으로 비활성화 하려면 AWS CLI 명령인 stop-fleet-actions를 사용합니다.

규칙 기반 조정 정책(AWS CLI) 생성 또는 업데이트:

1. 용량 제한을 설정합니다. update-fleet-capacity 명령을 사용하여 두 제한 값 중 하나 또는 둘 모두를 설정합니다. 도움말은 GameLift 플릿 용량 제한 설정 (p. 116)를 참조하십시오.

2. 새 정책 생성. 명령줄 창을 열고 put-scaling-policy 명령과 함께 사용자의 정책 파라미터 설정을 사용합니다. 기존 정책을 업데이트하려면 정책 이름을 지정하고, 완전히 업데이트한 정책 버전을 제공합니다.

--fleet-id <unique fleet identifier>--name "<unique policy name>"--policy-type <target- or rule-based policy>--metric-name <name of metric>--comparison-operator <comparison operator>--threshold <threshold integer value>--evaluation-periods <number of minutes>--scaling-adjustment-type <adjustment type>--scaling-adjustment <adjustment amount>

예:

aws gamelift put-scaling-policy--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--name "Scale up when AGS<50"--policy-type RuleBased

버전121

Amazon GameLift 개발자 안내서플릿 용량 Auto-Scale

--metric-name AvailableGameSessions--comparison-operator LessThanThreshold--threshold 50--evaluation-periods 10--scaling-adjustment-type ChangeInCapacity--scaling-adjustment 1

복사 가능 버전:

aws gamelift put-scaling-policy --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --name "Scale up when AGS<50" --policy-type RuleBased --metric-name AvailableGameSessions --comparison-operator LessThanThreshold --threshold 50 --evaluation-periods 10 --scaling-adjustment-type ChangeInCapacity --scaling-adjustment 1

AWS CLI를 사용하여 규칙 기반 조정 정책 삭제:

• 명령줄 창을 열고 delete-scaling-policy 명령과 함께 플릿 ID와 정책 이름을 사용합니다.

예:

aws gamelift delete-scaling-policy--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--name "Scale up when AGS<50"

복사 가능 버전:

aws gamelift delete-scaling-policy --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --name "Scale up when AGS<50"

Auto-scaling 규칙 구문

규칙 기반 조정 정책 설명을 구성하려면 다음과 같이 여섯 가지 주요 변수를 지정해야 합니다.

<metric name>이 <comparison operator> 동안 <threshold value>로 유지되면 <evaluationperiod>을 이용하여 플릿 용량을 <adjustment type>로/만큼 <adjustment value> 변경합니다.

예를 들어, 이 정책 설명은 플릿의 추가 용량(현재 사용하지 않고 있는 사용 가능한 호스팅 리소스)이 50개의새 게임 세션 처리에 필요한 용량보다 적을 때마다 확장 이벤트를 트리거합니다.

AvailableGameSessions가 less than 50 동안 10 minutes로 유지되면 ChangeInCapacity를 이용하여 플릿 용량을 1 instances만큼 변경합니다.

측정치 이름

조정 이벤트를 트리거하려면 플릿에 특정적인 다음 지표 중 하나에 auto-scaling 정책을 연결합니다. 지표에 대한 자세한 설명은 플릿에 대한 GameLift 지표 (p. 172)를 참조하십시오.• 게임 세션 활성화• 활성 게임 세션• 사용 가능한 게임 세션• 사용 가능한 게임 세션 백분율• 활성 인스턴스• 사용 가능한 플레이어 세션• 현재 플레이어 세션• 유휴 인스턴스

버전122

Amazon GameLift 개발자 안내서플릿 용량 Auto-Scale

• 유휴 인스턴스 백분율

플릿이 게임 세션 대기열에 포함되어 있는 경우 다음 지표를 사용할 수 있습니다.• 대기열 깊이(플릿에 특정적) – 이 플릿이 사용 가능한 최상의 호스팅 위치인 대기 중인 게임 세션 요청

의 수입니다.• 대기 시간(플릿에 특정적) – 플릿에 특정적인 대기 시간입니다. 충족해야 할 가장 오래 대기 중인 게임

세션 요청의 대기 시간입니다. Queue depth와 마찬가지로 이 측정치는 이 플릿이 사용 가능한 최상의호스팅 위치(지연 시간 데이터 또는 기본 대기열 순서 기준)인 게임 세션 요청만 반영합니다. 플릿의대기 시간은 가장 오래된 현재 요청의 대기열 체류 시간과 동일합니다.

비교 연산자

이 변수는 임계값을 기준으로 지표 데이터를 비교하는 방법을 GameLift에 제공합니다. 유효한 비교 연산자로는 초과(>), 미만(<), 이상(>=) 또는 이하(<=) 등이 있습니다.

임계값

지정 지표값이 임계값에 도달하거나 초과할 때 조정 이벤트를 트리거 할 수 있습니다. 선택한 지표에 따라 플레이어 세션, 게임 세션, 게임 세션 요청의 수와 양을 나타냅니다. 이 값은 항상 양의 정수입니다.

평가 기간

지표가 전체 평가 기간의 임계값에 도달하거나 이를 초과해야 조정 이벤트가 트리거 됩니다. 평가 기간은 연속적입니다. 지표가 임계값보다 작아지면 평가 기간이 처음부터 다시 시작됩니다.

조정 유형 및 값

이 변수 세트는 조정 이벤트가 트리거될 때 GameLift가 플릿 용량을 조정하는 방식을 지정합니다. 다음세 가지 조정 유형 중에서 선택할 수 있습니다.• 용량 변경 – 현재 용량을 지정된 인스턴스 수만큼 늘리거나 줄입니다. 플릿에 추가하거나 플릿에서 제

거할 인스턴스 수로 조정 값을 설정합니다. 양수 값은 인스턴스를 추가하고, 음수 값은 인스턴스를 제거합니다. 예를 들어, "-10"은 플릿의 총 크기에 상관 없이 플릿을 10개 인스턴스씩 축소시킵니다.

• 용량의 백분율 변경 – 현재 용량을 지정된 백분율만큼 늘리거나 줄입니다. 플릿 용량에 늘리거나 줄이기를 원하는 만큼의 백분율로 조정 값을 설정합니다. 양수 값은 인스턴스를 추가하고, 음수 값은 인스턴스를 제거합니다. 예를 들어, 50개 인스턴스의 플릿에서 백분율 변경 값이 "20"이면 플릿에 10개 인스턴스가 추가됩니다.

• 정확한 용량 – 원하는 인스턴스를 지정된 값으로 설정합니다. 플릿에 유지할 정확한 인스턴스 수로 조정 값을 설정합니다.

규칙 기반 Auto-scaling에 대한 팁

다음 제안은 규칙 기반 정책을 사용한 auto-scaling을 최대한 활용하는 데 도움이 됩니다.

다수의 정책 적용

한 플릿에 여러 auto-scaling 정책을 동시에 적용할 수 있습니다. 가장 일반적인 시나리오는 대상 기반 정책으로 대부분의 조정 필요 사항을 관리하고, 규칙 기반 정책으로 엣지 사례를 처리하는 것입니다. 하지만 여러정책을 사용할 수도 있습니다.

여러 정책은 독립적으로 작동합니다. 조정 이벤트의 순서를 제어하는 방법은 없다는 점에 유의하십시오. 예를 들어 확장을 관리하는 정책이 여럿인 경우, 플레이어 활동으로 인해 여러 조정 이벤트가 동시에 트리거될수 있습니다. 예를 들어 플레이어 활동으로 인해 두 측정치가 모두 트리거될 수 있는 경우 두 가지 확장 정책의 결과에 혼란이 발생하기 쉽습니다. 서로 트리거하는 정책에도 유의하십시오. 예를 들어, 서로의 임계값을넘어선 용량을 설정하는 확장 및 축소 정책을 생성한 경우, 무한 루프가 발생할 수 있습니다.

최대 및 최소 용량 설정

각 플릿의 최대 및 최소 용량에 제한이 있습니다. 이 기능은 auto-scaling을 사용할 때 특히 중요합니다. Auto-scaling은 이 범위에서 벗어나는 값으로 용량을 설정하지 않습니다. 기본적으로 새롭게 생성된 플릿의 최소

버전123

Amazon GameLift 개발자 안내서다중 리전 대기열 사용

용량은 0, 최대 용량은 1입니다. Auto-scaling 정책이 의도한 대로 용량에 적용되도록 하려면 최대 값을 늘려야 합니다.

플릿 용량은 플릿의 인스턴스 유형 및 AWS 계정 한도에 의해서도 제한됩니다. 서비스 및 계정 한도에서 벗어나는 최소 및 최대 용량을 설정할 수 없습니다.

용량 변경 후 측정치 추적

GameLift는 Auto-scaling 정책에 따라 용량을 변경하고 10분을 대기한 후 동일한 정책의 트리거에 반응합니다. 이렇게 대기하면서 GameLift는 새 인스턴스 추가, 게임 서버 시작, 플레이어 연결, 새 인스턴스로부터 데이터 수집 시작 등을 수행합니다. 그 동안 GameLift는 계속해서 지표를 기준으로 정책을 평가하고 정책 평가기간을 추적합니다. 정책 평가 기간은 조정 이벤트가 트리거되면 다시 시작됩니다. 즉, 대기 시간이 끝난 직후 조정 정책이 다른 조정 이벤트를 트리거할 수 있습니다.

서로 다른 auto-scaling 정책에서 트리거한 조정 이벤트 사이에는 대기 시간이 없습니다.

다중 리전 대기열 사용대기열을 사용하여 여러 리전에 걸친 플릿 그룹을 생성하고, 게임 세션을 대기열의 플릿에 배치하도록 허용할 수 있습니다. 대기열은 게임 세션 배치의 효율성 향상과 게임 위치를 선택할 때 플레이어 지연 시간을사용할 수 있는 기능을 포함하여 개별 플릿을 사용할 때보다 많은 이점을 제공합니다. 클라이언트 서버 서비스는 새로운 게임 세션 배치 또는 매치메이킹을 요청할 때 대기열을 지정합니다. AWS Command LineInterface(CLI) 또는 Amazon GameLift 콘솔을 사용하여 대기열 지표를 생성하고 편집하고 추적할 수 있습니다.

주제• 게임 세션 대기열 설계 (p. 124)• 대기열 생성 (p. 129)• 대기열 보기 (p. 131)

게임 세션 대기열 설계Amazon GameLift는 대기열을 사용하여 배포된 게임 세션에 대한 요청을 처리하고 새로운 게임 세션의 호스팅 리소스를 찾습니다. 대기열을 설계하는 방법에 따라 (1) Amazon GameLift가 사용 가능한 리소스를 찾는위치와 (2) Amazon GameLift가 사용 가능한 리소스를 평가하여 요청된 각각의 새 게임 세션의 최적의 선택방법이 결정됩니다. 대기열을 사용하여 플레이어에게 가능한 최상의 경험을 제공하고 비용을 지불하고 있는호스팅 리소스를 효율적으로 활용할 수 있습니다.

이러한 Amazon GameLift 기능에서는 대기열이 필요합니다.

• FlexMatch를 통한 매치메이킹 (FlexMatch 매치메이커 설계 (p. 68) 주제를 참조하십시오)• 스팟 플릿(GameLift에 스팟 인스턴스 사용 (p. 100) 참조)

the section called “게임 세션 실행” (p. 5)에서 대기열에 대해 자세히 알아보십시오. 대기열 생성에 대한 자세한 내용은 대기열 생성 (p. 129) 단원을 참조하십시오. 대기열을 사용하여 새 게임 세션을 생성하는 방법에대한 자세한 내용은 게임 세션 만들기 (p. 48) 단원을 참조하십시오.

대기열을 사용하는 이유대기열이 필요한 Amazon GameLift 기능을 사용하고 있지 않은 경우에도 게임 세션 배치를 위해 대기열을 사용하는 것이 좋습니다. 특정 플릿(CreateGameSession)에서 수동으로 게임 세션을 생성할 수 있는 옵션이 항

버전124

Amazon GameLift 개발자 안내서대기열 설계

상 제공되기 때문에 특히 여러 리전—을 아우르는 대기열—은 여러분과 여러분의 플레이어에게 중요한 이점을 제공할 수 있습니다.

• 개선된 플레이어 경험을 위해 지연 시간을 최소화합니다. 게임 세션 배치 요청에 플레이어 지연 시간 데이터가 포함되어 있으면 FleetIQ는 플레이어가 게임 서버에 대해 가능한 가장 낮은 지연 시간을 경험하도록합니다. 플레이어 간의 지연 시간 차이를 최소화하고 플레이어가 게임에 빨리 들어가면서도 가능한 최상의게임 환경을 경험할 수 있도록 추가 규칙을 설정합니다.

• 저가의 스팟 플릿을 활용합니다. 언제라도 스팟 플릿을 추가하여 대기열에 대폭 절감된 호스팅 비용을 제공할 수 있습니다. 스팟 플릿이 사용 가능할 때 FleetIQ는 최소 지연 시간과 최저 스팟 가격 요건을 충족하는 플릿에 새 게임 세션을 배치합니다.

• 높은 용량에서 새 게임을 보다 신속하게 배치합니다. 단일 플릿은 용량이 제한되어 있기 때문에 한도에 도달하면 추가 인스턴스가 확장될 때까지 플레이어가 기다려야만 새 게임 세션을 시작할 수 있습니다. 하지만 대기열은 선호하는 플릿이 꽉 찬 경우에 다른 플릿으로 대체하여 즉시 게임을 배치할 수 있습니다. 뿐만아니라 auto-scaling 덕분에 대기열의 각 플릿이 전체 용량에 가까워지도록 확장이 되기 때문에 대기열의모든 플릿이 동시에 가득 차는 일이 발생하지 않습니다. 따라서 플레이어 수요가 급증하는 동안에도 플레이어의 대기 시간을 줄일 수 있습니다.

• 게임을 가용성을 보다 신속하게 복원할 수 있습니다. 플릿 및 리전 수준의 중단이 발생할 수 있습니다. 다중 리전 대기열을 사용하면 감속이나 정전으로 인해 플레이어의 게임 액세스에 영향이 미치지 않습니다.대신에 하나 이상의 선호 플릿이 사용할 수 없는 상태이면 Amazon GameLift가 차선의 플릿으로 새 게임세션을 배치할 수 있습니다. 선호하는 플릿(들)이 다시 사용 가능한 상태가 될 때까지 auto-scaling이 이러한 일시적인 플릿 활동의 변화에 맞게 조정됩니다.

• 추가적인 플릿 용량을 보다 효율적으로 사용할 수 있습니다. 예상치 못한 플레이어 수요의 급증을 처리하기 위해서는 추가 호스팅 용량에 신속하게 액세스할 수 있어야 합니다. 단일 플릿을 토대로 게임에 대한 플레이어 액세스를 지원할 때는 만약의 사태에 대비해 미사용 용량을 유지해야 합니다. 반면, 필요에 따라 다른 리전의 사용량이 적은 플릿으로 전환할 수 있는 기능에 대한 플레이어의 수요가 증가하면서 대기열의플릿들이 대체물 역할을 할 수 있습니다. 예를 들어 아시아에서는 수요가 높지만 유럽에서는 보통 낮은 편입니다. 유럽 플릿은 수요가 낮아서 규모가 축소된 경우에도 아시아의 수요 급증을 지원할 수 있도록 추가용량을 제공할 수 있습니다.

• 게임 세션 배치 및 대기열 성능 지표를 받습니다.Amazon GameLift는 배치 성패 여부에 대한 통계, 대기열의 요청 수, 대기열에서 요청이 기다리는 평균 시간 같은 대기열 고유의 지표를 출력합니다. AmazonGameLift콘솔CloudWatch에서 곧바로 이러한 측정치를 볼 수 있습니다.

대기열 대상 설정에 대한 팁대기열에는 게임 세션 배치 요청을 수행할 수 있는 대상들의 목록이 포함되어 있습니다. 대부분의 경우, 대상은 플릿 ID나 별칭 ID로 지정할 수 있는 플릿입니다. 대기열의 대상을 선택할 때는 다음 지침과 모범 사례를고려하십시오.

• 어떤 리전에서든 기존의 모든 플릿 또는 별칭을 추가할 수 있습니다. 특히 배치 시 플레이어 지연 시간을사용하고 있는 경우에는 플레이어를 지원하고 싶은 각 리전에 플릿을 추가합니다.

• 플릿에 별칭을 지정하는 경우(권장됨)에는 대기열에서 대상을 설정할 때 별칭을 사용하는 것이 좋습니다.• 대기열의 모든 대상은 대기열을 사용하는 게임 클라이언트와 호환되는 게임 빌드를 실행하고 있어야 합니

다. 대기열이 처리하는 새 게임 세션 요청은 대기열에 있는 어느 대상에도 배치할 수 있다는 점에 유의하십시오.

• 각 대기열은 최소 두 개의 플릿을 가지고 있고 최소 두 개의 리전을 포괄해야 합니다. 이러한 설계는 플릿또는 리전 수준의 감속이 미치는 영향을 줄이고 예상하지 못한 플레이어 수요의 변화를 보다 효율적으로관리하여 호스팅 복원성을 높여줍니다.

• 대기열 내 대상의 목록 순서가 중요합니다. 게임 세션 배치 요청에 대기 시간 데이터가 포함되어 있는 경우, Amazon GameLift는 (1) 최소 플레이어 지연 시간과 (2) 최저 스팟 가격(해당되는 경우) 요건을 충족하는 가용 리소스를 찾기 위해 대상의 우선순위를 다시 설정합니다. 지연 시간 데이터가 제공되지 않는 경우Amazon GameLift는 대상 목록 순서를 따릅니다. 이 경우, 보통은 게임 세션이 목록의 첫 번째 플릿에 호스팅 되고 필요 시 백업 플릿에만 배치가 됩니다.

• 대기열을 어떤 리전에 생성할지 결정해야 합니다. 가장 좋은 방법은 세션 디렉터리 서비스 같은 게임 클라이언트 서비스를 통해 게임 세션 배치 요청을 하는 것입니다. 이 경우에는 클라이언트 서비스가 배포된 곳

버전125

Amazon GameLift 개발자 안내서대기열 설계

과 지리적으로 가까운 리전에서 대기열을 생성하는 것이 좋습니다. 이 방식은 게임 세션 배치 요청을 제출할 때 지연 시간을 최소화합니다.

• 대기열에는 다른 인증서 구성을 사용하는 플릿이 없어야 합니다. 대기열에 있는 모든 플릿의 인증서 구성은 활성 또는 비활성이여야 합니다.

다중 리전 대기열 설계FlexMatch 매치메이킹이나 스팟 플릿 같은 특별 기능을 사용하는지 여부에 관계 없이 모든 대기열에서 다중리전 설계를 권장합니다. 이 설계는 배치 속도 및 호스팅 복원성을 높여주기 때문에 플레이어 지연 시간 데이터를 처리할 때 매우 중요합니다.

이 단원에서는 기본적인 다중 리전 대기열을 설계하는 프로세스를 설명합니다. 이 예제에서는 북미 동부 해안 지역의 플레이어들에게 배포하고 싶은 게임 서버 빌드를 사용하겠습니다. 그리고 us-east-1 및 ca-central-1 리전에서 게임을 호스팅하기로 선택했습니다. 또한 각 리전에서 게임 빌드를 업로드하고 플릿을 생성했습니다.

1. 대기열을 생성하려는 리전을 선택합니다. 대기열의 위치는 중요하지 않을 수 있지만, 클라이언트 서비스를 통해 배치 요청을 하고 있는 경우에는 클라이언트 서비스가 배포된 곳과 가까운 리전에 대기열을 배치하여 요청 지연 시간을 최소화할 수 있습니다.

2. 새 대기열을 생성하고 대기열 대상으로 플릿을 추가합니다.3. 대상의 기본 목록 순서를 결정합니다. GameLift는 사용 가능한 호스팅 리소스를 찾을 때 이 순서로 플릿을

평가할 수 있습니다. 배치 요청에 플레이어 지연 시간 데이터가 포함되어 있는 경우, Amazon GameLift가최저 지연 시간에 우선순위를 부여하도록 대상을 재정렬합니다. 지연 시간 데이터가 제공되지 않는 경우Amazon GameLift는 기본 순서를 따릅니다.• 다수의 쿼리에서 지연 시간 데이터가 없을 것으로 예상되는 경우에는 기본 목록 순서와 처음으로 목

록에 등록된 플릿에 더 많은 관심을 기울이고 싶을 것입니다. 지연 시간 데이터가 없으면 AmazonGameLift는 항상 목록에서 가용 상태인 첫 번째 플릿에 새 게임 세션을 배치하고 나머지 플릿은 백업으로만 사용합니다. 따라서 (1) 대부분의 플레이어를 지원할 수 있을 정도로 강력하고, (2) 대다수의 플레이어에게 최고의 가용성과 최적의 지연 시간을 제공할 수 있는 최상단 스팟에 플릿을 배치하고 싶을 것입니다.

이 경우에는 us-east-1 플릿이 대다수 플레이어들을 가장 잘 지원할 것으로 예상되기 때문에 고성능인스턴스 유형을 선택하고, 여러 개의 동시 게임 세션에 맞게 이를 구성하며, 많은 수의 플레이어에 맞게 확장을 하고, 대기열에 가장 먼저 등록합니다. 백업 ca-central-1 플릿은 소형의 저가 인스턴스 유형을 사용하고 용량을 최소한으로 유지합니다. 추가 백업 플릿(추가된 경우)의 순서를 지정할 필요는 없지만, 지연 시간이 높을 수 있는 리전의 우선순위를 다시 지정할 수 있습니다.

• 대다수의 요청에 지연 시간 데이터가 포함될 것으로 예상되는 경우에는 FleetIQ가 우선순위를 다시 지정할 것이기 때문에 목록 순서가 그다지 중요하지 않습니다. 지연 시간을 최소화할 수 있도록 대상 플레이어에 가까운 모든 리전에 플릿을 배치하고 싶을 것입니다. 일반적으로는 예상되는 플레이어 수요를충족하도록 플릿을 구성하고 싶을 것입니다. 또한 지연 시간 데이터가 없는 요청을 처리하기 위해 최상단 스팟의 플릿이 가장 좋은 선택인지 확인하고 싶을 것입니다.

이 경우에는 us-east-1 및 ca-central-1 플릿이 낮은 지연 시간을 제공하기 때문에 널리 사용될 것으로 예상됩니다. 두 플릿 모두 고성능 인스턴스 유형을 사용하고 다중 동시 게임 세션에 맞게 구성이됩니다. ca-central-1 플릿에 대한 수요가 다소 낮을 것이기 때문에 용량을 낮게 유지할 것입니다.

대기열이 실행됨에 따라 지표 데이터를 사용하여 설계가 얼마나 잘 유지되는지 확인할 수 있습니다. 대기열에서는 기존 플릿을 재구성하거나 호스팅 요구에 더 적합한 새 플릿을 제거 및 추가하여 필요한 만큼 플릿을변경할 수 있습니다.

플레이어 지연 시간 정책 설계게임 세션 배치 요청에 플레이어 지연 시간 데이터가 포함된 경우, 플레이어 연결이 Amazon GameLift 사용하는 FleetIQ 게임 세션을 배치하고, 최소 지연 시간. FleetIQ 는 평균 리전 지연 시간을 기준으로 대기열의 대상에 있는 모든 요청.

버전126

Amazon GameLift 개발자 안내서대기열 설계

Amazon GameLift가 플레이어 지연 시간 데이터를 사용하는 방법에 영향을 미치도록 플레이어 지연 시간 정책을 설정할 수 있습니다. 다음을 위해 플레이어 지연 시간 정책을 설정할 수 있습니다.

• 개별 플레이어에 대해 최대 지연 시간을 설정합니다. Amazon GameLift 기본적으로 모든 플레이어의 평균지연 시간을 기반으로 게임 세션을 배치합니다. 이 정책은 어떤 플레이어가 최대 값 이상으로 지연 시간을경험하게 되는 경우에는 게임 세션이 배치되지 않도록 해줍니다.

• 여러 정책을 사용하여 시간 경과에 따라 최대 지연 시간을 완화합니다. 최대 지연 시간을 설정하면 지연 시간이 긴 게임으로부터 플레이어를 보호할 수 있지만, 지연 시간 값이 높은 게임 세션 요청이 이행되지 않을위험성이 높아집니다. 일련의 정책을 사용하여 시간 경과에 따라 최대 지연 시간을 점진적으로 높일 수 있습니다. 이 접근 방법을 사용하면 플레이어가 대기 시간 없이 게임에 빨리 들어가면서도 뛰어난 게임 환경을 경험하도록 할 수 있습니다.

예를 들어 제한 시간이 5분인 대기열에 다음과 같은 정책을 정의할 수 있습니다. 최대 지연 시간 값이 가장 낮은 정책부터 시작하여 여러 정책이 연속적으로 적용됩니다. 이 정책 세트에서는 최대 지연 시간이 50밀리초부터 시작해서 시간 경과에 따라 200밀리초까지 증가합니다. 마지막 정책은 모든 플레이어에게 허용되는 절대적인 최대 지연 시간을 설정합니다. 지연 시간에 관계 없이 모든 게임 세션이 배치되도록 하고 싶은 경우에는 마지막 정책의 최대 값을 매우 높게 설정할 수 있습니다.

1. 모든 플레이어 지연 시간이 50밀리초 미만인 대상을 검색하는 데 120초를 쓰게 되면...2. 모든 플레이어 지연 시간이 100밀리초 미만인 대상을 검색하는 데 120초를 쓰게 되면...3. 모든 플레이어 지연 시간이 200밀리초 미만인 대상을 검색하는 데 남은 대기열 제한 시간을 씁니다.

이 예제에서 첫 번째 정책은 처음 2분 동안 적용되고, 두 번째 정책은 3분 및 4분째에 적용되며, 세 번째 정책은 5분째에 적용되어 배치 요청 시간이 초과될 때까지 유지됩니다.

스팟 인스턴스를 위한 대기열 설계플릿에서 스팟 인스턴스를 사용할 계획이라면 대기열을 설정해야 합니다. 가장 좋은 것은 스팟 플릿을 통해비용 절감의 이점을 누리면서도 게임 세션 중단의 가능성을 최소화할 수 있는 복원성이 높은 대기열을 설정하는 것입니다. 다음의 모범 사례를 따르십시오.

• 하나 이상의 리전에서 플릿을 포함시킵니다. 다중 리전 대기열은 플릿이 항상 새 게임 세션을 호스팅하는데 사용할 수 있도록 함으로써 복원성을 높여줍니다.

• 각 리전에서 최소 하나의 스팟 플릿과 하나의 온디맨드 플릿을 포함시킵니다. 이러한 설계 덕분에 해당 리전에서 현재 사용 가능한 스팟 플릿이 없는 경우에도 어떤 리전에든 게임 세션을 배치할 수 있습니다.

• 각 리전에 여러 개의 스팟 플릿이 포함되어 있으면 동일한 인스턴스 패밀리(c5.large, c5.xlarge 등)에서 플릿마다 다른 인스턴스 유형을 사용하는 것이 좋습니다. 이 설계는 여러 스팟 플릿이 동시에 사용 불가능한상태가 되거나 작동이 중단되는 가능성을 낮춰줍니다. Amazon GameLift 콘솔의 요금 데이터 기록을 점검하여 선호하는 인스턴스 유형이 스팟에서 뛰어난 비용 절감 효과를 제공하는지 확인합니다. 이 데이터는스팟 및 온디맨드 인스턴스에 대한 가격을 표시하며 인스턴스당 예상되는 스팟 절약을 제시합니다.

• 최저가의 스팟 인스턴스를 사용할 수 있는 FleetIQ의 능력을 최적화하려면 모든 리전에 플레이어 지연 시간 데이터를 포함시키도록 계획합니다. FleetIQ 작동 방식 (p. 127)에 설명되어 있듯이 FleetIQ는 지연 시간 데이터가 제공될 때 리전별로 대상의 우선순위가 다시 지정되는 경우에 더 효과적으로 작동합니다.

• 게임 세션 배치 요청에 플레이어 지연 시간 데이터를 제공하지 않는 경우에는 선호도에 따라 대상을 정렬합니다. 예를 들어 리전 선호도에 따라 대상을 나열할 수 있습니다(예를 들어 스팟 플릿이 온디맨드 플릿앞에 배치). 아니면 먼저 모든 스팟 플릿을 나열할 수도 있습니다.

FleetIQ 작동 방식FleetIQ는 새 게임 세션에 가장 적합한 배치 장소를 검색할 때 다음 의사 결정 프로세스에 의존합니다.

1. FleetIQ는 다음 플릿 중 일부를 제거하기 위해 대기열의 대상을 필터링합니다.

버전127

Amazon GameLift 개발자 안내서대기열 설계

• 요청에 플레이어의 지연 시간 데이터가 포함되어 있는 경우, FleetIQ는 대기열의 플레이어 지연 시간 정책을 평가하고 플레이어의 지연 시간이 정책의 최대 제한 값을 초과하는 리전의 모든 플릿을 제거합니다.

• FleetIQ는 허용할 수 없는 장애율 때문에 현재 사용이 불가능한 스팟 플릿을 제거합니다.2. FleetIQ는 다음과 같이 남아 있는 대기열 대상에 우선 순위를 지정합니다.

• 플레이어 지연 시간 데이터가 제공되는 경우, FleetIQ는 리전 별로 대기열 대상의 순서를 다시 정렬해서평균 플레이어 지연 시간이 가장 낮은 대상을 가장 먼저 나열합니다.

• 플레이어 지연 시간 데이터가 제공되지 않는 경우, FleetIQ는 원래의 대기열 대상 목록을 사용합니다.3. FleetIQ는 우선 순위가 지정된 목록에서 대상을 선택합니다.

• 리전별로 대상 목록의 우선 순위가 지정된 경우, FleetIQ는 요금이 가장 낮고 지연 시간이 가장 낮은 리전의 플릿을 선택합니다. 사용할 수 있는 스팟 플릿이 없는 경우에는 해당 지역의 플릿이 선택될 수 있습니다.

• 대상 목록의 우선 순위가 지정되지 않은 경우, FleetIQ는 목록에 요금이 더 낮은 스팟 플릿이 존재하는경우라 할지라도 가장 먼저 사용할 수 있는 플릿을 선택합니다.

4. FleetIQ는 선택한 플릿에 새 게임 세션을 호스팅하기 위해 사용할 수 있는 서버 프로세서가 있는지 평가합니다. 새 게임 세션이 지연 시간 및/혹은 요금이 가장 낮은 플릿에 배치될 때 "최적의" 배치로 간주합니다.

5. 선택한 플릿에 사용할 수 있는 리소스가 없다면, FleetIQ는 다음에 나열된 대상으로 이동을 하며, 새 게임세션을 호스팅 할 수 있는 플릿을 찾을 때까지 이를 반복합니다.

대기열 지표 평가자체 대기열이 잘 수행되고 있는지 지표를 통해 평가하십시오. Amazon GameLift 콘솔(대기열 세부 정보 보기 (p. 132))이나 Amazon CloudWatch에서 특정 대기열 지표들을 볼 수 있습니다. 대기열 지표의 버전 유형은 대기열에 대한 GameLift 지표 (p. 176) 단원을 참조하십시오.

대기열 지표는 다음 세 가지 주요 분야의 이해를 돕습니다.

• 전체 대기열 성능 – 지표는 대기열이 배치 요청에 얼마나 성공적으로 응답하는지 보여주고 배치가 언제 그리고 왜 실패하는지 말해줍니다. 수동으로 확장된 플릿과 대기열 때문에 지표 평균 대기 시간 및 대기열 깊이는 대기열이 언제 조정되어야 하는지 용량을 표시합니다.

• FleetIQ 성능 – FleetIQ의 필터링과 우선순위(즉, 플레이어 지연 시간 데이터로 요청)를 사용하는 배치 요청때문에 지표는 FleetIQ가 새로운 게임 세션의 최적의 배치를 찾고 위해 얼마나 자주 사용 가능한지 표시합니다. 최적의 배치는 최소 플레이어 지연 시간 혹은 스팟 집합이 가능하면 최저 가격 요건으로 리소스를 찾는 방법을 포함할 수 있습니다. 오류 지표도 있어 최적의 배치가 실패한 일반적인 원인을 식별할 수 있습니다.

• 특정 리전 배치 – 다중 리전 대기열 때문에 지표는 리전별로 나뉜 성공적인 배치를 보여줍니다. FleetIQ를사용하는 대기열을 통해 이 데이터는 플레이어 활동이 일어나는 곳의 이해를 돕습니다.

FleetIQ 성능의 지표를 평가할 때는 다음 팁을 고려하십시오.

• FleetIQ 지표와 함께 "배치 성공" 지표를 사용하여 최저 지연 시간 및/혹은 최저 요금으로 최적의 배치에 따른 대기열 속도를 추적합니다.

• 대기열의 최적의 배치 속도를 올리기 위해서 다음과 같이 오류 지표를 살펴보십시오.• 오류 지표의 "첫 번째 선택이 사용 가능하지 않습니다"가 높으면 대기열 플릿을 위해서 용량 확장이 조정

되어야 한다는 좋은 표시입니다. 대기열의 모든 플릿이 축소되었을 수고 또는 하나의 특정 플릿 혹은 리전이 대부분의 배치에 최적일 수 있습니다.

• 오류 지표의 "첫 번째 선택이 사용 가능하지 않습니다"가 높으면 스팟 집합을 보라는 표시입니다. 특정인스턴스 유형의 간섭 속도가 매우 높을 경우 스팟 집합은 "사용 가능하지 않은 상태"로 여겨집니다. 이문제를 해결하기 위해서 대기열을 바꿔 다른 인스턴스 유형을 통해 스팟 집합을 사용합니다. 스팟 집합이 있는 대기열의 모범 사례에 따르면 각 리전에 다른 인스턴스 유형이 있는 스팟 집합을 포함하는 방법은 언제나 좋은 생각입니다.

버전128

Amazon GameLift 개발자 안내서대기열 생성

대기열 생성대기열은 여러 플릿 및 리전에서 사용 가능한 최적의 호스팅 리소스로 새 게임 세션을 배치하는 데 사용됩니다. 게임에서 대기열을 빌드하는 방법에 대한 자세한 내용은 게임 세션 대기열 설계 (p. 124) 단원을 참조하십시오.

게임 클라이언트에서는 배치 요청을 사용하여 대기열에서 새로운 게임 세션이 시작됩니다. 게임 세션 만들기 (p. 48)에서 게임 세션 배치에 대한 자세한 내용을 알아보십시오.

Amazon GameLift콘솔 또는 AWS Command Line Interface(CLI)를 사용하여 대기열을 만들 수 있습니다.AWS Command Line Interface 도구를 다운로드하여 설치합니다.

대기열 만들기(콘솔)AWS Management 콘솔에서 대기열을 생성합니다.

대기열을 생성하려면

1. https://console.aws.amazon.com/gamelift/에서 Amazon GameLift 콘솔을 열고, 대기열을 만들려는 리전을 선택합니다.

2. Amazon GameLift 메뉴에서 [Create a queue]를 선택합니다.3. [Create queue] 페이지에서 [Queue Details] 섹션을 완성합니다.

• Queue Name – 목록 및 측정치에서 쉽게 구별할 수 있도록, 의미 있는 대기열 이름을 생성합니다. 게임 세션 새로 만들기 요청(StartGameSessionPlacement 사용)에서 이 이름으로 대기열을 지정해야 합니다. 공백 및 특수 문자는 허용되지 않습니다.

• Queue Timeout – Specify 유지할 기간을 중지하기 전에 새로운 게임 세션 배치를 Amazon GameLift시도할 수 있습니다. 요청 시간이 될 때까지 모든 집합에서 사용 가능한 리소스를 Amazon GameLift계속 검색합니다.

4. [Player latency policies]에서 대기열에 대해 0개 이상의 정책을 정의합니다. 각 배치 요청에서 AmazonGameLift는 자동으로 모든 플레이어의 평균 지연 시간을 최소화합니다. 또한 플레이어 별로 최대 제한을 설정하는 지연 시간 정책을 생성할 수도 있습니다. 배치 요청에 플레이어 지연 시간 데이터가 제공되는 경우에만 플레이어 지연 시간 정책을 평가합니다. 배치 프로세스 전체에 하나의 제한만 적용하거나,시간 경과에 따라 조금씩 제한을 완화할 수 있습니다. 자세히 알아보려면 플레이어 지연 시간 정책 설계 (p. 126) 단원을 참조하십시오.

a. [Add player latency policy]를 선택하여 첫 번째 정책을 추가합니다. 이 정책의 최대 플레이어 지연시간 값을 입력합니다(기본값은 150밀리초). 정책 내용에 표시된 것처럼 첫 번째 정책은 전체 배치프로세스에 적용되거나, —추가 정책을 생성한 경우 다른 정책이 만료된 후의 — 남은 시간에 적용됩니다.

b. 다시 [Add player latency policy]를 선택하여 또 다른 플레이어 지연 시간 정책을 추가합니다. 추가정책의 경우, 최대 플레이어 지연 시간 값과 이 값을 적용할 기간(초)을 설정합니다. 이러한 정책의최대 지연 시간 값은 첫 번째 정책보다 작아야 합니다.

정책을 추가하면 콘솔은 최대 플레이어 지연 시간 값을 기반으로 정책의 순서를 자동으로 다시 매깁니다(가장 낮은 값이 먼저 나열). 이것은 게임 세션 배치 작업 중에 정책들이 적용되는 순서입니다.

5. [Destinations]에서 하나 이상의 대상을 대기열에 추가합니다. 대기열에는 여러 리전의 플릿이 포함될 수있으며 온디맨드 및 스팟 플릿이 모두 포함될 수 있습니다. 대기열에 있는 모든 플릿에는 동일한 인증서구성이 있어야 합니다(GENERATED 또는 DISABLED). 같은 게임 빌드를 실행하는 여러 리전의 플릿과같이 모든 플릿이 대기열을 사용할 게임 클라이언트와 호환되는 게임 빌드를 실행해야 합니다. 플릿과별칭은 대상으로 추가하기 전에 이미 존재해야 합니다.

a. [Add destination]을 선택합니다.b. 열을 사용하여 대상의 리전과 유형(플릿 또는 별칭)을 지정합니다. 결과로 얻는 플릿 또는 별칭 이름

목록에서 추가하려는 것을 하나 선택합니다.

버전129

Amazon GameLift 개발자 안내서대기열 생성

c. 대상을 저장하려면 녹색 확인 표시 아이콘을 선택합니다. 다른 대상을 추가하거나 기본 순서를 변경하거나 대기열을 저장하기 전에 각각의 대상을 저장해야 합니다.

d. 대상이 여러 개인 경우, Priority (default) 열에서 화살표 아이콘을 사용해 기본 순서를 설정합니다.이 순서는 새 게임 세션 배치에 사용할 수 있는 리소스를 대상에서 검색할 때 Amazon GameLift가사용합니다. (게임 세션 배치 요청에 플레이어 지연 시간 데이터가 포함된 경우, 기본 순서가 재정의됩니다.)

6. 새로운 대기열 구성을 마쳤으면 [Create queue]를 선택합니다. 새 대기열이 저장되고 [Queues] 페이지에 새 대기열과 존재하는 그 밖의 대기열이 표시됩니다. 이 페이지에서 대기열 측정치를 비롯한 상세 정보를 보려는 대기열을 선택할 수 있습니다. 대기열 구성은 언제든지 편집할 수 있습니다.

대기열 만들기(AWS CLI)AWS Command Line Interface(AWS CLI)를 사용하여 대기열을 만들 수 있습니다. AWS Command LineInterface 도구를 다운로드하여 설치합니다.

대기열을 생성하려면

• 명령줄 창을 열고 create-game-session-queue 명령을 사용하여 새 대기열을 정의합니다. 자세한내용은 AWS CLI 명령 참조설명서를 참조하십시오.

다음 예제에서는 5분의 제한 시간 이내에 여러 플릿 중 하나에 세 게임 세션을 배치하는 대기열을 만듭니다.플릿은 대상으로 나열되고 플릿 ARN 또는 별칭 ARN으로 식별됩니다. 모든 플릿 및 별칭은 이미 존재해야합니다. Amazon GameLift는 개별 게임 세션 배치 요청에 의해 순서가 재정의되지 않은 한, 여기에 나열된 순서대로 플릿에 새 게임 세션을 배치하려고 합니다.

Note

플릿 또는 별칭 ID로 describe-fleet-attributes 또는 describe-alias를 호출하여 플릿 및 별칭 ARN 값을 가져올 수 있습니다. ARN(Amazon 리소스 이름) 형식에 대한 자세한 내용은 ARN 및 AWS 서비스 네임스페이스를 참조하십시오.

$ aws gamelift create-game-session-queue --name "Sample test queue"--timeout-in-seconds 300--destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901 DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912

복사 가능 버전:

aws gamelift create-game-session-queue --name "Sample test queue" --timeout-in-seconds 300 --destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901 DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912

create-game-session-queue 요청이 성공하면 Amazon GameLift가 새 대기열 구성과 함께GameSessionQueue 객체를 반환합니다. 이제 StartGameSessionPlacement를 사용하여 대기열에 요청을제출할 수 있습니다.

버전130

Amazon GameLift 개발자 안내서대기열 보기

플레이어 지연 시간 정책이 포함된 대기열을 생성하려면

• 명령줄 창을 열고 create-game-session-queue 명령을 사용하여 새 대기열을 정의합니다. 자세한내용은 AWS CLI 명령 참조설명서를 참조하십시오.

다음 예제에서는 10분 시간 제한, 3개의 대상, 플레이어 지연 시간 정책 세트가 포함된 대기열을 생성합니다.이 예제에서 첫 번째 플레이어 지연 시간 정책은 처음 2분 동안 적용되고, 두 번째 정책은 3분 및 4분째에 적용되며, 세 번째 정책은 배치 요청 시간이 초과될 때까지 6분간 적용됩니다.

$ aws gamelift create-game-session-queue--name "matchmaker-queue"--timeout-in-seconds 600--destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901 DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912--player-latency-policies "MaximumIndividualPlayerLatencyMilliseconds=50,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=100,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=150"

복사 가능 버전:

aws gamelift create-game-session-queue --name "matchmaker-queue" --timeout-in-seconds 600 --destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901 DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912 --player-latency-policies "MaximumIndividualPlayerLatencyMilliseconds=50,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=100,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=150"

create-game-session-queue 요청이 성공하면 Amazon GameLift가 새 대기열 구성과 함께GameSessionQueue 객체를 반환합니다.

대기열 보기기존 게임 세션 배치 대기열 (p. 124) 전체에 대한 정보를 볼 수 있습니다. 표시된 대기열은 선택한 리전에서 생성한 대기열로만 구성됩니다. [Queues] 페이지에서 새로운 대기열을 생성하거나 기존 대기열을 삭제하거나 선택한 대기열에 대한 세부 정보 페이지를 열 수 있습니다. Queue 세부 정보 페이지에는 대기열의 구성및 계측치 데이터가 들어 있습니다. 또한 규칙을 편집하거나 삭제할 수도 있습니다.

[Queues] 페이지 보기

1. Amazon GameLift 콘솔 메뉴에서 [Queues]를 선택합니다.

[Queues] 페이지에 각 대기열에 대해 다음과 같은 요약 정보가 표시됩니다.

• Queue name – 대기열에 지정된 이름입니다. 새로운 게임 세션 요청에서 이 이름으로 대기열을 지정합니다.

• Queue timeout – 시간 초과되기 전에 대기열에 게임 세션 배치 요청이 유지되는 최대 시간(초)입니다.• Destinations in queue – 대기열 구성에 나열되어 있는 플릿 수입니다. 새로운 게임 세션은 대기열의

모든 플릿에 배치할 수 있습니다.2. 측정치를 포함하여 대기열에 대한 세부 정보를 보려면 대기열 이름을 선택합니다. 대기열 세부 정보 페

이지에 대한 자세한 내용은 대기열 세부 정보 보기 (p. 132) 단원을 참조하십시오.

버전131

Amazon GameLift 개발자 안내서대기열 보기

대기열 세부 정보 보기임의의 대기열에 대해 대기열 구성, 측정치 등 세부 정보에 액세스할 수 있습니다. 대기열 세부 정보 페이지를 열려면 [Queues] 페이지로 이동하여 대기열 이름을 선택합니다.

대기열 세부 정보 페이지에는 요약 표와 추가 정보가 수록된 탭이 표시됩니다. 이 페이지에서 다음 작업을 수행할 수 있습니다.

• 대기열 구성, 대상 목록, 플레이어 지연 시간 정책을 업데이트합니다. [Actions], [Edit queue]를 선택합니다.• 대기열을 제거합니다. 대기열이 제거되면 해당 대기열 이름을 참조하는 새 게임 세션에 대한 요청은 모두

실패합니다. (삭제한 대기열의 이름으로 대기열을 만들면 삭제한 대기열을 복구할 수 있습니다.) [Actions],[Delete queue]를 선택합니다.

요약

요약 테이블에 포함되는 정보는 다음과 같습니다.

• Queue name – 대기열에 지정된 이름입니다. 새로운 게임 세션 요청에서 이 이름으로 대기열을 지정합니다.

• Queue timeout – 시간 초과되기 전에 대기열에 게임 세션 배치 요청이 유지되는 최대 시간(초)입니다.• Destinations in queue – 대기열 구성에 나열되어 있는 플릿 수입니다. 새로운 게임 세션은 대기열의 모든

플릿에 배치할 수 있습니다.

대상

[Destinations] 탭에는 대기열에 대해 나열된 모든 플릿 또는 별칭이 표시됩니다. 플릿은 플릿 또는 별칭 ID 및리전을 지정하는 플릿 ARN 또는 별칭 ARN으로 식별됩니다.

Amazon GameLift가 대상에서 새 게임 세션 호스팅에 사용할 수 있는 리소스를 검색할 때는 여기 나열된 순서로 검색합니다. 나열된 첫 번째 대상에 용량이 있으면 새 게임 세션이 여기 배치됩니다. 이것이 대상의 기본 순서입니다. 개별 게임 세션 배치 요청에서 플레이어 지연 시간 데이터를 제공하여 기본 순서를 재정의할수 있습니다. 이 데이터는 Amazon GameLift에 플레이어 평균 지연 시간이 가장 낮은 가용 대상을 검색하도록 지시합니다.

대상을 추가, 편집 또는 삭제하려면 [Actions], [Edit queue]를 선택합니다.

플레이어 지연 시간 정책

[Player latency policies] 탭에는 대기열에 대해 정의된 모든 정책이 표시됩니다. 정책은 게임 세션 배치 작업중에 적용되는 순서로 나열됩니다.

플레이어 지연 시간 정책을 추가, 편집 또는 삭제하려면 [Actions], [Edit queue]를 선택합니다.

대기열 측정치

[Metrics] 탭은 시간 경과에 따른 대기열 측정치를 그래픽으로 보여줍니다.

대기열 지표는 리전별로 나뉜 성공적인 배치뿐만 아니라 전체 대기열의 배치 활동을 설명하는 정보를 포함합니다. 리전별 데이터는 게임이 호스팅되는 위치를 추적하는 데 유용합니다. FleetIQ를 사용하고 배치의 우선순위를 결정하여 대기열은 플레이어 지연 시간 및 호스팅 가격을 최소화합니다. 이에 따라 리전별 배치 지표는 총 대기열 디자인 문제를 감지할 수 있도록 도와줍니다.

대기열 지표는 Amazon CloudWatch에서도 지원됩니다. 모든 지표에 대한 설명은 대기열에 대한 GameLift지표 (p. 176) 단원을 참조하십시오.

버전132

Amazon GameLift 개발자 안내서FlexMatch 매치메이커 설정

그래프에 측정 정보 표시하기

1. 그래프 영역의 왼쪽에 나열된 측정치 이름을 하나 이상 클릭합니다. 검은색 측정치 이름은 그래프에 표시되고 회색 측정치 이름은 꺼집니다. 색상 키를 사용해 그래프의 어떤 선이 선택한 측정치와 일치하는지 구별합니다.

2. 그래프 영역 위에 표시된 다음 필터를 사용하여 측정치 데이터의 표시 방식을 변경합니다.

• Data 및 Period – 날짜 범위를 선택할 수 있는 두 가지 옵션을 제시합니다.• [Relative]를 사용하여 [Last hour], [Last day], [Last week] 등 현재 시간을 기준으로 기간을 선택합니

다.• [Absolute]를 선택하여 임의 시작 및 종료 날짜/시간으로 기간을 지정합니다.

• Granularity – 데이터 포인트를 집계할 시간을 선택합니다.• Refresh rate – 그래프 디스플레이의 업데이트 간격을 선택합니다. 그래프의 오른쪽 코너 위쪽에 있는

새로 고침 버튼을 클릭하여 언제든지 그래프를 새로 고칠 수 있습니다.• 시간대 – 그래프 디스플레이에 사용할 시간 형식으로서, UTC(협정 세계시) 또는 Browser time(브라우

저 시간)(현지 시간)을 선택합니다.• Show Points – 별도의 데이터 포인트를 원으로 표시하거나 선으로만 표시합니다.

Amazon GameLift FlexMatch 매치메이커 설정FlexMatch 매치메이커 프로세스는 게임 매치를 구축하는 일을 합니다. 수신된 매치메이킹 요청 풀을 관리하고, 매치를 위한 팀을 구성하며, 최상의 플레이어 그룹을 찾기 위해 플레이어를 처리 및 선정하고, 매치의 게임 세션을 배치 및 시작하는 프로세스를 개시합니다. 이 주제에서는 매치메이커의 핵심적인 측면과 게임에최적화된 매치메이커를 구성하는 방법에 대해 설명합니다.

FlexMatch 매치메이커에서 수신된 매치메이킹 요청을 처리하는 방법에 대한 자세한 내용은 매치메이킹 프로세스 (p. 14) 단원을 참조하십시오.

주제• FlexMatch 매치메이커 설계 (p. 133)• 매치메이킹 구성 생성 (p. 135)• FlexMatch 규칙 세트 빌드 (p. 136)• FlexMatch 이벤트 알림 설정 (p. 158)

FlexMatch 매치메이커 설계매치메이커 구성매치메이커는 최소한 다음의 세 가지 요소를 필요로 합니다.

• 규칙 세트는 매치를 위한 팀의 규모 및 범위를 결정하고 매치에 참여할 플레이어를 평가할 때 적용할 규칙세트를 정의합니다. 각 매치메이커는 한 가지 규칙 세트를 사용하도록 구성합니다. 규칙 세트 생성에 관한자세한 내용은 FlexMatch 규칙 세트 빌드 (p. 136) 단원을 참조하십시오.

• 게임 세션 대기열은 이 매치메이커가 생성하는 매치를 어디에서 호스팅할 것인지 결정합니다. 매치메이커는 대기열을 이용하여 사용 가능한 최상의 리소스를 찾고 매치를 위한 게임 세션을 배치합니다. 대기열은게임 세션을 배치할 때 사용할 리전을 지정합니다. 대기열에 대한 자세한 내용은 대기열 생성 (p. 129) 단원을 참조하십시오.

• 요청 타임아웃은 매치메이킹 요청이 요청 풀에 잔류하여 잠재적 매치의 평가 대상이 되는 기간을 결정합니다. 요청 시간이 초과되면 매치가 실패한 것이며 풀에서 제거됩니다.

이러한 최소 요건에 더해, 다음 추가 옵션으로 매치메이커를 구성할 수 있습니다.

버전133

Amazon GameLift 개발자 안내서매치메이커 설계

플레이어 수락

매치에 선택된 모든 플레이어의 참여 수락을 요청하도록 매치메이커를 구성할 수 있습니다. 수락이 요구되는경우, 모든 플레이어에게는 제안된 매치에 대해 수락하거나 거부할 수 있는 선택권이 주어져야 합니다. 매치는 제안된 매치에 속한 모든 플레이어로부터 수락을 접수해야만 성사됩니다. 임의의 플레이어가 매치를 거부하거나 수락하지 못한 경우 제안된 매치는 폐기됩니다. 매치메이킹 요청은 다음과 같이 처리됩니다. 모든 플레이어가 매치를 수락한 요청은 매치메이킹 풀로 반환되어 처리가 계속되고, 한 명 이상의 플레이어가 매치를 거부하거나 응답에 실패한 요청은 FAIL로 식별되어 더 이상 처리되지 않습니다. 플레이어 수락에는 시간제한이 수반되며 사용자가 이를 정의할 수 있습니다. 모든 플레이어가 제한 시간 내에 제안된 매치를 수락해야 매치가 계속됩니다.

매치메이킹 알림

이 기능은 모든 매치메이킹 관련 이벤트를 지정된 Amazon Simple Notification Service(SNS) 주제로 내보냅니다. 매치메이킹 요청이 비동기식이기 때문에 모든 게임은 매치메이킹 요청의 상태를 추적할 수 있는 방편을 갖추어야 하며, 알림 설정이 간단하고 효율적이어야 합니다. 자세한 내용은 게임 클라이언트에 FlexMatch추가 (p. 69) 단원의 요청 추적을 위한 옵션을 참조하십시오. 알림을 사용하려면 먼저 SNS 주제를 설정한 다음 해당 주제 ARN을 매치메이킹 구성에서 알림 대상으로 제공해야 합니다. 알림 설정에 대한 자세한 정보는FlexMatch 이벤트 알림 설정 (p. 158) 단원을 참조하십시오.

채우기 모드

FlexMatch 채우기는 게임 세션의 수명 전반에서 게임 세션을 잘 매칭된 새로운 플레이어로 계속 채우는 데유용합니다. 채우기 요청을 처리할 때 FlexMatch는 원래 플레이어를 매칭하는 데 사용한 동일한 매치메이커및 동일한 프로세스를 사용하여 새 플레이어를 찾습니다. 매치메이킹 구성에서 채우기 모드를 설정하여 자동채우기를 사용하거나 수동으로 채우기 요청을 관리하도록 선택할 수 있습니다. FlexMatch를 사용하여 기존게임 채우기 (p. 75)에서 자동 채우기에 대해 자세히 알아보십시오.

채우기 모드가 자동으로 설정되면 GameLift에서 게임 세션에 열린 플레이어 슬롯이 있을 때마다 새 채우기요청을 트리거합니다. 게임 서버에서 게임 세션이 시작하면 바로 GameLift에서 열린 슬롯이 있는 모든 게임세션에 대한 채우기 요청 생성을 시작합니다. 자동 채우기는 게임 세션에 대해 명시적으로 해제된 경우가 아니면 계속 사용됩니다. 매치메이커가 라지 매치(플레이어 수가 40을 넘음)를 정의하는 규칙 세트를 사용하는경우 자동으로 생성되는 채우기 요청에 보다 높은 우선 순위가 지정됩니다. 이는 새 플레이어가 도착해서 게임 슬롯을 요청하는 경우 완전히 새로운 게임보다 기존 게임에 배치될 가능성이 더 높음을 의미합니다.

게임을 채우길 원하지 않는 경우 또는 게임에 대한 채우기 요청을 수동으로 트리거하려는 경우 채우기 모드를 수동으로 설정합니다. 수동 채우기를 사용하면 채우기 요청을 트리거할 시기를 유연하게 결정할 수 있습니다. 예를 들어 게임의 특정 단계 동안 또는 특정 조건이 존재할 때에만 새 플레이어를 추가하는 것을 원치않을 수 있습니다. 게임 서버(게임 서버에 최신 플레이어 카운트가 있으므로 권장) 또는 게임 클라이언트에서수동으로 채우기 요청을 트리거할 수 있습니다.

게임 속성

새 게임 세션을 요청할 때 생성할 게임 세션의 유형에 관한 추가 정보를 게임 서버에 전달할 수 있습니다. 게임 속성은 모든 유형의 게임 세션 요청(배치 요청 또는 매치메이킹 요청과 더불어)과 함께 전달할 수 있습니다. 게임 속성은 매치메이킹과 함께 매치메이커 구성에 포함됩니다. 매치메이커를 사용하여 생성된 모든 게임 세션은 동일한 게임 속성을 사용합니다. 게임 속성을 다양하게 해야 하는 경우, 별도의 매치메이커를 생성하여 매치메이킹 요청을 적절한 게임 속성을 지닌 매치메이커로 전송합니다.

예약된 플레이어 슬롯

각 매치에 있는 특정 플레이어 슬롯이 예약되었다가 나중에 채워지도록 지정할 수 있습니다. 이는 매치메이킹 구성의 "추가 플레이어 카운트" 속성을 구성함으로써 수행됩니다.

사용자 지정 이벤트 데이터

이 속성을 사용하여 매치메이커에 대한 모든 매치메이킹 관련 이벤트에 일단의 사용자 지정 정보를 포함시킵니다. 이 기능은 매치메이커의 성과 추적을 포함하여 게임에 대한 특정한 고유 활동을 추적하는 데 유용할 수있습니다.

버전134

Amazon GameLift 개발자 안내서매치메이킹 구성 생성

매치메이킹 구성 생성FlexMatch 매치메이커를 설정하려면 새로운 매치메이킹 구성을 생성합니다. Amazon GameLift 콘솔 또는AWS Command Line Interface(AWS CLI) 중 하나를 사용합니다. 매치메이커 구성에 관한 자세한 내용은 thesection called “매치메이커 설계” (p. 133) 단원을 참조하십시오.

매치메이커를 위한 리전 선택

매치메이커는 그 구성이 생성되는 리전에서 호스팅됩니다. 매치메이커의 위치가 그 성과에 영향을 미치는 양태와 플레이어의 매치 경험을 재정의하는 방법을 검토할 필요가 있습니다. 매치메이킹을 요청할 클라이언트또는 클라이언트 서비스와 가까운 리전에 매치메이커를 배치할 것을 권장합니다. 또한 매치메이커와 매치메이커가 사용하는 대기열을 동일한 리전에 두는 것이 좋습니다. 이렇게 하면 매치메이커와 대기열 간의 통신지연을 최소화하는 데 도움이 됩니다.

매치메이커 생성

매치메이킹 구성을 생성하려면 먼저 매치메이커에 사용할 규칙 세트 및 대기열을 생성해야 합니다.

Console

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/home에서 콘솔을 엽니다.2. 매치메이커를 배치하고자 하는 리전으로 전환합니다.3. 기본 메뉴에서 [Create matchmaking configuration]을 선택합니다. 매치메이킹 구성 세부 정보를 입

력합니다.

• Name – 목록 및 측정치에서 쉽게 구별할 수 있도록 유의미한 매치메이커 이름을 생성합니다. 매치메이커 이름은 리전 내에서 고유해야 합니다. 매치메이킹 요청은 이름 및 리전으로 사용할 매치메이커를 식별합니다.

• Description – (선택 사항) 매치메이커의 설명을 추가합니다. 이 설명은 식별 목적으로만 사용되며, 매치메이킹 프로세스에서는 사용되지 않습니다.

• Queue – 매치메이커와 함께 사용할 게임 세션 대기열을 선택합니다. 대기열을 찾으려면 우선 대기열을 구성한 리전을 선택합니다. 그런 다음 해당 리전의 가용한 대기열 목록에서 원하는 대기열을 선택합니다.

• Request timeout – 매치메이커가 각 요청의 매치를 성사시키는 데 대한 최대 시간(초)을 입력합니다. 이 제한 시간을 초과하는 매치메이킹 요청은 종료됩니다.

• Acceptance required – (선택 사항) 제안된 매치의 각 플레이어가 매치 참여에 대해 능동적으로수락해야 하는지 여부를 나타냅니다. "예"를 선택하는 경우 매치를 취소할 때까지 매치메이커가플레이어의 수락을 기다리는 시간을 지정합니다.

• Rule set name – 이 매치메이커와 사용할 규칙 세트를 선택합니다. 목록은 현재 리전에 생성된 모든 규칙 세트를 포함합니다.

• 채우기 모드 – 매치 채우기를 처리하는 방법을 지정합니다. 자동 채우기 기능을 설정하려면 "자동"을 선택합니다. 또는 게임 서버나 게임 클라이언트에서 채우기 요청을 관리 중인 경우 또는 게임을 채우지 않도록 선택한 경우 "수동"을 선택합니다.

• Notification target – (선택 사항) 매치메이킹 이벤트 알림 수신을 위한 SNS 주제의 ARN을 입력합니다. 아직 설정하지 않았다면 나중에 매치메이킹 구성 편집을 통해 이 정보를 추가할 수 있습니다. FlexMatch 이벤트 알림 설정 (p. 158) 단원을 참조하십시오.

• Additional players – (선택 사항) 새 매치 각각에 충원되지 않은 채 남아 있는 플레이어 슬롯의 수를 지정합니다. 이들 슬롯은 향후에 플레이어로 채울 수 있습니다.

• Custom event data – (선택 사항) 이벤트 메시징에서 이 매치메이커와 연결하고자 하는 임의의 데이터를 지정합니다. 이 데이터는 매치메이커와 연결된 모든 이벤트에 포함됩니다.

4. 매치메이커 구성을 마쳤으면 [Create]를 클릭합니다. 생성이 성공적으로 완료되었으면 매치메이커가 매치메이킹 요청을 접수할 준비가 된 것입니다.

버전135

Amazon GameLift 개발자 안내서규칙 세트 빌드

AWS CLI

AWS CLI로 매치메이킹 구성을 생성하려면 명령줄 창을 열고 create-matchmaking-configuration 명령을 이용해 새 매치메이커를 정의합니다. 이 명령에 대한 전체 문서는 AWS CLI 명령 참조 설명서를 참조하십시오. AWS Command Line Interface 도구를 다운로드하여 설치합니다.

이 예제에서는 플레이어 수락을 요구하고 알림을 사용하여 매치메이킹 요청의 상태를 추적하는 새로운매치메이킹 구성을 생성합니다. 또한 나중에 추가할 추가 플레이어를 위한 플레이어 슬롯 두 개를 예약합니다.

$ aws gamelift create-matchmaking-configuration--name "SampleMatchamker123"--description "The sample test matchmaker with acceptance"--game-session-queue-arns "arn:aws:gamelift:us-west-2:111122223333:gamesessionqueue/My_Game_Session_Queue_One"--rule-set-name "My_Rule_Set_One"--request-timeout-seconds "120"--acceptance-required "true"--acceptance-timeout-seconds "30"--backfill-mode "AUTOMATIC"--notification-target "arn:aws:sns:us-west-2:111122223333:My_Matchmaking_SNS_Topic"--additional-player-count "2"--game-session-data "key=map,value=winter444"

복사 가능 버전:

aws gamelift create-matchmaking-configuration --name "SampleMatchamker123" --description "The sample test matchmaker with acceptance" --game-session-queue-arns "arn:aws:gamelift:us-west-2:111122223333:gamesessionqueue/My_Game_Session_Queue_One" --rule-set-name "My_Rule_Set_One" --request-timeout-seconds "120" --acceptance-required "true" --acceptance-timeout-seconds "30" --backfill-mode "AUTOMATIC" --notification-target "arn:aws:sns:us-west-2:111122223333:My_Matchmaking_SNS_Topic" --additional-player-count "2" --game-session-data "key=map,value=winter444"

매치메이킹 구성 생성 요청이 성공하면 Amazon GameLift가 여러분이 요청한 매치메이커 설정과 함께MatchmakingConfiguration 객체를 반환합니다. 이제 새 매치메이커가 매치메이킹 요청을 접수할 준비가 되었습니다.

FlexMatch 규칙 세트 빌드모든 FlexMatch 매치메이커에는 규칙 세트가 있어야 합니다. 규칙 세트는 매치의 두 가지 핵심 요소인 게임의 팀 구조 및 크기와 최상의 매치를 위해 플레이어를 그룹화하는 방법을 결정합니다.

예를 들어, 규칙 세트에서 다음과 같이 매치를 기술할 수 있을 것입니다. 플레이어가 각각 다섯 명이고 한 팀은 수비이고 다른 한 팀은 공격인 두 팀으로 매치를 생성합니다. 한 팀에 초보 플레이어와 경험이 많은 플레이어가 공존할 수 있지만 두 팀의 평균 스킬 포인트가 10포인트 이내여야 합니다. 30초 이후에 매치가 생성되지 않은 경우 스킬 요구 사항을 점진적으로 완화합니다.

이 단원의 주제에서는 매치메이킹 규칙 세트를 설계 및 빌드하는 방법을 설명합니다. 규칙 세트를 생성할 때Amazon GameLift 콘솔 또는 AWS CLI를 사용할 수 있습니다.

항목

• FlexMatch 규칙 세트 설계 (p. 137)• 매치메이킹 규칙 세트 생성 (p. 141)• FlexMatch 규칙 세트 예제 (p. 143)• FlexMatch 규칙 언어 (p. 287)

버전136

Amazon GameLift 개발자 안내서규칙 세트 빌드

FlexMatch 규칙 세트 설계매치메이킹 규칙 세트가 수행하는 가장 기본적인 작업은 두 가지입니다. 하나는 매치의 팀 구조 및 크기를 레이아웃하는 것이고, 다른 하나는 플레이어를 평가하여 최상의 매치를 찾는 방법을 매치메이커에게 알리는 것입니다. 그러나 규칙 세트에서는 이러한 기본 작업 이외의 다른 작업도 가능합니다. 예를 들어 규칙 세트에서다음과 같은 매치메이킹 문제를 해결할 수도 있습니다.

• 라지 매치(플레이어 수가 40보다 큰 경우)에 대한 특수 매치 처리를 트리거합니다.• 플레이어의 게임 플레이 보호를 위한 최소 플레이어 지연 시간 요구 사항을 적용합니다.• 생성 가능한 매치가 없는 경우 팀 요구 사항 또는 매치 규칙을 점진적으로 완화합니다.• 멀티 플레이어(파티 집계)를 포함한 매치 요청에 대한 특별 처리를 정의합니다.

이 주제에서는 규칙 세트의 기본 구조 및 규칙 세트를 최대 40명의 플레이어로 이루어진 매치에 사용하는방법을 다룹니다. FlexMatch는 간소화된 알고리즘을 사용하여 큰 플레이어 그룹을 신속하게 매칭하므로 플레이어 수가 40보다 큰 매치의 경우 다른 규칙 세트 구조가 필요합니다. FlexMatch 라지 매치 규칙 세트 설계 (p. 139)에서 라지 매치를 빌드하는 방법에 대해 자세히 알아보십시오.

관련 주제

• 매치메이킹 규칙 세트 생성 (p. 141)• FlexMatch 규칙 세트 예제 (p. 143)• FlexMatch 규칙 언어 (p. 287)

규칙 세트 구성 요소 정의

모든 규칙 세트는 다음 구성 요소 중 일부 또는 모두를 지정합니다. 규칙 세트는 기본적으로 규칙 언어 버전을 지정하고, 팀을 정의하고, 하나의 규칙을 설정해야 합니다. 대부분의 경우 플레이어 속성을 선언한 다음사용자 지정 규칙에 사용하려고도 합니다.

라지 매치에 대한 규칙 세트 스키마 (p. 286)에서 일반 규칙 세트 스키마를 검토합니다.

라지 매치(플레이어 수가 40보다 큰 경우)를 생성하는 규칙 세트에 대한 추가 요구 사항이 있습니다.FlexMatch 라지 매치 규칙 세트 설계 (p. 139)에서 라지 매치에 대해 자세히 알아보십시오.

규칙 세트 설명

규칙 세트에 대한 세부 정보를 제공합니다.

• name(선택 항목) – 이는 규칙 세트 구문에 있는 설명 레이블이며 Amazon GameLift에서는 유의미하게 사용되지 않습니다. 이 값을 규칙 세트 생성 시에 규칙 세트 구문과 함께 설정되는 규칙 세트 이름과 혼동하지 마십시오.

• ruleLanguageVersion(필수 항목) – 이는 FlexMatch 규칙을 생성하는 데 사용되는 속성 표현식 언어의 버전입니다. 값이 “1.0”과 같아야 합니다.

플레이어 속성 선언

규칙에서 개별 플레이어의 캐릭터를 바탕으로 매치에 참여시킬 플레이어를 선택할 수 있습니다. 플레이어 속성에 의존하는 규칙을 생성하는 경우 여기에서 이를 선언해야 합니다. 선언된 플레이어 속성 값은 이 규칙 세트를 사용하여 매치메이커에 전송되는 모든 매치메이킹 요청에 포함되어야 합니다.

또한 플레이어를 평가하는 동안 규칙 세트가 특정 플레이어 속성을 사용하지 않는 경우에도 이러한 속성을게임 세션에 전달하길 원할 수도 있습니다. 예를 들어 플레이어의 캐릭터 선택을 전달할 수도 있습니다. 이렇게 하려면 여기서 플레이어 속성을 선언하고, 각 플레이어에 대한 속성 값을 매치메이킹 요청에 포함합니다.

버전137

Amazon GameLift 개발자 안내서규칙 세트 빌드

플레이어 속성을 선언할 때 다음 정보를 포함합니다.

• name(필수 항목) – 이 값은 규칙 세트에 대해 고유해야 합니다.• type(필수 항목) – 이는 속성 값의 데이터 유형입니다. 유효한 데이터 유형은 숫자, 문자열 또는 문자열 맵

입니다.• default(선택 항목) – 플레이어에 대해 아무 값도 제공되지 않은 경우 사용할 기본값을 입력합니다. 기본 설

정이 선언되지 않을 경우 플레이어가 값을 제공하지 못해 매치될 수 없습니다.

팀 정의

매치에 대한 팀의 구조 및 크기를 설명합니다. 각 매치에 팀이 하나 이상 있어야 하며 원하는 수의 팀을 정의할 수 있습니다. 팀의 플레이어 수가 동일할 수 있거나 팀이 비대칭일 수 있습니다. 예를 들어 플레이어가 한명인 몬스터 팀과 플레이어가 10명인 헌터 팀을 정의할 수 있습니다.

FlexMatch에서는 규칙 세트가 팀 크기를 정의하는 방법에 따라 매치 요청을 스몰 매치 또는 라지 매치로 처리합니다. 플레이어 수가 최대 40명인 잠재적 매치는 스몰 매치이며 플레이어 수가 40을 초과하는 매치는 라지 매치입니다. 규칙 세트의 잠재적 매치 크기를 결정하려면 규칙 세트에 정의된 모든 팀에 대한 maxPlayer설정을 합산합니다.

• name(필수 항목) – 각 팀에 고유한 이름을 할당합니다. 이 이름은 규칙 및 확장에 사용되며 게임 세션에 사용되는 매치메이킹 데이터에서 참조됩니다.

• maxPlayers(필수 항목) – 팀에 할당할 수 있는 최대 플레이어 수를 지정합니다.• minPlayers(필수 항목) – 매치 성공을 위해 먼저 팀에 할당해야 하는 최소 플레이어 수를 지정합니다.• quantity(선택 항목) – FlexMatch가 이 정의를 기반으로 둘 이상의 팀을 생성하도록 하려면 해당 수를 지정

합니다. FlexMatch에서 매치를 생성할 때 이러한 팀에 숫자가 뒤에 추가된 지정된 이름이 제공됩니다. 예를 들어 "Red-Team_1", "Red-Team_2", "Red-Team_3" 등입니다.

FlexMatch에서는 항상 팀을 최대 플레이어 크기까지 채우려고 하지만 최소 플레이어 크기가 허용할 때 이보다 적은 수의 플레이어로 이루어진 팀을 생성합니다. 매치에 참여하는 모든 팀의 크기를 동일하게 하려는 경우 해당 규칙을 생성할 수 있습니다. "EqualTeamSizes" 규칙에 예제는 FlexMatch 규칙 세트 예제 (p. 143)주제를 참조하십시오.

플레이어 매칭에 대한 규칙 설정

매치에 대한 수락을 위해 플레이어를 평가하는 방법을 정의하는 규칙 문 세트를 생성합니다. 규칙은 개별 플레이어, 팀 또는 전체 매치에 적용되는 요구 사항을 설정할 수 있습니다. GameLift에서 매치 요청을 처리할때 사용 가능한 플레이어 풀에서 가장 오래된 플레이어부터 시작하고 해당 플레이어에 대한 매치를 빌드합니다.

• name(필수 항목) – 이는 규칙 세트에서 규칙을 고유하게 식별하는 유의미한 이름입니다. 규칙 이름은 이규칙과 관련된 활동을 추적하는 이벤트 로그 및 측정치에서도 참조됩니다.

• description(선택 항목) – 이 요소는 자유로운 양식의 텍스트 설명을 연결하는 데 사용합니다. 이 정보는 매치메이커에 의해 사용되지 않습니다.

• type(필수 항목) – 이 type 요소는 규칙을 처리할 때 사용하는 연산을 식별합니다. 각 규칙 유형에는 추가속성 세트가 필요합니다. 예를 들어 여러 규칙 유형에는 플레이어의 속성을 측정하는 기준이 되는 참조 값이 필요합니다. FlexMatch 규칙 언어 (p. 287)의 유효한 규칙 유형 및 속성 목록을 참조하십시오.

• 규칙 유형 속성(필수 항목일 수 있음) – 정의되는 규칙 유형에 따라 특정 규칙 속성을 설정해야 할 수도 있습니다. 예를 들어 거리 및 비교 규칙의 경우 측정할 플레이어 속성을 지정해야 합니다. FlexMatch 규칙 언어 (p. 287)에서 속성 및 FlexMatch 속성 표현식 언어를 사용하는 방법에 대해 자세히 알아보십시오.

시간 경과에 따라 매치 요구 사항 완화

확장을 사용하면 유효한 매치가 가능하지 않을 때 시간 경과에 따라 매치 기준을 완화할 수 있습니다. 이러한기능이 있어서 완벽한 매치가 가능하지 않을 때 “최상의 사용 가능” 매치를 생성할 수 있습니다. 확장을 사용

버전138

Amazon GameLift 개발자 안내서규칙 세트 빌드

하여 플레이어 스킬 요구 사항을 완화하거나, 허용 가능한 플레이어 지연 시간 수준을 높이거나, 최소 필수플레이어 수를 줄일 수도 있습니다. 확장을 통해 규칙을 완화함으로써 매칭될 수 있는 플레이어 풀을 점진적으로 확장 중입니다.

• target(필수 항목) – 완화할 규칙 세트 요소를 식별합니다. 규칙 또는 팀 속성을 완화할 수 있습니다.• steps(필수 항목) – 여러 단계에 걸쳐 규칙을 완화할 수 있습니다. 각 단계에 대해 적용할 새 값과 대기 시간

을 지정합니다. 규칙 세트 확장의 경우 대기 시간은 매치 생성이 시작된 후 시간(초)을 나타내는 절대 값입니다. 단계가 여러 개인 확장의 경우 각 단계의 대기 시간은 이전 단계의 경우보다 커야 합니다. 마지막 단계의 대기 시간은 매치 요청에 대해 허용된 시간(매치메이킹 구성에 설정되어 있음)보다 길 수 없습니다.• waitTimeSeconds• USD 상당

자동 채우기가 활성화되어 있는 매치메이커가 이 규칙 세트를 사용하는 경우 플레이어 수 요구 사항을 너무빨리 완화하지 마십시오. 새 게임 세션이 시작되고 자동 채우기를 시작할 때까지 몇 초 정도의 시간이 걸립니다. 확장 단계의 대기 시간이 매우 짧은 경우 새 게임이 채우기를 시작하기 전에 FlexMatch에서 부분적으로채워진 많은 매치를 생성할 가능성이 높습니다. 보다 나은 접근 방식은 게임에 대한 자동 채우기가 시작될 조짐이 보인 후에만 확장 대기 시간을 설정하는 것입니다. 이렇게 하면 FlexMatch를 통해 보다 신속하고 효율적으로 플레이어가 새 게임 또는 기존 게임에 참여할 수 있습니다. 동시에 가능한 한 빨리 FlexMatch에서 이동일한 규칙 세트를 사용하여 기존 게임을 채우길 원합니다. 확장 타이밍은 팀 구성에 따라 달라집니다. 게임에 대한 최상의 확장 전략을 찾기 위해 일부 테스트를 수행할 예정입니다.

FlexMatch 라지 매치 규칙 세트 설계

규칙 세트에서 플레이어 수가 40이 넘는 매치를 생성할 수 있는 경우 FlexMatch는 해당 규칙 세트를 라지 매치로 사용하는 매치 요청을 처리합니다. 라지 매치는 많은 수의 플레이어를 매칭하는 데 필요한 시간을 상당히 줄이는 다른 알고리즘을 사용하여 처리됩니다.

규칙 세트에서 라지 매치를 생성할지 여부를 확인하려면 규칙 세트에 있는 모든 팀에 대한 maxPlayer 설정을살펴봅니다. 이 설정의 합계가 40을 초과하는 경우 라지 매치 규칙 세트가 지정된 것입니다. 라지 매치 규칙세트는 최대 200명의 플레이어로 이루어진 매치를 생성할 수 있습니다.

라지 매치 규칙 세트는 다른 규칙 세트와 동일한 구성 요소를 약간 조정하여 사용합니다. 또한 규칙 세트는알고리즘 구성 요소를 포함해야 합니다. 라지 매치에 대한 규칙 세트 스키마 (p. 286)에서 라지 매치 규칙세트에 대한 스키마를 검토합니다.

라지 매치 알고리즘 정의

규칙 세트에 알고리즘 구성 요소를 추가합니다. 이 구성 요소는 사용자 기본 설정에 맞는 라지 매치 알고리즘을 구성합니다.

• batchingPreference(필수 항목) – 이 속성은 매치를 생성하는 동안 플레이어가 정렬되는 방식을 나타냅니다. 이 값은 “balanced”와 같아야 합니다.

balancedAttribute(필수 항목) – 매치에 참여할 플레이어를 선택할 때 사용할 단일 플레이어 속성을 식별합니다. FlexMatch는 개별 플레이어를 평가하기 전에 이 속성에 따라 사용 가능한 플레이어 풀을 정렬합니다. 먼저 속성 값이 유사한 플레이어를 평가하고 매치가 채워질 때까지 덜 유사한 플레이어로 점진적으로이동합니다. 이 속성은 이 속성에 대해 유사한 값을 가지는 성향을 보이는 플레이어를 그룹화하여 매치에서 플레이어 밸런스를 달성하는 데 사용됩니다. 예를 들어 스킬 속성을 선택하면 매치에서 유사한 스킬 레벨을 가진 플레이어가 함께 그룹화됩니다. 이러한 메커니즘은 사용 가능한 큰 플레이어 풀이 있을 때 라지매치에 대해 가장 효율적입니다.

규칙 세트의 플레이어 속성에서 밸런싱 속성을 선언해야 합니다. 데이터 유형이 "number"인 속성만 밸런싱 속성으로 사용될 수 있습니다.

• strategy(필수 항목) – 매치를 생성하는 동안 사용할 매칭 전략을 선택합니다. 옵션은"largestPopulation"(기본값) 및 "fastestRegion"입니다.

가장 큰 모집단

버전139

Amazon GameLift 개발자 안내서규칙 세트 빌드

이 전략에서는 FlexMatch가 하나 이상의 리전에서 허용되는 지연 시간 값을 가진 모든 플레이어를 포함함으로써 가장 큰 가능한 플레이어 풀을 유지 관리합니다. 큰 플레이어 풀을 사용하는 경우 매치는 더 빨리채우려고 하며 매칭된 플레이어는 밸런싱 속성과 관련하여 더 유사합니다. 플레이어는 자신의 지연 시간이이상적인 값보다 작지만 허용되는 제한 내에 있는 게임에 배치될 수 있습니다.

가장 빠른 리전

이 전략에서는 플레이어에게 최상의 지연 시간을 제공하는 매치에 플레이어를 참여시키는 데 우선 순위를둡니다. FlexMatch는 사용 가능한 플레이어를 가장 낮은 지연 시간 값을 보고하는 리전을 기반으로 그룹화한 다음 해당 그룹에서 매치를 채우려고 합니다. FlexMatch는 플레이어를 가능한 리전 중 가장 빠른 리전에 배치하려고 합니다. 그러나 매치를 채울 수 있을 만큼 충분히 큰 그룹을 생성하기 위해 플레이어를 두번째 또는 세 번째 빠른 리전(또는 더 느린 리전)에 따라 그룹화할 수도 있습니다. 결과적으로 매치를 채우는 데 시간이 더 걸릴 수 있습니다. 또한 이 전략을 사용하여 생성된 매치 내 플레이어는 밸런싱 속성과 관련하여 더 광범위할 수 있습니다.

다음은 그 예입니다:

"algorithm": { "balancedAttribute": "player_skill", "strategy": "balanced", "batchingPreference": "largestPopulation"},

플레이어 속성 선언

기본적으로 규칙 세트 알고리즘에서 밸런싱 속성으로 사용되는 플레이어 속성을 선언해야 합니다. 데이터 유형이 "number"인 속성만 밸런싱 속성으로 사용될 수 있습니다.

또한 게임 세션을 설정할 때 사용할 특정 플레이어 속성을 게임 서버에 전달할 수 있습니다. 예를 들어 플레이어의 캐릭터 선택, 맵 기본 설정 등을 전달할 수 있습니다. 플레이어 속성을 전달하려면 해당 속성을 규칙세트에서 선언한 다음 매치메이킹 요청에 각 플레이어에 대한 속성 값을 포함합니다. GameLift에서 게임 세션 요청을 게임 서버에 전달할 때 이 요청에는 매칭된 모든 플레이어에 대한 속성 값을 포함하는 매치메이커데이터가 포함됩니다.

팀 정의

팀 크기 및 구조를 정의하는 프로세스는 스몰 매치의 경우와 동일하지만 FlexMatch에서 팀을 채우는 방식이다릅니다. 이는 어떤 매치가 부분적으로만 채워졌을 때의 모양과 어떻게 가장 가까울 수 있는지에 영향을 줍니다. 응답에서 최소 팀 크기를 변경할 수도 있습니다.

FlexMatch는 팀에 플레이어를 할당할 때 다음 규칙을 사용합니다. 먼저 아직 해당 최소 플레이어 요구 사항을 충족하지 않은 팀을 찾습니다. 두 번째로, 이러한 팀 중 열려 있는 슬롯이 가장 많은 팀을 찾습니다.

크기가 동일하게 지정된 여러 팀을 정의하는 매치의 경우 채워질 때까지 각 팀에 순차적으로 플레이어가 추가됩니다. 따라서 매치가 채워지지 않아도 매치에서 각 팀에 유사한 수의 플레이어가 할당됩니다. 현재는 라지 매치에서 크기가 동일하게 지정된 팀을 강제 적용할 방법은 없습니다. 비대칭적으로 크기가 지정된 팀이있는 매치의 경우 이 프로세스는 약간 더 복잡합니다. 이 시나리오에서는 플레이어가 처음에는 열려 있는 슬롯이 가장 많은 가장 큰 팀에 할당됩니다. 그런 다음 열려 있는 슬롯 수가 모든 팀 간에 더 공평하게 분산됨에따라 플레이어가 더 작은 팀에 추가되기 시작합니다.

한 가지 예를 살펴보겠습니다. 세 개의 팀으로 이루어진 규칙 세트가 있다고 가정하겠습니다. Red 팀과 Blue팀 모두 maxPlayers=10, minPlayers=5로 설정되어 있으며, Green 팀은 maxPlayers=3, minPlayers=2로 설정되어 있습니다. 이 매치를 채우는 순서는 다음과 같습니다.

1. 어떤 팀도 minPlayers에 도달하지 않았습니다. Red 팀과 Blue 팀에 열려 있는 슬롯이 10개 있는데 Green팀에는 3개가 있습니다. 첫 10명의 플레이어(각각 5명)가 Red 팀과 Blue 팀에 할당됩니다. 이제 두 팀 모두 minPlayers에 도달했습니다.

2. Green 팀은 아직 minPlayers에 도달하지 않았습니다. 다음 2명의 플레이어가 Green 팀에 할당됩니다.

버전140

Amazon GameLift 개발자 안내서규칙 세트 빌드

3. 이제 모든 팀이 minPlayers에 도달했습니다. Red 팀과 Blue 팀에 열려 있는 슬롯이 가장 많으므로 다음 8명의 플레이어(각각 4명)가 Red 팀과 Blue 팀에 할당됩니다.

4. 세 팀 모두 사용 가능한 열려 있는 슬롯이 한 개 있게 되면 남은 3개의 플레이어 슬롯이 정해진 순서 없이할당됩니다.

라지 매치에 대한 지연 시간 규칙 설정

라지 매치를 생성하는 작업의 대부분이 밸런싱 플레이어 속성 및 우선 순위 전략을 사용하여 수행되므로 대부분의 사용자 지정 규칙을 사용할 수 없습니다. 그러나 플레이어 지연 시간에 대한 하드 제한을 설정하는 규칙을 생성할 수 있습니다.

이 규칙을 생성하려면 latency 규칙 유형을 maxLatency 속성과 함께 사용합니다. 다음은 최대 플레이어 지연 시간을 200밀리초로 설정하는 예입니다.

"rules": [{ "name": "player-latency", "type": "latency", "maxLatency": 200 }],

라지 매치 요구 사항 완화

스몰 매치의 경우처럼 유효한 매치가 가능하지 않을 때 확장을 사용하여 시간 경과에 따라 매치 요구 사항을완화할 수 있습니다. 라지 매치의 경우 지연 시간 규칙 또는 팀 플레이어 수를 완화하는 옵션이 있습니다.

라지 매치에 자동 매치 채우기를 사용 중인 경우 팀 플레이어 수를 너무 빨리 완화하지는 마십시오.FlexMatch에서는 게임 세션이 시작된 후에만 채우기 요청 생성을 시작합니다. 이는 매치가 생성된 후 몇 초동안 발생하지 않을 수도 있습니다. 해당 시간 동안 FlexMatch는 특히 플레이어 수 규칙이 낮게 조정될 때 부분적으로 채워진 여러 새 게임 세션을 생성할 수 있습니다. 따라서 결국 필요한 수보다 더 많은 게임 세션이생성되고 이러한 세션 간에 플레이어가 너무 촘촘하게 분산됩니다. 최상의 방법은 플레이어 수 확장의 첫 번째 단계에 더 긴 대기 시간(게임 세션이 시작하기에 충분히 긴 시간)을 지정하는 것입니다. 라지 매치의 경우채우기 요청에 더 높은 우선 순위가 지정되므로 새 게임이 시작되기 전에 새로 들어오는 플레이어는 기존 게임에 배정됩니다. 게임에 이상적인 대시 시간을 찾아보는 연습을 해야 할 수도 있습니다.

다음은 초기 대기 시간이 더 긴 Yellow 팀의 플레이어 수를 점진적으로 낮추는 예입니다. 규칙 세트 확장의대기 시간은 복합 값이 아닌 절대 값임을 명심하십시오. 따라서 첫 번째 확장이 5초에 발생하고, 두 번째 확장이 5초 이후인 10초에 발생합니다.

"expansions": [{ "target": "teams[Yellow].minPlayers", "steps": [{ "waitTimeSeconds": 5, "value": 8 }, { "waitTimeSeconds": 10, "value": 5 }] }]

매치메이킹 규칙 세트 생성FlexMatch 매치메이커를 위한 매치메이킹 규칙 세트를 관리합니다. Amazon GameLift 콘솔 또는 AWSCLI(Command Line Interface) 중 하나를 사용합니다. the section called “GameLiftFlexMatch의 작동 방식” (p. 12)에서 FlexMatch 매치메이킹 작동 방식에 대해 자세히 알아보십시오.

매치메이킹 규칙 세트는 일단 생성되면 변경할 수 없으므로 규칙 세트를 생성하기 전에 규칙 세트 구문을 확인할 것을 권장합니다. 콘솔 및 AWS CLI 모두 검증 옵션을 제공합니다. 사용할 수 있는 규칙 세트 수에 대한최대 제한이 있으므로 사용하지 않는 규칙 세트를 삭제하는 것이 좋습니다.

버전141

Amazon GameLift 개발자 안내서규칙 세트 빌드

Console

규칙 세트를 생성하려면

1. Amazon GameLifthttps://console.aws.amazon.com/gamelift/에서 콘솔을 엽니다.2. 규칙 세트를 배치하고자 하는 리전으로 전환합니다. 규칙 세트는 함께 사용하고자 하는 매치메이킹

구성과 같은 리전에서 정의해야 합니다.3. Amazon GameLift 기본 메뉴에서 [Create matchmaking rule set]를 선택하고 규칙 세트 세부 정보를

입력합니다.

• Rule set name – 목록과 이벤트 및 측정치에서 쉽게 구별할 수 있도록 유의미한 이름을 생성합니다. 규칙 세트 이름은 리전 내에서 고유해야 합니다. 매치메이킹 구성은 이름으로 사용할 규칙 세트를 식별합니다. 참고: 이는 규칙 세트 본문에 있는 "name" 필드(현재 사용되지 않음)와 다릅니다.

• Rule set – 규칙 세트 본문의 JSON 텍스트를 입력합니다. the section called “규칙 세트 설계” (p. 137)에서 규칙 세트를 설계하는 방법에 대해 자세히 알아보거나 FlexMatch 규칙 세트 예제 (p. 143)에 있는 규칙 세트 예제 중 하나를 사용하십시오.

4. 규칙 세트는 일단 생성하면 편집할 수 없으므로 우선 규칙 세트를 검증하는 것이 좋습니다.[Validate rule set]를 클릭하여 규칙 세트 본문의 구문이 정확한지 검증합니다.

5. 매치메이커 구성을 마쳤으면 [Create rule set]를 클릭합니다. 생성을 성공적으로 마쳤으면 매치메이커가 규칙 세트를 사용할 수 있습니다.

규칙 세트를 삭제하려면

1. 매치메이킹 규칙 세트 콘솔 페이지에서 규칙 세트를 선택하고 Delete rule set(규칙 세트 삭제)를 클릭합니다.

2. 삭제하려는 규칙 세트를 현재 매치메이킹 구성에서 사용 중인 경우 오류 메시지가 표시됩니다. 이경우 규칙 세트를 삭제하기 전에 다른 규칙 세트를 사용하도록 매치메이킹 구성을 변경해야 합니다.규칙 세트를 현재 사용 중인 매치메이킹 구성을 확인하려면 해당 규칙 세트 이름을 클릭하여 규칙세트의 세부 정보 페이지를 봅니다.

AWS CLI

규칙 세트를 생성하려면

• AWS CLI를 사용하여 매치메이킹 규칙 세트를 생성하려면 명령줄 창을 열고 create-matchmaking-rule-set(AWS CLI 명령 및 참조 설명서) 명령을 사용합니다. AWS CommandLine Interface 도구를 다운로드하여 설치합니다.

이 예제에서는 단일 팀을 설정하는 간단한 매치메이킹 규칙 세트를 생성합니다. 참조할 매치메이킹구성과 같은 리전에 규칙 세트를 생성해야 합니다.

$ aws gamelift create-matchmaking-rule-set--name "SampleRuleSet123"--rule-set-body '{"name": "aliens_vs_cowboys", "ruleLanguageVersion": "1.0", "teams": [{ "name": "cowboys", "maxPlayers": 8, "minPlayers": 4}]}'

복사 가능 버전:

버전142

Amazon GameLift 개발자 안내서규칙 세트 빌드

aws gamelift create-matchmaking-rule-set --name "SampleRuleSet123" --rule-set-body '{"name": "aliens_vs_cowboys", "ruleLanguageVersion": "1.0", "teams": [{"name": "cowboys", "maxPlayers": 8, "minPlayers": 4}]}'

생성 요청이 성공하면 Amazon GameLift가 여러분이 지정한 설정과 함께 MatchmakingRuleSet 객체를 반환합니다. 이제 매치메이커가 새 규칙 세트를 사용할 수 있습니다.

규칙 세트를 삭제하려면

• AWS CLI로 매치메이킹 규칙 세트를 삭제하려면 명령줄 창을 열고 delete-matchmaking-rule-set(AWS CLI Command Reference) 명령을 사용합니다.

삭제하려는 규칙 세트를 현재 매치메이킹 구성에서 사용 중인 경우 오류 메시지가 표시됩니다. 이경우 규칙 세트를 삭제하기 전에 다른 규칙 세트를 사용하도록 매치메이킹 구성을 변경해야 합니다. 규칙 세트를 현재 사용 중인 매치메이킹 구성 목록을 가져오려면 describe-matchmaking-configurations(AWS CLI Command Reference) 명령을 사용하고 규칙 세트 이름을 지정합니다.

이 예에서는 매치메이킹 규칙 세트의 사용 여부를 확인한 후 규칙 세트를 삭제합니다.

$ aws gamelift describe-matchmaking-configurations--rule-set-name "SampleRuleSet123"--limit 10

$ aws gamelift delete-matchmaking-rule-set--name "SampleRuleSet123"

복사 가능 버전:

aws gamelift describe-matchmaking-configurations --rule-set-name "SampleRuleSet123" --limit 10

aws gamelift delete-matchmaking-rule-set --name "SampleRuleSet123"

삭제 요청이 성공하면 Amazon GameLift가 성공을 반환합니다.

FlexMatch 규칙 세트 예제FlexMatch 규칙 세트는 다양한 매치메이킹 시나리오를 망라합니다. 다음 예제는 FlexMatch 구성 구조와 속성 표현식 언어에 부합합니다. 이들 규칙 전부를 복사하거나 필요한 구성 요소를 선택합니다.

FlexMatch 규칙 및 규칙 세트에 대한 자세한 내용은 다음 주제를 참조하십시오.

• FlexMatch 규칙 세트 빌드 (p. 136)• FlexMatch 규칙 언어 (p. 287)

Note

복수 플레이어를 포함하는 매치메이킹 티켓을 평가할 때 요청에 포함된 모든 플레이어가 매치 요건을 충족해야 합니다.

버전143

Amazon GameLift 개발자 안내서규칙 세트 빌드

예제 1: 플레이어가 동등하게 매치된 두 팀

이 예제에서는 다음과 같은 지침을 기준으로 플레이어가 동등하게 매치된 두 팀을 설정하는 방법을 설명합니다.

• 두 개의 플레이어 팀을 생성합니다.• 각 팀마다 4~8 명의 플레이어를 포함합니다.• 최종적으로 팀들의 플레이어 수가 동일해야 합니다.

• 플레이어의 스킬 레벨을 포함합니다(제공되지 않은 경우, 기본 설정 10).• 스킬 레벨이 다른 플레이어와 비슷한지 여부를 바탕으로 플레이어를 선택합니다. 두 팀의 평균 플레이어

스킬이 10점 이내가 되도록 합니다.• 매치가 신속하게 성사되지 않을 경우, 플레이어의 스킬 요건을 완화하여 합리적인 시간 내에서 매치가 성

사되도록 합니다.• 5초 후에 검색을 확장하여 팀들의 평균 플레이어 스킬 차이를 50점 이내로 완화합니다.• 15초 후에 검색을 확장하여 팀들의 평균 플레이어 스킬 차이를 100점 이내로 완화합니다.

이 규칙 세트 사용에 대한 참고 사항:

• 이 예제에서는 팀의 규모가 4명에서 8명 사이입니다(물론 팀 간에 플레이어 수는 동일해야 함). 유효한 규모의 범위에 속하는 팀에 대해 매치메이커는 허용되는 최대 수의 플레이어를 매치하기 위해 최선의 시도를합니다.

• FairTeamSkill 규칙에 의해 팀들은 플레이어 스킬을 바탕으로 균등하게 매치됩니다. 새로운 각 잠재 플레이어에 대해 이 규칙을 평가하기 위해 FlexMatch는 임시로 플레이어를 팀에 추가하고 평균을 계산합니다. 규칙에 부합하지 않은 경우 해당 잠재 플레이어는 매치에 추가되지 않습니다.

• 두 팀의 구조가 서로 일치하므로 팀 정의를 하나만 생성하고 팀 수량을 "2"로 설정하도록 선택할 수 있었습니다. 이 시나리오에서는 팀 이름을 "aliens"로 지정했으므로 팀에 "aliens_1" 및 "aliens_2" 이름이 할당되었습니다.

{ "name": "aliens_vs_cowboys", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "skill", "type": "number", "default": 10 }], "teams": [{ "name": "cowboys", "maxPlayers": 8, "minPlayers": 4 }, { "name": "aliens", "maxPlayers": 8, "minPlayers": 4 }], "rules": [{ "name": "FairTeamSkill", "description": "The average skill of players in each team is within 10 points from the average skill of all players in the match", "type": "distance", // get skill values for players in each team and average separately to produce list of two numbers "measurements": [ "avg(teams[*].players.attributes[skill])" ], // get skill values for players in each team, flatten into a single list, and average to produce an overall average "referenceValue": "avg(flatten(teams[*].players.attributes[skill]))", "maxDistance": 10 // minDistance would achieve the opposite result

버전144

Amazon GameLift 개발자 안내서규칙 세트 빌드

}, { "name": "EqualTeamSizes", "description": "Only launch a game when the number of players in each team matches, e.g. 4v4, 5v5, 6v6, 7v7, 8v8", "type": "comparison", "measurements": [ "count(teams[cowboys].players)" ], "referenceValue": "count(teams[aliens].players)", "operation": "=" // other operations: !=, <, <=, >, >= }], "expansions": [{ "target": "rules[FairTeamSkill].maxDistance", "steps": [{ "waitTimeSeconds": 5, "value": 50 }, { "waitTimeSeconds": 15, "value": 100 }] }]}

예제 2: 불균일 팀(헌터 대 몬스터)

이 예제에서는 플레이어 그룹이 단일 몬스터를 사냥하는 게임 모드를 설명합니다. 플레이어는 헌터와 몬스터중 하나를 선택합니다. 헌터는 사냥하고자 하는 몬스터의 최소 스킬을 지정합니다. 매치 성사를 위해 헌터 팀의 최소 규모를 시간 경과에 따라 완화할 수 있습니다. 이 시나리오에서는 다음과 같은 지침을 설정합니다.

• 정확히 5명의 헌터로 구성되는 팀을 생성합니다.• 정확히 1명의 몬스터로 구성되는 별도의 팀을 생성합니다.• 다음 플레이어 속성을 포함합니다.

• 플레이어의 스킬 레벨(제공되지 않은 경우, 기본 설정 10).• 플레이어가 선호하는 몬스터 스킬 레벨(제공되지 않은 경우, 기본 설정 10).• 플레이어가 몬스터가 되고 싶은지 여부(제공되지 않은 경우, 기본 설정 0 또는 F).

• 다음 기준에 따라 몬스터가 될 플레이어를 선택합니다.• 플레이어가 몬스터 역할을 요청해야 합니다.• 플레이어가 헌터 팀에 이미 속한 플레이어가 선호하는 최고 스킬 레벨 이상을 충족해야 합니다.

• 다음 기준에 따라 헌터 팀 플레이어를 선택합니다.• 몬스터 역할을 요청한 플레이어는 헌터 팀에 합류할 수 없습니다.• 몬스터 역할이 충원된 경우 플레이어가 원하는 몬스터의 스킬 레벨이 제안된 몬스터의 스킬보다 낮아야

합니다.• 매치가 신속하게 이루어지지 않는 경우, 다음과 같이 헌터 팀의 최소 규모를 완화합니다.

• 30초 후에는 네 명의 플레이어만 헌터 팀에 속해도 게임이 시작될 수 있도록 합니다.• 60초 후에는 세 명의 플레이어만 헌터 팀에 속해도 게임이 시작될 수 있도록 합니다.

이 규칙 세트 사용에 대한 참고 사항:

• 헌터와 몬스터 두 개의 별도 팀을 사용함으로써 각기 다른 일단의 기준으로 바탕으로 회원을 평가할 수 있습니다.

{ "name": "players_vs_monster_5_vs_1", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "skill",

버전145

Amazon GameLift 개발자 안내서규칙 세트 빌드

"type": "number", "default": 10 },{ "name": "desiredSkillOfMonster", "type": "number", "default": 10 },{ "name": "wantsToBeMonster", "type": "number", "default": 0 }], "teams": [{ "name": "players", "maxPlayers": 5, "minPlayers": 5 }, { "name": "monster", "maxPlayers": 1, "minPlayers": 1 }], "rules": [{ "name": "MonsterSelection", "description": "Only users that request playing as monster are assigned to the monster team", "type": "comparison", "measurements": ["teams[monster].players.attributes[wantsToBeMonster]"], "referenceValue": 1, "operation": "=" },{ "name": "PlayerSelection", "description": "Do not place people who want to be monsters in the players team", "type": "comparison", "measurements": ["teams[players].players.attributes[wantsToBeMonster]"], "referenceValue": 0, "operation": "=" },{ "name": "MonsterSkill", "description": "Monsters must meet the skill requested by all players", "type": "comparison", "measurements": ["avg(teams[monster].players.attributes[skill])"], "referenceValue": "max(teams[players].players.attributes[desiredSkillOfMonster])", "operation": ">=" }], "expansions": [{ "target": "teams[players].minPlayers", "steps": [{ "waitTimeSeconds": 30, "value": 4 },{ "waitTimeSeconds": 60, "value": 3 }] }]}

예제 3: 팀 레벨 요구 사항 및 지연 시간 제한 설정이 예제에서는 플레이어 팀을 설정하고 각 개별 플레이어 대신 각 팀에 규칙 세트를 적용하는 방법을 설명합니다. 여기서는 단일 정의를 사용하여 동등하게 매칭된 3개의 팀을 생성합니다. 또한 모든 플레이어에 대해최대 지연 시간을 설정해 봅니다. 매치 성사를 위해 시간 경과에 따라 최대 지연 시간을 완화할 수 있습니다.이 시나리오에서는 다음과 같은 지침을 설정합니다.

• 세 개의 플레이어 팀을 생성합니다.• 각 팀마다 3~5명의 플레이어를 포함합니다.

버전146

Amazon GameLift 개발자 안내서규칙 세트 빌드

• 최종적으로 팀들은 동일한 혹은 거의 동일한(차이: 1명 이내) 수의 플레이어를 포함해야 합니다.• 다음 플레이어 속성을 포함합니다.

• 플레이어의 스킬 레벨(제공되지 않은 경우, 기본 설정 10).• 플레이어의 캐릭터 역할(제공되지 않은 경우, 기본 설정 "농부").

• 매치에서 스킬 레벨이 다른 플레이어와 비슷한지 여부를 바탕으로 플레이어를 선택합니다.• 각 팀의 평균 플레이어 스킬이 10점 이내가 되도록 합니다.

• 팀의 "메딕" 캐릭터 수는 다음과 같이 제한합니다.• 매치 전체적으로 메딕의 최대 수는 5명입니다.

• 50밀리초 이하의 지연 시간을 보고하는 플레이어만 매칭합니다.• 매치가 신속하게 이루어지지 않는 경우, 다음과 같이 플레이어 지연 시간 요건을 완화합니다.

• 10초 후에는 플레이어 지연 시간 값을 최대 100ms로 완화합니다.• 20초 후에는 플레이어 지연 시간 값을 최대 150ms로 완화합니다.

이 규칙 세트 사용에 대한 참고 사항:

• 규칙 세트에 의해 팀들은 플레이어 스킬을 바탕으로 균등하게 매치됩니다. FairTeamSkill 규칙을 평가하기 위해 FlexMatch는 임시로 잠재 플레이어를 팀에 추가하고 해당 팀에서 플레이어의 평균 스킬을 계산합니다. 그런 다음 해당 평균 스킬을 두 팀에 있는 플레이어의 평균 스킬과 비교합니다. 규칙에 부합하지않은 경우 해당 잠재 플레이어는 매치에 추가되지 않습니다.

• 팀 및 매치 레벨 요건(총 메딕 수)은 수집 규칙을 통해 달성합니다. 이 규칙 유형은 모든 플레이어의 캐릭터속성 목록을 취하고 최대 카운트에 대해 확인합니다. flatten을 사용하여 모든 팀의 모든 플레이어 목록을 생성합니다.

• 지연 시간을 기준으로 평가할 때 다음에 유의합니다.• 지연 시간 데이터는 플레이어 객체의 일부로 매치메이킹 요청에 제공됩니다. 플레이어 속성이 아니므로

나열될 필요가 없습니다.• 매치메이커는 리전 별로 지연 시간을 평가합니다. 리전을 불문하고 지연 시간의 최대치보다 긴 경우 무

시됩니다. 매치에 대해 수락되기 위해서는 플레이어의 지연 시간이 적어도 한 리전에서 최대치보다 짧아야 합니다.

• 매치메이킹 요청에서 하나 이상의 플레이어에 대한 지연 시간 데이터가 누락된 경우 모든 매치에 대해요청이 거부됩니다.

{ "name": "three_team_game", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "skill", "type": "number", "default": 10 },{ "name": "character", "type": "string_list", "default": [ "peasant" ] }], "teams": [{ "name": "trio", "minPlayers": 3, "maxPlayers": 5, "quantity": 3 }], "rules": [{ "name": "FairTeamSkill", "description": "The average skill of players in each team is within 10 points from the average skill of players in the match", "type": "distance",

버전147

Amazon GameLift 개발자 안내서규칙 세트 빌드

// get players for each team, and average separately to produce list of 3 "measurements": [ "avg(teams[*].players.attributes[skill])" ], // get players for each team, flatten into a single list, and average to produce overall average "referenceValue": "avg(flatten(teams[*].players.attributes[skill]))", "maxDistance": 10 // minDistance would achieve the opposite result }, { "name": "CloseTeamSizes", "description": "Only launch a game when the team sizes are within 1 of each other. e.g. 3 v 3 v 4 is okay, but not 3 v 5 v 5", "type": "distance", "measurements": [ "max(count(teams[*].players))"], "referenceValue": "min(count(teams[*].players))", "maxDistance": 1 }, { "name": "OverallMedicLimit", "description": "Don't allow more than 5 medics in the game", "type": "collection", // This is similar to above, but the flatten flattens everything into a single // list of characters in the game. "measurements": [ "flatten(teams[*].players.attributes[character])"], "operation": "contains", "referenceValue": "medic", "maxCount": 5 }, { "name": "FastConnection", "description": "Prefer matches with fast player connections first", "type": "latency", "maxLatency": 50 }], "expansions": [{ "target": "rules[FastConnection].maxLatency", "steps": [{ "waitTimeSeconds": 10, "value": 100 }, { "waitTimeSeconds": 20, "value": 150 }] }]}

예제 4: 최선의 매치 검색을 위한 명시적 정렬 사용

이 예제에서는 플레이어 수가 각 세 명인 두 팀으로 구성된 간단한 매치를 설정합니다. 가능한 최선의 매치를최대한 빨리 찾기 위해 명시적 정렬 규칙을 사용하는 방법을 설명합니다. 이들 규칙은 모든 액티브 매치메이킹 티켓을 사전 정렬하여 특정 키 요건을 기준으로 최선의 매치를 생성합니다. 이 시나리오는 다음 지침으로구현됩니다.

• 두 개의 플레이어 팀을 생성합니다.• 각 팀마다 정확히 3명의 플레이어를 포함합니다.• 다음 플레이어 속성을 포함합니다.

• 경험 레벨(제공되지 않은 경우, 기본 설정 50).• 선호 게임 모드(복수 값 나열 가능)(제공되지 않은 경우 기본 설정 "협동" 및 "데스매치").• 선호 게임 맵(맵 이름 및 선호 가중치 포함)(제공되지 않은 경우 기본 설정 "defaultMap" 및 가중치

100).• 사전 정렬 설정:

• 앵커 플레이어와 동일한 게임 맵에 대한 선호를 기준으로 플레이어를 정렬합니다. 플레이어가 복수의 희망 게임 맵을 가질 수 있으므로 이 예제에서는 선호 값을 사용합니다.

버전148

Amazon GameLift 개발자 안내서규칙 세트 빌드

• 경험 레벨이 앵커 플레이어와 얼마나 근접한지를 기준으로 플레이어를 정렬합니다. 이렇게 정렬하고 나면 모든 팀에 있는 모든 플레이어가 최대한 근접하는 경험 레벨을 가지게 될 것입니다.

• 모든 팀에 걸쳐 모든 플레이어가 선택한 게임 모드 중 공통 게임 모드가 하나 이상 있어야 합니다.• 모든 팀에 걸쳐 모든 플레이어가 선택한 게임 맵 중 공통 맵이 하나 이상 있어야 합니다.

이 규칙 세트 사용에 대한 참고 사항:

• 게임 맵 정렬은 mapPreference 속성 값을 비교하는 절대 정렬을 사용합니다. 이 정렬은 규칙 세트의 첫 번째 정렬이므로 맨 처음 수행됩니다.

• 경험 정렬은 거리 정렬을 사용하여 잠재 플레이어의 스킬 레벨을 앵커 플레이어의 스킬과 비교합니다.• 정렬은 규칙 세트에 나열된 순서대로 수행됩니다. 이 시나리오에서는 플레이어를 게임 맵 선호도와 그 다

음으로는 경험 레벨을 기준으로 정렬합니다.

{ "name": "multi_map_game", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "experience", "type": "number", "default": 50 }, { "name": "gameMode", "type": "string_list", "default": [ "deathmatch", "coop" ] }, { "name": "mapPreference", "type": "string_number_map", "default": { "defaultMap": 100 } }, { "name": "acceptableMaps", "type": "string_list", "default": [ "defaultMap" ] }], "teams": [{ "name": "red", "maxPlayers": 3, "minPlayers": 3 }, { "name": "blue", "maxPlayers": 3, "minPlayers": 3 }], "rules": [{ // We placed this rule first since we want to prioritize players preferring the same map "name": "MapPreference", "description": "Favor grouping players that have the highest map preference aligned with the anchor's favorite", // This rule is just for sorting potential matches. We sort by the absolute value of a field. "type": "absoluteSort", // Highest values go first "sortDirection": "descending", // Sort is based on the mapPreference attribute. "sortAttribute": "mapPreference", // We find the key in the anchor's mapPreference attribute that has the highest value. // That's the key that we use for all players when sorting. "mapKey": "maxValue" }, {

버전149

Amazon GameLift 개발자 안내서규칙 세트 빌드

// This rule is second because any tie-breakers should be ordered by similar experience values "name": "ExperienceAffinity", "description": "Favor players with similar experience", // This rule is just for sorting potential matches. We sort by the distance from the anchor. "type": "distanceSort", // Lowest distance goes first "sortDirection": "ascending", "sortAttribute": "experience" }, { "name": "SharedMode", "description": "The players must have at least one game mode in common", "type": "collection", "operation": "intersection", "measurements": [ "flatten(teams[*].players.attributes[gameMode])"], "minCount": 1 }, { "name": "MapOverlap", "description": "The players must have at least one map in common", "type": "collection", "operation": "intersection", "measurements": [ "flatten(teams[*].players.attributes[acceptableMaps])"], "minCount": 1 }]}

예제 5: 복수 플레이어 속성 간의 교집합 찾기

이 예제에서는 두 개 이상의 플레이어 속성 간에 교집합을 찾기 위해 수집 규칙을 사용하는 방법을보여줍니다. 속성 모음을 처리할 때 단일 속성의 경우 intersection 작업을, 다중 속성의 경우reference_intersection_count 작업을 사용할 수 있습니다.

이러한 접근 방식을 보여주기 위해 이 예제에서는 선호하는 캐릭터를 토대로 매치에서 플레이어를 평가하고있습니다. 이 예제 게임은 "완전 무료" 방식이기 때문에 매치에서 모든 플레이어가 게임 상대가 될 수 있습니다. 각 플레이어는 (1) 자신의 캐릭터를 선택하고, (2) 게임 상대가 될 캐릭터를 선택하라는 요청 메시지를 받게 됩니다. 매치에 참여하는 모든 플레이어가 다른 모든 플레이어의 선호 상대 목록에 있는 캐릭터를 사용하도록 하는 규칙이 필요합니다.

다음은 다음과 같은 특성이 있는 매치를 설명하는 규칙 세트의 예제입니다.

• 팀 구성: 5명의 플레이어로 구성된 하나의 팀• 플레이어 속성:

• myCharacter: 플레이어가 선택한 캐릭터입니다.• preferredOpponents: 플레이어가 게임 상대로 선택하고 싶은 캐릭터의 목록입니다.

• 매치 규칙: 사용 중인 각 캐릭터가 모든 플레이어의 선호 상대 목록에 있는 경우에 잠재적 매치가 허용됩니다.

매치 규칙을 실행하기 위해 이 예제에서는 다음과 같은 속성 값을 가진 수집 규칙을 사용하고 있습니다.

• 작업 – reference_intersection_count 작업을 사용하여 측정 값의 각 문자열 목록이 참조 값의 문자열 목록과 어떻게 교집합을 이루는지 평가합니다.

• 측정 – flatten 속성 표현식을 사용하여 문자열 목록을 생성합니다. 각 문자열 목록에는 한 플레이어의myCharacter 속성 값이 포함됩니다.

• 참조 값 – set_intersection 속성 표현식을 사용하여 매치에서 모든 플레이어에게 공통적인preferredOpponents 속성 값 모두에 대한 문자열 목록을 생성합니다.

• 제한 – 각 플레이어가 선택한 캐릭터(측정 시 문자열 목록)가 모든 플레이어에 공통되는 선호 상대 중 최소한 명과 매치될 수 있도록 minCount가 1로 설정됩니다.

버전150

Amazon GameLift 개발자 안내서규칙 세트 빌드

• 확장 – 15초 내에 매치가 성사되지 않으면 최소한의 교집합 요구 사항을 완화합니다.

이 규칙의 프로세스 흐름은 다음과 같습니다.

1. 해당 매치에 플레이어가 추가됩니다. 새 플레이어가 선호하는 상대 목록과의 교집합을 포함시켜 참조 값(문자열 목록)이 다시 계산됩니다. 새 플레이어가 선택한 캐릭터를 새 문자열 목록으로 추가하여 측정 값(문자열 목록의 목록)이 다시 계산됩니다.

2. Amazon GameLift은 측정 값(플레이어가 선택한 캐릭터)의 각 문자열 목록이 최소 하나의 참조 값(플레이어가 선호하는 상대) 목록과 교집합을 이루는지 확인합니다. 이 예제에서는 측정 값의 각 문자열 목록에오직 하나의 값이 포함되어 있기 때문에 교집합은 0 또는 1입니다.

3. 측정 값의 어떤 문자열 목록도 참조 값 문자열 목록과 교집합을 이루지 않을 경우에는 규칙이 실패하고 새플레이어가 해당 매치에서 제거됩니다.

4. 15초 내에 매치가 성사되지 않을 경우, 상대 매치 요건을 낮춰서 매치에서 나머지 플레이어 슬롯을 채웁니다.

{ "name": "preferred_characters", "ruleLanguageVersion": "1.0",

"playerAttributes": [{ "name": "myCharacter", "type": "string_list" }, { "name": "preferredOpponents", "type": "string_list" }],

"teams": [{ "name": "red", "minPlayers": 5, "maxPlayers": 5 }],

"rules": [{ "description": "Make sure that all players in the match are using a character that is on all other players' preferred opponents list.", "name": "OpponentMatch", "type": "collection", "operation": "reference_intersection_count", "measurements": ["flatten(teams[*].players.attributes[myCharacter])"], "referenceValue": "set_intersection(flatten(teams[*].players.attributes[preferredOpponents]))", "minCount":1 }], "expansions": [{ "target": "rules[OpponentMatch].minCount", "steps": [{ "waitTimeSeconds": 15, "value": 0 }] }]}

예제 6: 모든 플레이어를 대상으로 속성 비교

이 예제에서는 플레이어 그룹에서 플레이어 속성을 비교하는 방법을 보여줍니다.

다음은 다음과 같은 특성이 있는 매치를 설명하는 규칙 세트의 예제입니다.

버전151

Amazon GameLift 개발자 안내서규칙 세트 빌드

• 팀 구조: 두 개의 단일 플레이어 팀• 플레이어 속성:

• gameMode: 플레이어가 선택한 게임 유형입니다(제공되지 않는 경우 기본 설정 "순서 기반").• gameMap: 플레이어가 선택한 게임 세상입니다(제공되지 않는 경우 기본 설정 1).• character: 플레이어가 선택한 캐릭터입니다. 여기에 기본값이 없으면 플레이어가 캐릭터를 지정해야 합

니다.• 매치 규칙: 매치된 플레이어는 다음 요구 사항을 충족해야 합니다.

• 플레이어들이 동일한 게임 모드를 선택해야 합니다.• 플레이어들이 동일한 게임 맵을 선택해야 합니다.• 플레이어들이 서로 다른 캐릭터를 선택해야 합니다.

이 규칙 세트 사용에 대한 참고 사항:

• 매치 규칙을 실행하기 위해 이 예제에서는 비교 규칙을 사용하여 모든 플레이어의 속성 값을 확인하고 있습니다. 게임 모드 및 맵에서 규칙은 값들이 동일한지 확인합니다. 각 캐릭터에서 규칙은 값들이 서로 다른지 확인합니다.

• 이 예제에서는 하나의 플레이어 정의를 수량 속성과 함께 사용하여 두 플레이어 팀을 모두 생성합니다. 팀에 "player_1" 및 "player_2" 이름이 지정됩니다.

{ "name": "", "ruleLanguageVersion": "1.0",

"playerAttributes": [{ "name": "gameMode", "type": "string", "default": "turn-based" }, { "name": "gameMap", "type": "number", "default": 1 }, { "name": "character", "type": "number" }],

"teams": [{ "name": "player", "minPlayers": 1, "maxPlayers": 1, "quantity": 2 }],

"rules": [{ "name": "SameGameMode", "description": "Only match players when they choose the same game type", "type": "comparison", "operation": "=", "measurements": ["flatten(teams[*].players.attributes[gameMode])"] }, { "name": "SameGameMap", "description": "Only match players when they're in the same map", "type": "comparison", "operation": "=", "measurements": ["flatten(teams[*].players.attributes[gameMap])"] }, { "name": "DifferentCharacter", "description": "Only match players when they're using different characters",

버전152

Amazon GameLift 개발자 안내서규칙 세트 빌드

"type": "comparison", "operation": "!=", "measurements": ["flatten(teams[*].players.attributes[character])"] }]}

예제 7: 라지 매치 생성

이 예제에서는 플레이어 수가 40명을 초과할 수 있는 매치에 대한 규칙 세트를 설정하는 방법을 설명합니다.규칙 세트에서 총 maxPlayer 수가 40보다 큰 팀을 설명할 때 라지 매치로 처리됩니다.

규칙 세트에서 플레이어 수가 40이 넘는 매치를 생성할 수 있는 경우 FlexMatch는 해당 규칙 세트를 라지 매치로 사용하는 매치 요청을 처리합니다. 라지 매치는 많은 수의 플레이어를 매칭하는 데 필요한 시간을 상당히 줄이는 다른 알고리즘을 사용하여 처리됩니다.

규칙 세트에서 라지 매치를 생성할지 여부를 확인하려면 규칙 세트에 있는 모든 팀에 대한maxPlayer 설정을 살펴봅니다. 이 설정의 합계가 40을 초과하는 경우 라지 매치 규칙 세트가 지정된 것입니다. 라지 매치 규칙 세트는 최대 200명의 플레이어로 이루어진 매치를 생성할 수 있습니다.

라지 매치 규칙 세트는 다른 규칙 세트와 동일한 구성 요소를 약간 조정하여 사용합니다. 또한 규칙 세트는 알고리즘 구성 요소를 포함해야 합니다. 라지 매치에 대한 규칙 세트 스키마 (p. 286)에서 라지 매치 규칙 세트에 대한 스키마를 검토합니다.

라지 매치 알고리즘 정의

규칙 세트에 알고리즘 구성 요소를 추가합니다. 이 구성 요소는 사용자 기본 설정에 맞는 라지 매치 알고리즘을 구성합니다.

• batchingPreference(필수 항목) – 이 속성은 매치를 생성하는 동안 플레이어가 정렬되는 방식을 나타냅니다. 이 값은 “balanced”와 같아야 합니다.balancedAttribute(필수 항목) – 매치에 참여할 플레이어를 선택할 때 사용할 단일 플레이어 속성을 식별합니다. FlexMatch는 개별 플레이어를 평가하기 전에 이 속성에 따라 사용 가능한 플레이어 풀을 정렬합니다. 먼저 속성 값이 유사한 플레이어를 평가하고 매치가 채워질 때까지덜 유사한 플레이어로 점진적으로 이동합니다. 이 속성은 이 속성에 대해 유사한 값을 가지는성향을 보이는 플레이어를 그룹화하여 매치에서 플레이어 밸런스를 달성하는 데 사용됩니다.예를 들어 스킬 속성을 선택하면 매치에서 유사한 스킬 레벨을 가진 플레이어가 함께 그룹화됩니다. 이러한 메커니즘은 사용 가능한 큰 플레이어 풀이 있을 때 라지 매치에 대해 가장 효율적입니다.규칙 세트의 플레이어 속성에서 밸런싱 속성을 선언해야 합니다. 데이터 유형이 "number"인속성만 밸런싱 속성으로 사용될 수 있습니다.

• strategy(필수 항목) – 매치를 생성하는 동안 사용할 매칭 전략을 선택합니다. 옵션은"largestPopulation"(기본값) 및 "fastestRegion"입니다.가장 큰 모집단이 전략에서는 FlexMatch가 하나 이상의 리전에서 허용되는 지연 시간 값을 가진 모든 플레이어를 포함함으로써 가장 큰 가능한 플레이어 풀을 유지 관리합니다. 큰 플레이어 풀을 사용하는 경우 매치는 더 빨리 채우려고 하며 매칭된 플레이어는 밸런싱 속성과 관련하여 더 유사합니다. 플레이어는 자신의 지연 시간이 이상적인 값보다 작지만 허용되는 제한 내에 있는 게임에 배치될 수 있습니다.가장 빠른 리전이 전략에서는 플레이어에게 최상의 지연 시간을 제공하는 매치에 플레이어를 참여시키는 데우선 순위를 둡니다. FlexMatch는 사용 가능한 플레이어를 가장 낮은 지연 시간 값을 보고하는 리전을 기반으로 그룹화한 다음 해당 그룹에서 매치를 채우려고 합니다. FlexMatch는 플레

버전153

Amazon GameLift 개발자 안내서규칙 세트 빌드

이어를 가능한 리전 중 가장 빠른 리전에 배치하려고 합니다. 그러나 매치를 채울 수 있을 만큼

충분히 큰 그룹을 생성하기 위해 플레이어를 두 번째 또는 세 번째 빠른 리전(또는 더 느린 리전)에 따라 그룹화할 수도 있습니다. 결과적으로 매치를 채우는 데 시간이 더 걸릴 수 있습니다. 또한 이 전략을 사용하여 생성된 매치 내 플레이어는 밸런싱 속성과 관련하여 더 광범위할수 있습니다.

다음은 그 예입니다:

"algorithm": {

"balancedAttribute": "player_skill",

"strategy": "balanced",

"batchingPreference": "largestPopulation"

},

플레이어 속성 선언

기본적으로 규칙 세트 알고리즘에서 밸런싱 속성으로 사용되는 플레이어 속성을 선언해야 합니다. 데이터 유형이 "number"인 속성만 밸런싱 속성으로 사용될 수 있습니다.

또한 게임 세션을 설정할 때 사용할 특정 플레이어 속성을 게임 서버에 전달할 수 있습니다. 예를들어 플레이어의 캐릭터 선택, 맵 기본 설정 등을 전달할 수 있습니다. 플레이어 속성을 전달하려면 해당 속성을 규칙 세트에서 선언한 다음 매치메이킹 요청에 각 플레이어에 대한 속성 값을 포함합니다. GameLift에서 게임 세션 요청을 게임 서버에 전달할 때 이 요청에는 매칭된 모든 플레이어에 대한 속성 값을 포함하는 매치메이커 데이터가 포함됩니다.

팀 정의

팀 크기 및 구조를 정의하는 프로세스는 스몰 매치의 경우와 동일하지만 FlexMatch에서 팀을 채우는 방식이 다릅니다. 이는 어떤 매치가 부분적으로만 채워졌을 때의 모양과 어떻게 가장 가까울 수 있는지에 영향을 줍니다. 응답에서 최소 팀 크기를 변경할 수도 있습니다.

FlexMatch는 팀에 플레이어를 할당할 때 다음 규칙을 사용합니다. 먼저 아직 해당 최소 플레이어요구 사항을 충족하지 않은 팀을 찾습니다. 두 번째로, 이러한 팀 중 열려 있는 슬롯이 가장 많은팀을 찾습니다.

크기가 동일하게 지정된 여러 팀을 정의하는 매치의 경우 채워질 때까지 각 팀에 순차적으로 플레이어가 추가됩니다. 따라서 매치가 채워지지 않아도 매치에서 각 팀에 유사한 수의 플레이어가할당됩니다. 현재는 라지 매치에서 크기가 동일하게 지정된 팀을 강제 적용할 방법은 없습니다.비대칭적으로 크기가 지정된 팀이 있는 매치의 경우 이 프로세스는 약간 더 복잡합니다. 이 시나리오에서는 플레이어가 처음에는 열려 있는 슬롯이 가장 많은 가장 큰 팀에 할당됩니다. 그런 다음 열려 있는 슬롯 수가 모든 팀 간에 더 공평하게 분산됨에 따라 플레이어가 더 작은 팀에 추가되기 시작합니다.

한 가지 예를 살펴보겠습니다. 세 개의 팀으로 이루어진 규칙 세트가 있다고 가정하겠습니다. Red 팀과 Blue 팀 모두 maxPlayers=10, minPlayers=5로 설정되어 있으며, Green 팀은maxPlayers=3, minPlayers=2로 설정되어 있습니다. 이 매치를 채우는 순서는 다음과 같습니다.

1. 어떤 팀도 minPlayers에 도달하지 않았습니다. Red 팀과 Blue 팀에 열려 있는 슬롯이 10개 있는데 Green 팀에는 3개가 있습니다. 첫 10명의 플레이어(각각 5명)가 Red 팀과 Blue 팀에 할당됩니다. 이제 두 팀 모두 minPlayers에 도달했습니다.

2. Green 팀은 아직 minPlayers에 도달하지 않았습니다. 다음 2명의 플레이어가 Green 팀에 할당됩니다.

3. 이제 모든 팀이 minPlayers에 도달했습니다. Red 팀과 Blue 팀에 열려 있는 슬롯이 가장 많으므로 다음 8명의 플레이어(각각 4명)가 Red 팀과 Blue 팀에 할당됩니다.

4. 세 팀 모두 사용 가능한 열려 있는 슬롯이 한 개 있게 되면 남은 3개의 플레이어 슬롯이 정해진순서 없이 할당됩니다.

버전154

Amazon GameLift 개발자 안내서규칙 세트 빌드

라지 매치에 대한 지연 시간 규칙 설정

라지 매치를 생성하는 작업의 대부분이 밸런싱 플레이어 속성 및 우선 순위 전략을 사용하여 수행되므로 대부분의 사용자 지정 규칙을 사용할 수 없습니다. 그러나 플레이어 지연 시간에 대한하드 제한을 설정하는 규칙을 생성할 수 있습니다.

이 규칙을 생성하려면 latency 규칙 유형을 maxLatency 속성과 함께 사용합니다. 다음은 최대플레이어 지연 시간을 200밀리초로 설정하는 예입니다.

"rules": [{

"name": "player-latency",

"type": "latency",

"maxLatency": 200

}],

라지 매치 요구 사항 완화

스몰 매치의 경우처럼 유효한 매치가 가능하지 않을 때 확장을 사용하여 시간 경과에 따라 매치요구 사항을 완화할 수 있습니다. 라지 매치의 경우 지연 시간 규칙 또는 팀 플레이어 수를 완화하는 옵션이 있습니다.

라지 매치에 자동 매치 채우기를 사용 중인 경우 팀 플레이어 수를 너무 빨리 완화하지는 마십시오. FlexMatch에서는 게임 세션이 시작된 후에만 채우기 요청 생성을 시작합니다. 이는 매치가생성된 후 몇 초 동안 발생하지 않을 수도 있습니다. 해당 시간 동안 FlexMatch는 특히 플레이어수 규칙이 낮게 조정될 때 부분적으로 채워진 여러 새 게임 세션을 생성할 수 있습니다. 따라서결국 필요한 수보다 더 많은 게임 세션이 생성되고 이러한 세션 간에 플레이어가 너무 촘촘하게분산됩니다. 최상의 방법은 플레이어 수 확장의 첫 번째 단계에 더 긴 대기 시간(게임 세션이 시작하기에 충분히 긴 시간)을 지정하는 것입니다. 라지 매치의 경우 채우기 요청에 더 높은 우선순위가 지정되므로 새 게임이 시작되기 전에 새로 들어오는 플레이어는 기존 게임에 배정됩니다.게임에 이상적인 대시 시간을 찾아보는 연습을 해야 할 수도 있습니다.

다음은 초기 대기 시간이 더 긴 Yellow 팀의 플레이어 수를 점진적으로 낮추는 예입니다. 규칙 세트 확장의 대기 시간은 복합 값이 아닌 절대 값임을 명심하십시오. 따라서 첫 번째 확장이 5초에발생하고, 두 번째 확장이 5초 이후인 10초에 발생합니다.

"expansions": [{

"target": "teams[Yellow].minPlayers",

"steps": [{

"waitTimeSeconds": 5,

"value": 8

}, {

"waitTimeSeconds": 10,

"value": 5

}]

}]

(p. 139)에서 자세히 알아보십시오.

이 예제 규칙 세트는 다음 지침에 따라 매치를 생성합니다.

• 최소 요구 사항이 175명의 플레이어인 최대 200명의 플레이어로 이루어진 팀 하나를 생성합니다.• 밸런싱 기준: 유사한 스킬 레벨에 따라 플레이어를 선택합니다. 모든 플레이어는 매칭될 자신의 스킬 레벨

을 보고해야 합니다.• 일괄 처리 선호도: 매치를 생성할 때 유사한 밸런싱 기준에 따라 플레이어를 그룹화합니다.• 지연 시간 규칙: 최대 허용 가능 플레이어 지연 시간을 150밀리초로 설정합니다.• 매치가 신속하게 채워지지 않는 경우 적합한 시간 내에 매치를 완료할 수 있도록 요구 사항을 완화합니다.

• 10초 후에 플레이어가 150명인 팀을 수락합니다.• 12초 후에 최대 허용 가능 지연 시간을 200밀리초로 늘립니다.

버전155

Amazon GameLift 개발자 안내서규칙 세트 빌드

• 15초 후에 플레이어가 100명인 팀을 수락합니다.

이 규칙 세트 사용에 대한 참고 사항:

• 이 알고리즘은 "가장 큰 모집단" 일괄 처리 선호도를 사용하므로 밸런싱 기준에 따라 플레이어가 먼저 정렬됩니다. 따라서 매치는 더 채워지려고 하며 스킬이 더 유사한 플레이어를 포함하려고 합니다. 모든 플레이어는 허용 가능한 지연 시간 요구 사항을 충족하지만 자신의 위치에 대해 최상의 지연 시간을 얻지 못할 수도 있습니다.

• 이 규칙 세트에서 사용되는 알고리즘 전략인 "가장 큰 모집단"이 기본 설정입니다. 기본값을 사용하기 위해이 설정을 생략하도록 선택할 수 있습니다.

• 매치 채우기를 활성화한 경우에는 플레이어 수 요구 사항을 너무 빨리 완화하지 마십시오. 부분적으로 채워진 게임 세션이 너무 많아질 수 있습니다. 라지 매치 요구 사항 완화 (p. 141)에서 자세히 알아보십시오.

{ "name": "free-for-all", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "skill", "type": "number" }], "algorithm": { "balancedAttribute": "skill", "strategy": "balanced", "batchingPreference": "largestPopulation" }, "teams": [{ "name": "Marauders", "maxPlayers": 200, "minPlayers": 175 }], "rules": [{ "name": "low-latency", "description": "Sets maximum acceptable latency", "type": "latency", "maxLatency": 150 }], "expansions": [{ "target": "rules[low-latency].maxLatency", "steps": [{ "waitTimeSeconds": 12, "value": 200 }], "target": "teams[Marauders].minPlayers", "steps": [{ "waitTimeSeconds": 10, "value": 150 }, { "waitTimeSeconds": 15, "value": 100 }] }]}

예제 8: 복수 팀 라지 매치 생성

이 예제에서는 플레이어 수가 40명을 초과할 수 있는 복수 팀의 매치에 대한 규칙 세트를 설정하는 방법을 설명합니다. 이 예제에서는 하나의 정의로 동일한 복수 팀을 생성하는 방법 및 매치를 생성하는 동안 비대칭으로 크기가 지정된 팀을 채우는 방법을 설명합니다.

버전156

Amazon GameLift 개발자 안내서규칙 세트 빌드

이 예제 규칙 세트는 다음 지침에 따라 매치를 생성합니다.

• 플레이어 수가 최대 15명인 동일한 "헌터" 팀 10개와 플레이어 수가 정확하게 5명인 "몬스터" 팀 한 개를생성합니다.

• 밸런싱 기준: 몬스터 처리 수에 따라 플레이어를 선택합니다. 플레이어가 자신의 처리 수를 보고하지 않는경우 기본값인 5를 사용합니다.

• 일괄 처리 선호도: 가장 빠른 플레이어 지연 시간을 보고하는 리전에 따라 플레이어를 그룹화합니다.• 지연 시간 규칙: 최대 허용 가능 플레이어 지연 시간을 200밀리초로 설정합니다.• 매치가 신속하게 채워지지 않는 경우 적합한 시간 내에 매치를 완료할 수 있도록 요구 사항을 완화합니다.

• 15초 후에 플레이어가 10명인 팀을 수락합니다.• 20초 후에 플레이어가 8명인 팀을 수락합니다.

이 규칙 세트 사용에 대한 참고 사항:

• 이 규칙 세트는 잠재적으로 최대 155명의 플레이어를 포함할 수 있는 팀을 정의합니다. 이로 인해 라지 매치가 됩니다. (10 x 15명의 헌터 + 5명의 몬스터 = 155)

• 이 알고리즘은 "가장 빠른 리전" 일괄 처리 선호도를 사용하므로 플레이어가 보다 빠른 지연 시간을 보고하는 리전에 배치되려고 하며 높지만 허용 가능한 지연 시간을 보고하는 리전에는 배치되지 않으려는 경향을보입니다. 동시에 매치에 더 적은 수의 플레이어가 포함될 가능성이 높아지고 밸런싱 기준(몬스터 스킬 수)이 더 다양해질 수도 있습니다.

• 복수 팀 정의(수량 > 1)에 대한 확장이 정의되면 해당 확장이 해당 정의로 생성된 모든 팀에 적용됩니다. 따라서 헌터 팀의 최소 플레이어 설정을 완화함으로써 10개의 헌터 팀 모두가 동등한 영향을 받게 됩니다.

• 이 규칙 세트는 플레이어 지연 시간을 최소화하도록 최적화되어 있으므로 지연 시간 규칙이 허용 가능한연결 옵션이 없는 플레이어를 제외하는 catch-all로 사용됩니다. 이 요구 사항을 완화할 필요가 없습니다.

• 다음은 확장이 적용되기 전에 FlexMatch에서 이 규칙 세트에 대해 매치를 채우는 방법입니다.• 아직 minPlayers 수에 도달한 팀이 없습니다. 헌터 팀의 열린 슬롯은 15개이고 몬스터 팀의 열린 슬롯은

5개입니다.• 첫 100명의 플레이어(10명씩)가 10개의 헌터 팀에 할당됩니다.• 다음 22명의 플레이어가 순차적으로(2명씩) 헌터 팀과 몬스터 팀에 할당됩니다.

• 헌터 팀이 각각 12명의 플레이어인 minPlayers 수에 도달했습니다. 몬스터 팀에 2명의 플레이어가 있으며 아직 minPlayers 수에 도달하지 않았습니다.• 다음 3명의 플레이어가 몬스터 팀에 할당됩니다.

• 모든 팀이 minPlayers 수에 도달했습니다. 헌터 팀에는 각각 3개의 열린 슬롯이 있습니다. 몬스터 팀이채워졌습니다.• 마지막 30명의 플레이어가 순차적으로 헌터 팀에 할당됩니다. 따라서 모든 헌터 팀의 크기가 거의 비

슷해집니다(한 명의 플레이어가 더 많거나 더 적음).• 이 규칙 세트로 생성한 매치에 대한 채우기를 활성화한 경우에는 플레이어 수 요구 사항을 너무 빨리

완화하지 마십시오. 부분적으로 채워진 게임 세션이 너무 많아질 수 있습니다. 라지 매치 요구 사항 완화 (p. 141)에서 자세히 알아보십시오.

{ "name": "monster-hunters", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "monster-kills", "type": "number", "default": 5 }], "algorithm": { "balancedAttribute": "monster-kills", "strategy": "balanced", "batchingPreference": "fastestRegion"

버전157

Amazon GameLift 개발자 안내서이벤트 알림 설정

}, "teams": [{ "name": "Monsters", "maxPlayers": 5, "minPlayers": 5 }, { "name": "Hunters", "maxPlayers": 15, "minPlayers": 12, "quantity": 10 }], "rules": [{ "name": "latency-catchall", "description": "Sets maximum acceptable latency", "type": "latency", "maxLatency": 150 }], "expansions": [{ "target": "teams[Hunters].minPlayers", "steps": [{ "waitTimeSeconds": 15, "value": 10 }, { "waitTimeSeconds": 20, "value": 8 }] }]}

FlexMatch 이벤트 알림 설정게임에서 FlexMatch 매치메이킹을 사용하는 경우, 개별 매치메이킹 요청의 상태를 추적하고 적절히 조치를취할 수 있는 방법이 필요합니다. 때로는 플레이어가 제안된 매치를 수락해야 하는 경우와 같이 이들 조치는시간에 민감합니다. 각 요청 상태를 추적하는 가장 간단한 방법은 DescribeMatchmaking을 사용하여 지속적을 폴링하는 것입니다. 그러나 보다 빠른 해결책으로 알림을 사용하여 매치메이킹 이벤트를 추적하는 것을권장합니다. 이벤트 알림은 설정이 간단하면서도 상당히 빠르고 더 효율적입니다.

이벤트 알림을 설정하는 데는 두 가지 방법이 있습니다. 첫 번째는 이벤트를 관리하고 적절한 조치를 취할 수있는 일단의 도구를 구비한 Amazon CloudWatch Events를 사용하는 것입니다. 아니면 자체 SNS 주제를 설정하고 이를 매치메이커에 연결하여 매치메이킹 이벤트 알림을 직접 수신할 수 있습니다.

FlexMatch에서 내보내는 Amazon GameLift 이벤트 목록은 FlexMatch 매치메이킹 이벤트 (p. 291) 단원을참조하십시오.

CloudWatch 이벤트를 설정합니다.Amazon GameLift는 모든 매치메이킹 이벤트를 CloudWatch 이벤트에 자동으로 게시합니다. CloudWatch이벤트를 사용하면 SNS 주제 및 처리를 위한 기타 AWS 서비스를 포함하여 매치메이킹 이벤트가 광범위한대상에 라우팅되도록 규칙을 설정할 수 있습니다. 예를 들어, "PotentialMatchCreated" 이벤트를 플레이어 수락을 처리하는 AWS Lambda 함수로 라우팅하도록 규칙을 설정할 수 있습니다. CloudWatch 이벤트 사용법에 관한 자세한 정보는 다양한 자습서가 포함되어 있는 시작 안내서를 참조하십시오.

매치메이커를 구성할 때 CloudWatch 이벤트를 사용할 계획이라면 알림 대상을 공란으로 비워 두거나, 두 옵션을 다 사용하려면 SNS 주제를 참조시킬 수 있습니다.

CloudWatch 이벤트에서 Amazon GameLift 매치메이킹 이벤트에 액세스하려면 Amazon CloudWatch콘솔로이동하여 [Events]를 엽니다. 매치메이킹 구성을 설정한 리전이어야 합니다. CloudWatch 이벤트 액세스를위한 계정 자격 증명을 얻는 방법에 관한 자세한 정보는 Amazon CloudWatch 콘솔에 로그인 단원을 참조하십시오. 각 매치메이킹 이벤트는 서비스(GameLift), 매치메이킹 이름 및 매치메이킹 티켓으로 식별됩니다.

버전158

Amazon GameLift 개발자 안내서이벤트 알림 설정

SNS 주제 설정Amazon GameLift 매치메이커에 의해 생성된 모든 이벤트를 FlexMatch(SNS) 주제에 게시하도록 AmazonSimple Notification Service에 요청할 수 있습니다. 매치메이커를 구성할 때 알림 대상을 SNS 주제 ARN으로설정합니다.

Amazon GameLift 이벤트 알림을 위한 SNS 주제 설정

1. Amazon Simple Notification Service콘솔로 이동2. 주제를 생성합니다. SNS 대시보드에서 [Create topic]을 선택하고 지침에 따라 주제를 생성합니다. 주제

가 생성되면 콘솔이 자동으로 새로운 주제에 대한 [Topic details] 페이지를 엽니다.3. Amazon GameLift가 주제를 게시하도록 허용합니다. 주제에 대한 주제 세부 정보 페이지에 있지 않은 경

우, 탐색 표시줄에서 [Topics]를 선택하고 주제의 ARN을 클릭하여 엽니다. 주제 작업 [Edit topic policy]를 선택하고 [Advanced view tab]으로 이동합니다.

아래의 굵은 글씨체 구문을 기존 정책의 말미에 추가합니다. (명확한 이해를 위해 전체 정책이 표시되어있습니다.)

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish", "SNS:Receive" ], "Resource": "arn:aws:sns:your_region:your_account:your_topic_name", "Condition": { "StringEquals": { "AWS:SourceOwner": "your_account" } } }, { "Sid": "__console_pub_0", "Effect": "Allow", "Principal": { "Service": "gamelift.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:your_region:your_account:your_topic_name" } ]}

버전159

Amazon GameLift 개발자 안내서VPC 피어링

GameLift에 대한 VPC 피어링이 주제에서는 GameLift 호스팅 게임 서버와 다른 비 GameLift 리소스 사이의 VPC 피어링 연결을 설정하는방법을 안내합니다. Amazon Virtual Private Cloud(VPC) 피어링 연결을 사용하여 게임 서버에서 웹 서비스,리포지토리 등과 같은 다른 AWS 리소스와 직접 비공개로 통신할 수 있습니다. AWS에서 실행되고 액세스권한이 있는 AWS 계정으로 관리되는 모든 리소스와의 VPC 피어링을 설정할 수 있습니다.

Note

VPC 피어링은 고급 기능입니다. 게임 서버에서 다른 AWS 리소스와 직접 비공개로 통신할 수 있도록 하는 기본 옵션에 대해 알아보려면 플릿에서 AWS 리소스에 액세스 (p. 45) 단원을 참조하십시오.

Amazon VPC 및 VPC 피어링에 대해 잘 알고 있는 경우 GameLift 게임 서버와의 피어링 설정은 약간 다릅니다. 게임 서버(GameLift 서비스로 제어됨)를 포함하고 있는 VPC에 액세스할 수 있는 권한이 없으므로 VPC피어링을 직접 요청할 수 없습니다. 그 대신 비 GameLift 리소스를 포함하는 VPC를 사전 승인하여 GameLift서비스의 피어링 요청을 수락합니다. 그런 다음 방금 승인한 VPC 피어링을 요청하도록 GameLift를 트리거합니다. GameLift는 피어링 연결 생성, 라우팅 테이블 설정 및 연결 구성 작업을 처리합니다.

기존 플릿용 VPC 피어링을 설정하려면1. AWS 계정 ID 및 자격 증명을 가져옵니다.

다음 AWS 계정에 대한 ID 및 로그인 자격 증명이 필요합니다. AWS Management 콘솔에 로그인한 후계정 설정을 확인하여 AWS 계정 ID를 찾을 수 있습니다. 자격 증명을 가져오려면 IAM 콘솔로 이동합니다.

• GameLift 게임 서버를 관리하는 데 사용되는 AWS 계정입니다.• 비 GameLift 리소스를 관리하는 데 사용되는 AWS 계정입니다.

GameLift 리소스와 비 GameLift 리소스에 대해 동일한 계정을 사용할 경우 한 계정에 대해서만 ID와 자격 증명이 필요합니다.

2. 각 VPC에 대한 ID를 가져옵니다.

피어링할 두 VPC에 대해 다음 정보를 가져옵니다.

• GameLift 게임 서버 –용 VPC입니다. 이것은 GameLift 플릿 ID입니다. EC2 인스턴스 플릿의 GameLift에 게임 서버가 배포됩니다. 플릿은 해당 VPC에 자동으로 배치되며 GameLift 서비스에 의해 관리됩니다. VPC에 직접 액세스할 권한이 없어 플릿 ID로 확인됩니다.

• 비 GameLift AWS 리소스용 VPC – AWS에서 실행되고 액세스 권한이 있는 AWS 계정에 의해 관리되는 모든 리소스와의 VPC 피어링을 설정할 수 있습니다. 이러한 리소스에 대한 VPC를 아직 생성하지 않은 경우에는 Amazon VPC 시작하기를 참조하십시오. VPC를 생성한 경우 Amazon VPC용 AWSManagement 콘솔에 로그인한 후 VPC를 확인하여 VPC ID를 찾을 수 있습니다.

Note

피어링을 설정할 때는 두 VPC가 동일한 리전에 있어야 합니다. GameLift 플릿 게임 서버용VPC는 플릿과 동일한 리전에 있습니다.

3. VPC 피어링을 승인합니다.

이 단계에서는 비 GameLift 리소스에 대해 VPC가 있는 게임 서버와 함께 VPC를 피어링하기 위해GameLift에서 향후 요청을 사전 승인합니다. 이 작업은 VPC에 대한 보안 그룹을 업데이트합니다.

버전160

Amazon GameLift 개발자 안내서새 플릿으로 VPC 피어링을 설정하려면

VPC 피어링을 승인하려면 GameLift 서비스 API CreateVpcPeeringAuthorization()을 호출하거나 AWSCLI 명령create-vpc-peering-authorization을 사용합니다. 비 GameLift 리소스를 관리하는 계정을 사용하여 호출합니다. 다음 정보를 식별합니다.

• 피어 VPC ID – 비 GameLift 리소스를 포함하는 VPC를 위한 것입니다.• GameLift AWS 계정 ID – 이것은 GameLift 플릿을 관리하는 데 사용하는 계정입니다.

VPC 피어링을 승인한 경우 별도로 취소하지 않는 한 승인은 24시간 동안 유효합니다. 다음 작업을 사용하여 VPC 피어링 승인을 관리할 수 있습니다.

• DescribeVpcPeeringAuthorizations()(AWS CLI describe-vpc-peering-authorizations).• DeleteVpcPeeringAuthorization()(AWS CLI delete-vpc-peering-authorization).

4. 피어링 연결을 요청합니다.

유효한 승인을 통해 GameLift가 피어링 연결을 설정하도록 요청할 수 있습니다.

VPC 피어링을 요청하려면 GameLift 서비스 API CreateVpcPeeringConnection()을 호출하거나 AWSCLI 명령create-vpc-peering-connection을 사용합니다. GameLift 게임 서버를 관리하는 계정을사용하여 호출합니다. 다음 정보를 사용하여 피어링할 두 VPC를 식별합니다.

• 피어 VPC ID 및 AWS 계정 ID – 이것은 비 GameLift 리소스용 VPC와 해당 VPC를 관리하는 데 사용하는 계정입니다. VPC ID는 유효한 피어링 승인의 ID와 일치해야 합니다.

• 플릿 ID – 이것으로 GameLift 게임 서버용 VPC를 확인합니다.5. 피어링 연결 상태를 추적합니다.

VPC 피어링 연결 요청은 비동기 작업입니다. 피어링 요청의 상태를 추적하여 성공 또는 실패 사례를 처리하려면 다음 옵션 중 하나를 사용합니다.

• DescribeVpcPeeringConnections()를 사용하여 지속적으로 폴링합니다. 이 작업에서는 요청상태를 포함하여 VPC 피어링 연결 기록을 검색합니다. 피어링 연결이 생성된 경우 VPC에 할당되는프라이빗 IP 주소의 CIDR 블록이 연결 기록에 포함되어 있습니다.

• DescribeFleetEvents()를 사용하여 성공 및 실패 이벤트를 비롯한 VPC 피어링 연결과 연관된 플릿 이벤트를 처리합니다.

피어링 연결이 설정되면 다음 작업을 사용하여 관리할 수 있습니다.

• DescribeVpcPeeringConnections()(AWS CLI describe-vpc-peering-connections).• DeleteVpcPeeringConnection()(AWS CLI delete-vpc-peering-connection).

새 플릿으로 VPC 피어링을 설정하려면새 GameLift 플릿을 생성하는 동시에 VPC 피어링 연결을 요청할 수 있습니다.

1. AWS 계정 ID 및 자격 증명을 가져옵니다.

다음 두 AWS 계정에 대한 ID 및 로그인 자격 증명이 필요합니다. AWS Management 콘솔에 로그인한후 계정 설정을 확인하여 AWS 계정 ID를 찾을 수 있습니다. 자격 증명을 가져오려면 IAM 콘솔로 이동합니다.

• GameLift 게임 서버를 관리하는 데 사용되는 AWS 계정입니다.• 비 GameLift 리소스를 관리하는 데 사용되는 AWS 계정입니다.

버전161

Amazon GameLift 개발자 안내서새 플릿으로 VPC 피어링을 설정하려면

GameLift 리소스와 비 GameLift 리소스에 대해 동일한 계정을 사용할 경우 한 계정에 대해서만 ID와 자격 증명이 필요합니다.

2. 비 GameLift AWS 리소스용 VPC ID를 받습니다.

이러한 리소스에 대한 VPC를 아직 생성하지 않았다면 지금 생성하십시오(Amazon VPC 시작하기참조). 새 플릿을 생성할 위치와 동일한 리전에 새 VPC를 생성해야 합니다. 비 GameLift리소스가GameLift에서 사용하는 계정과 다른 AWS 계정 또는 사용자/사용자 그룹에서 관리되는 경우, 다음 단계에서 승인을 요청할 때 이러한 계정 자격 증명을 사용해야 합니다.

VPC를 생성한 후에는 VPC를 확인하여 Amazon VPC 콘솔에서 VPC ID를 찾을 수 있습니다.3. 비 GameLift 리소스와의 VPC 피어링을 승인합니다.

GameLift가 새 플릿과 해당 VPC를 생성할 때 비 GameLift 리소스용 VPC와 피어링하기 위한 요청도 전송합니다. 이 요청을 사전에 승인해야 합니다. 이 단계에서는 VPC에 대한 보안 그룹을 업데이트합니다.

비 GameLift 리소스를 관리하는 계정 자격 증명을 사용하여 GameLift 서비스 APICreateVpcPeeringAuthorization()을 호출하거나 AWS CLI 명령 create-vpc-peering-authorization을 사용합니다. 다음 정보를 식별합니다.

• 피어 VPC ID – 비 GameLift 리소스를 포함하는 VPC의 ID입니다.• GameLift AWS 계정 ID – GameLift 플릿을 관리하는 데 사용하는 계정용 ID입니다.

VPC 피어링을 승인한 경우 별도로 취소하지 않는 한 승인은 24시간 동안 유효합니다. 다음 작업을 사용하여 VPC 피어링 승인을 관리할 수 있습니다.

• DescribeVpcPeeringAuthorizations()(AWS CLI describe-vpc-peering-authorizations).• DeleteVpcPeeringAuthorization()(AWS CLI delete-vpc-peering-authorization).

4. creating a new fleet using the AWS CLI(AWS CLI를 사용하는 새로운 플릿을 생성하기) (p. 101)에 나와 있는 지침을 따릅니다. 다음 추가 파라미터를 포함합니다.

• peer-vpc-aws-account-id – 비 GameLift 리소스와 함께 VPC를 관리할 때 사용하는 계정용 ID입니다.• peer-vpc-id – 비 GameLift 계정이 있는 VPC ID입니다.

VPC 피어링 파라미터로 create-fleet을 성공적으로 호출하여 새로운 플릿 및 VPC 피어링 요청을 생성합니다. 플릿의 상태가 New로 설정되고 플릿 활성화 프로세스가 시작됩니다. 피어링 연결 요청의 상태가initiating-request로 설정됩니다. describe-vpc-peering-connections를 호출하여 피어링 요청이 성공했는지 여부를 추적할 수 있습니다.

새 플릿 및 VPC 피어링 연결을 요청할 경우 두 작업 모두 성공하거나 실패합니다. 생성 프로세스 중에 플릿이 실패할 경우 VPC 피어링이 연결되지 않습니다. 마찬가지로 어떠한 이유로 VPC 피어링 연결이 실패할 경우 새 플릿의 상태가 Activating에서 Active로 전환되지 않습니다.

Note

새로운 VPC 피어링 연결은 플릿이 활성화될 준비가 될 때까지 완료되지 않습니다. 즉, 해당 연결을사용할 수 없으며 게임 서버 빌드 설치 프로세스 중에도 사용할 수 없습니다.

다음 예제에서는 새 플릿을 생성하고 미리 설정된 VPC와 새 플릿의 VPC 간에 피어링 연결을 생성합니다.GameLift가 아닌 AWS 계정 ID와 VPC ID를 조합하여 미리 구출된 VPC를 고유하게 식별합니다.

$ aws gamelift create-fleet --name "My_Fleet_1" --description "The sample test fleet" --ec2-instance-type "c5.large" --fleet-type "ON_DEMAND"

버전162

Amazon GameLift 개발자 안내서VPC 피어링 문제 해결

--build-id "build-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --runtime-configuration "GameSessionActivationTimeoutSeconds=300, MaxConcurrentGameSessionActivations=2, ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe, Parameters=+sv_port 33435 +start_lobby, ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3, PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP" --MetricGroups "EMEAfleets" --peer-vpc-aws-account-id "111122223333" --peer-vpc-id "vpc-a11a11a"

복사 가능 버전:

aws gamelift create-fleet --name "My_Fleet_1" --description "The sample test fleet" --fleet-type "ON_DEMAND" --MetricGroups "EMEAfleets" --build-id "build-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --ec2-instance-type "c5.large" --runtime-configuration "GameSessionActivationTimeoutSeconds=300,MaxConcurrentGameSessionActivations=2,ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe,Parameters=+sv_port 33435 +start_lobby,ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3,PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP" --peer-vpc-aws-account-id "111122223333" --peer-vpc-id "vpc-a11a11a"

VPC 피어링 문제 해결GameLift 게임 서버에 대한 VPC 피어링 연결을 설정하는 데 문제가 있는 경우, 다음과 같은 일반적인 근본원인을 확인하십시오.

• 요청된 연결에 대한 승인을 찾을 수 없습니다.• 비 GameLift VPC에 대한 VPC 승인 상태를 확인합니다. 존재하지 않거나 만료되었을 수 있습니다.• 피어링하려는 두 VPC의 리전을 확인합니다. 동일한 리전에 있지 않으면 피어링할 수 없습니다.

• 두 VPC의 CIDR 블록(잘못된 VPC 피어링 연결 구성 참조)이 중첩되어 있습니다. 피어링된 VPC에 할당되는 IPv4 CIDR 블록은 중첩될 수 없습니다. GameLift 플릿에 대한 VPC의 CIDR 블록은 자동으로 할당되며변경할 수 없으므로 비 GameLift 리소스에 대해 VPC의 CIDR 블록을 변경해야 합니다. 이 문제를 해결하려면:• DescribeVpcPeeringConnections()을 호출하여 해당 GameLift 플릿에 대한 이 CIDR 블록을 조회

합니다.• Amazon VPC 콘솔로 이동하여 비 GameLift 리소스에 대한 VPC를 찾은 다음 중첩되지 않도록 CIDR 블

록을 변경합니다.• 새 플릿이 활성화되지 않았습니다(새 플릿으로 VPC 피어링 요청 시). 새 플릿이 활성 상태로 진행되지 않

으면 피어링할 VPC가 없으므로 피어링 연결이 실패합니다.

버전163

Amazon GameLift 개발자 안내서현재 GameLift 상태 보기

콘솔에서 게임 데이터 보기관리형 GameLift 서비스는 활성 게임의 데이터를 지속적으로 수집하여 플레이어 행동 및 성과를 이해하는데 도움을 줍니다. Amazon GameLift 콘솔을 사용하여 빌드, 집합, 게임 세션 및 플레이어 세션별로 이러한정보를 확인, 관리 및 분석할 수 있습니다.

주제• 현재 Amazon GameLift 상태 보기 (p. 164)• 빌드 보기 (p. 165)• 플릿 보기 (p. 166)• 플릿 세부 정보 보기 (p. 166)• 게임과 플레이어 세션에 대한 데이터 보기 (p. 169)• 별칭 보기 (p. 171)

현재 Amazon GameLift 상태 보기대시보드에 다음 항목을 보여주는 표가 표시됩니다.

• 빌드• 모든 상태의 플릿• 별칭 및 별칭이 가리키는 플릿(있는 경우)

Amazon GameLift 대시보드 열기

• Amazon GameLift콘솔의 메뉴 모음에서 대시보드를 선택합니다.

대시보드에서 다음 작업을 할 수 있습니다.

• 항목 사이의 관계를 확인합니다. 항목 상자 내에서 아무 곳이나 클릭하여 해당 항목과 다른 항목들 사이의관계를 대시보드에 표시합니다. 예를 들어 빌드를 클릭하면 해당 빌드로 생성된 모든 플릿이 표시됩니다.플릿을 클릭하여 생성에 사용된 빌드와 이 플릿이 가리키는 별칭을 확인합니다. 대시보드를 재설정하려면[Reset overview] 버튼을 클릭합니다.

• 빌드, 플릿 또는 별칭의 세부 정보를 확인합니다. 항목의 ID 번호를 클릭하여 세부 정보 페이지를 엽니다.

버전164

Amazon GameLift 개발자 안내서빌드 보기

빌드 보기그 동안 Amazon GameLift에 업로드한 모든 게임 서버 빌드에 대한 정보를 확인하고 원하는 조치를 취할 수있습니다. 표시된 빌드는 선택한 리전에 업로드한 빌드로만 구성됩니다.

빌드 카탈로그업로드한 빌드는 [Builds] 페이지에 표시됩니다. 이 페이지를 보려면 Amazon GameLift 콘솔 메뉴 모음에서Builds를 선택합니다.

[Builds] 페이지에는 모든 빌드에 관한 다음 요약 정보가 수록되어 있습니다.

• Status – 다음 3개 상태 메시지 중 하나를 표시합니다.• Initialized – 빌드가 생성되었으나 아직 업로드가 시작되지 않았거나 현재 진행 중입니다.• Ready – 빌드가 성공적으로 수신되었고 플릿을 만들 준비가 되었습니다.• Failed – 바이너리가 수신되기 전에 빌드 시간을 초과했습니다.

• Build name – 업로드한 빌드에 해당하는 이름입니다. 빌드 이름은 Amazon GameLift에 빌드를 업로드할때 제공되며 AWS SDK 작업 UpdateBuild를 이용해 변경할 수 있습니다.

• Build ID – 업로드 시 빌드에 할당된 고유 ID입니다.• Version – 업로드한 빌드의 버전 레이블입니다. 빌드 이름은 Amazon GameLift에 빌드를 업로드할 때 제공

되며 AWS SDK 작업 UpdateBuild를 이용해 변경할 수 있습니다.• OS – 빌드를 실행하는 운영 체제입니다. 빌드 OS에 따라 플릿의 인스턴스에 설치하는 운영 체제가 결정됩

니다.• Size – Amazon GameLift에 업로드한 빌드 파일의 크기를 메가바이트(MB)로 나타낸 값입니다.• Date created – Amazon GameLift에 빌드를 업로드한 날짜와 시간입니다.• Fleets – 현재 이 빌드로 배포된 집합의 수입니다.

이 페이지에서 다음 작업을 수행할 수 있습니다.

• 빌드에서 새로운 플릿을 만듭니다. 빌드를 선택하고 빌드에서 플릿 생성을 클릭합니다.• 빌드를 삭제합니다. 빌드를 선택하고 빌드 삭제를 클릭합니다.• 빌드 목록을 필터링하고 정렬합니다. 표 맨 위의 컨트롤을 사용합니다.

버전165

Amazon GameLift 개발자 안내서빌드 세부 정보

• 빌드 세부 정보를 봅니다. 빌드 이름을 클릭하여 빌드 세부 정보 페이지를 엽니다.

빌드 세부 정보콘솔 대시보드 또는 [Builds] 페이지에서 빌드 이름을 클릭하여 빌드의 세부 정보 페이지에 액세스합니다.[Build] 세부 정보 페이지에 [Builds] 페이지 내용과 동일한 빌드 요약 정보가 표시됩니다. 빌드로 생성된 플릿목록도 표시됩니다. 이 목록은 빌드로 필터링된 플릿 카탈로그입니다. 여기에는 Fleets 페이지 (p. 166) 내용과 동일한 요약 정보가 표시됩니다.

플릿 보기Amazon GameLift 계정 아래에서 AWS에서 게임을 호스팅하기 위해 생성한 모든 집합 관련 정보를 볼 수 있습니다. 표시된 플릿은 선택한 리전에서 생성된 플릿들만 포함합니다. 플릿 페이지에서 새 플릿을 생성하거나 선택한 플릿 하나에 대한 추가 세부 정보를 볼 수 있습니다. 플릿의 세부 정보 페이지 (p. 166)에는 사용량 정보 및 지표뿐 아니라 게임 세션 및 플레이어 세션 데이터가 포함되어 있으며, 이 페이지에서 플릿 레코드를 편집하거나 플릿을 종료할 수도 있습니다.

[Fleets] 페이지를 보려면 Amazon GameLift 콘솔의 메뉴 모음에서 [Fleets]를 선택합니다.

플릿 페이지에는 기본적으로 다음 요약 정보가 표시됩니다. 설정(기어 모양) 버튼을 사용하여 표시할 정보를사용자 지정할 수 있습니다.

• Status – 플릿의 상태로서, [New], [Downloading], [Building], [Active] 중 하나일 수 있습니다. 플릿은 게임세션을 호스팅하고 플레이어 연결을 허용할 수 있도록 Active 상태에 있어야 합니다.

• Fleet name – 집합에 부여된 표시 이름입니다.• EC2 유형 – 집합 내 인스턴스의 컴퓨팅 용량을 결정하는 Amazon EC2 인스턴스 유형입니다.• OS – 집합 내 각 인스턴스의 운영 체제입니다. 플릿의 OS는 배포된 빌드에 의해 결정됩니다.• 활성 인스턴스 – 플릿에서 사용 중인 EC2 인스턴스 수입니다.• 최대 인스턴스 – 플릿에서 현재 허용되는 EC2 인스턴스의 최대 수입니다. 플릿 세부 정보 페이지의 조정

탭에서 이 값을 구성할 수 있습니다(서비스 제한 내에서).• 게임 세션 – 플릿에서 현재 실행 중인 활성 게임 세션의 수입니다. 데이터는 5분 지연됩니다.• Player sessions – 플릿 내에서 게임 세션에 연결된 플레이어 수입니다. 데이터는 5분 지연됩니다.• Uptime – 플릿이 실행된 총 시간입니다.• Date created – 집합이 생성된 날짜와 시간입니다.

플릿 세부 정보 보기구성 설정, 조정 설정, 측정치, 게임, 플레이어 데이터 등 플릿과 관련된 세부 정보에 액세스할 수 있습니다.콘솔 대시보드에서 또는 [Fleets] 페이지에서 플릿 이름을 클릭하여 [Fleet] 세부 정보 페이지에 액세스합니다.

Fleet 세부 정보 페이지에는 요약 표와 추가 정보가 수록된 탭이 표시됩니다. 이 페이지에서 다음 작업을 수행할 수 있습니다.

• 플릿의 메타데이터와 실행 시간 구성을 업데이트합니다. [Actions: Edit fleet]를 선택합니다.• 플릿 용량 설정을 변경합니다. [Scaling] 페이지에서 [Minimum], [Maximum], [Desired] 인스턴스의 값을 편

집합니다.• Auto-scaling 정책을 설정하거나 변경합니다. [Scaling] 페이지에서 정책을 추가하거나 편집합니다.

버전166

Amazon GameLift 개발자 안내서요약

• 플릿을 종료합니다. [Actions: Terminate fleet]를 선택합니다.

요약요약 테이블에 포함되는 정보는 다음과 같습니다.

• Status – 플릿의 현재 상태로서, New, Downloading, Building, Active일 수 있습니다. 플릿이 활성 상태여야게임 세션을 호스팅하거나 플레이어 연결을 수락할 수 있습니다.

• Fleet ID – 집합에 할당된 고유한 식별자입니다.• EC2 type – 플릿이 생성되었을 때 선택한 Amazon EC2 인스턴스 유형입니다. 플릿의 인스턴스 유형은 플

릿의 각 인스턴스에 사용되는 컴퓨팅 하드웨어와 용량을 지정하고 플릿의 인스턴스 제한을 결정합니다.• OS – 집합 내 각 인스턴스의 운영 체제입니다. 플릿의 OS는 배포된 빌드에 의해 결정됩니다.• Active instances – Active 상태인 인스턴스 수입니다. 이 상태는 현재 게임 세션을 실행 중이거나 게임 세션

을 실행할 준비가 된 상태를 말합니다.• Active servers – 플릿에서 현재 Active 상태에 있는 서버 프로세스 수입니다. 데이터는 5분 지연됩니다.• Active game sessions – 플릿의 인스턴스에서 현재 실행되고 있는 게임 세션 수입니다. 데이터는 5분 지연

됩니다.• Current player sessions – 플릿 전체의 활성 게임 세션에 포함된 총 플레이어 슬롯 수와 현재 연결된 플레

이어 수입니다. 예를 들어 25(연결된 플레이어)/100(가능 플레이어)은 해당 플릿이 75명의 플레이어를 추가 지원할 수 있다는 뜻입니다. 데이터는 5분 지연됩니다.

• Protection – 플릿의 현재 게임 세션 보호 (p. 5) 설정입니다.

Uptime – 집합이 활성 상태로 유지되고 있는 시간입니다.• Date created – 플릿이 생성된 시점을 나타내는 날짜와 시간입니다.

측정치Metrics 탭은 시간 경과에 따른 플릿 측정치를 그래픽으로 보여줍니다.

그래프에 측정 정보 표시하기

1. 그래프 영역의 왼쪽에서 측정치 이름을 하나 이상 클릭하여 그래프 디스플레이에 추가합니다. 꺼지면 지표 이름이 회색으로 표시됩니다. 색상 키를 사용하여 선택한 지표에 대한 그래프의 선을 식별합니다. 개별 지표에 대한 설명은 플릿에 대한 GameLift 지표 (p. 172) 단원을 참조하십시오. 사용할 수 있는 지표범주는 다음과 같습니다.

• 인스턴스 수 – 이 지표는 시간 경과에 따른 인스턴스의 용량 및 사용률 수준 변경을 추적합니다(조정탭에서도 볼 수 있음).

• 게임 – 이 지표는 시간 경과에 따른 게임 세션 수준에서의 플릿 활동 및 사용률을 보여줍니다.• Server processes – 이 측정치는 플릿 전체의 서버 프로세스 상태를 추적합니다. Amazon GameLift 서

비스는 각 활성 서버 프로세스의 상태를 정기적으로 폴링합니다.• 인스턴스 성능 – 이 지표는 플릿의 컴퓨팅 리소스 성능을 반영합니다. 각 지표에 대한 자세한 설명은

EC2 인스턴스 지표를 참조하십시오.2. 그래프 영역 위에 표시된 다음 필터를 사용하여 측정치 데이터의 표시 방식을 변경합니다.

• Data & Period – 날짜 범위를 선택할 수 있는 두 가지 옵션을 제시합니다.• [Relative]를 사용하여 [Last hour], [Last day], [Last week] 등 현재 시간을 기준으로 기간을 선택합니

다.• [Absolute]를 선택하여 임의 시작 및 종료 날짜/시간으로 기간을 지정합니다.

• Granularity – 데이터 포인트를 집계할 시간을 선택합니다.• Refresh rate – 그래프 디스플레이의 업데이트 간격을 선택합니다.

버전167

Amazon GameLift 개발자 안내서이벤트

• 시간대 – 그래프 디스플레이에 사용할 시간 형식으로서, UTC(협정 세계시) 또는 Browser time(브라우저 시간)(현지 시간)을 선택합니다.

• 포인트 표시 – 켜기나 끄기 사이에서 전환하여 별도의 데이터 포인트를 표시하거나(원으로) 선만 표시합니다.

이벤트[Events] 탭은 플릿에 발생한 모든 이벤트의 로그를 이벤트 코드, 메시지, 타임스탬프와 함께 제공합니다. 이벤트 설명을 참조하십시오 Amazon GameLift API 레퍼런스.

확장[Scaling] 탭에는 현재 상태 및 시간 경과에 따른 용량 변화의 그래픽 표현 등 플릿 용량과 관련된 정보가 수록됩니다. 용량 제한을 업데이트하고 auto-scaling을 관리하는 도구도 제공합니다.

현재 및 과거 조정 정보 확인하기

1. [Scaling] 탭의 맨 위로 이동합니다. 이 플릿의 현재 용량 상태가 왼쪽 열에 표시됩니다. 이 값은 다음과같이 정의됩니다.

• Scaling Limits – 이 측정치는 용량 제한의 변경 기록을 추적합니다.• Minimum – 플릿 내에서 유지할 인스턴스 수의 하드 하한입니다. 플릿 용량은 auto-scaling 중에 또

는 원하는 용량이 최소값 미만으로 설정된 경우에도 현재 최소값 미만으로 떨어지지 않습니다.• Desired – 플릿에서 현재 필요한 활성 인스턴스 수입니다. 활성 인스턴스(나중에 설명) 수와 원하는

인스턴스 수를 일치시키고자 합니다. 필요에 따라 인스턴스를 생성하거나 종료하여 이 목표를 달성할 수 있습니다.

• Maximum – 플릿 내에서 유지할 인스턴스 수의 하드 상한입니다. 플릿 용량은 auto-scaling 중에 또는 원하는 용량이 최대값을 초과하여 설정된 경우에도 현재 최대값을 초과하지 않습니다.

• 인스턴스 수 – 이 지표는 시간 경과에 따른 실제 용량 및 사용률 변화를 추적합니다. 개별 지표에 대한설명은 플릿에 대한 GameLift 지표 (p. 172) 단원을 참조하십시오.

2. 시간 경과에 따라 플릿 용량이 어떻게 변화하고 있는지 보려면, 왼쪽에 나열된 모든 조정 측정치를 그래프로 표시합니다. 측정치 이름을 클릭하여 그래프에 추가합니다. (측정치 이름은 사용하지 않는 동안 회색으로 표시됩니다.) 색상 키를 사용해 그래프의 어떤 선이 선택한 측정치와 일치하는지 구별합니다.

3. (선택 사항) 그래프 영역 위에 표시된 다음 필터를 사용하여 그래프상에 측정치 데이터를 어떻게 표시할것인지 지정합니다.

• Data & Period – 날짜 범위를 선택할 수 있는 두 가지 옵션을 제시합니다.• [Relative]를 사용하여 [Last hour], [Last day], [Last week] 등 현재 시간을 기준으로 기간을 선택합니

다.• [Absolute]를 선택하여 임의 시작 및 종료 날짜/시간으로 기간을 지정합니다.

• Granularity – 데이터 포인트를 집계할 시간을 선택합니다.• Refresh rate – 그래프 디스플레이의 업데이트 간격을 선택합니다.• Format – 그래프 디스플레이에 사용할 시간 형식으로서, [UTC](협정 세계시) 또는 [Browser time](현

지 시간)을 선택합니다.• 포인트 표시 – 켜기나 끄기 사이에서 전환하여 별도의 데이터 포인트를 표시하거나(원으로) 선만 표시

합니다.

플릿 용량 변경하기

• 기록 그래프 아래에는 용량 제한 설정 및 용량 조정 도구가 있습니다. 이러한 도구 사용에 대한 자세한내용은 GameLift 플릿에서 수동으로 용량 설정 (p. 118) 단원을 참조하십시오. Auto-scaling에 대한 자세한 내용은 GameLift를 통해 플릿 용량 Auto-Scale (p. 119)를 참조하십시오.

버전168

Amazon GameLift 개발자 안내서게임 세션

게임 세션게임 세션 탭에는 플릿에서 호스팅되는 과거와 현재 게임 세션이 세부 정보와 함께 나열됩니다. 게임 세션 ID를 클릭하여 플레이어 세션을 포함한 추가 게임 세션 정보에 액세스합니다.

• Status – 게임 세션 상태입니다. 유효한 상태는 다음과 같습니다.• Activating – 게임 세션이 개시되었고 실행을 준비 중입니다.• Active – 게임 세션이 실행 중이며 플레이어를 수락할 수 있습니다(세션의 플레이어 생성 정책에 따라).• Terminated – 게임 세션이 끝났습니다.

• Name – 게임 세션에 생성된 게임입니다.• ID –가 Amazon GameLift게임 세션에 할당한 고유한 식별자입니다.• IP address – 게임 세션에 지정된 IP 주소입니다.• Port – 게임 세션에 연결하는 데 사용되는 포트 번호입니다.• Player sessions – 게임 세션에 연결된 플레이어 수와 게임 세션이 지원할 수 있는 총 플레이어 수입니다.

예를 들어 2(연결된 플레이어)/10(가능 플레이어)은 해당 플릿이 8명의 플레이어를 추가 지원할 수 있다는뜻입니다.

• Uptime – 게임 세션이 실행된 총 시간입니다.• Date created – 플릿이 생성된 시점을 나타내는 날짜와 타임스탬프입니다.

빌드[Build] 탭에는 플릿을 생성할 때 설정한 플릿의 빌드 관련 구성이 표시됩니다. 빌드 ID를 선택하여 전체[Build] 세부 정보 페이지를 확인합니다.

빌드가 삭제되었거나 빌드를 가져오는 동안 오류가 발생한 경우 다음 상태 메시지 중 하나가 표시될 수 있습니다.

• Deleted – 이 집합의 빌드가 삭제되었습니다. 빌드가 삭제되더라도 플릿은 계속 정상적으로 실행됩니다.• Error – 플릿의 빌드 정보 가져오기를 시도하는 동안 오류가 발생했습니다.

용량 할당Capacity allocation 탭에는 각 인스턴스를 어떤 서버 프로세스가 어떻게 시작할 것인지 지정하는 플릿의 실행 시간 구성이 표시됩니다. 여기에는 게임 서버 실행 파일의 경로와 시작 파라미터 옵션이 포함됩니다. 콘솔에서 플릿을 편집하거나 AWS CLI를 이용해 실행 시간 구성을 업데이트하여 플릿의 용량 할당을 변경할 수있습니다.

포트[Ports] 탭에는 IP 주소와 포트 설정 범위를 비롯해 플릿의 연결 권한이 표시됩니다. 콘솔에서 집합을 편집하거나 AWS CLI를 이용해 집합의 포트 설정을 업데이트하여 연결 권한을 변경할 수 있습니다.

ARNARN 탭에는 이 플릿에 할당된 Amazon 리소스 이름(ARN)이 나열됩니다.

게임과 플레이어 세션에 대한 데이터 보기플릿에서 실행 중인 게임과 개별 플레이어에 대한 정보를 볼 수 있습니다. 게임 세션 및 플레이어 세션에 대한 자세한 내용은 플레이어의 게임 연결 방법 (p. 11) 단원을 참조하십시오.

버전169

Amazon GameLift 개발자 안내서게임 세션

게임 세션 데이터 보기

1. Amazon GameLift콘솔에서 원하는 집합의 세부 정보 페이지를 엽니다. (메뉴 모음에서 [Fleets]를 선택하고 플릿 이름을 클릭합니다.)

2. [Game sessions ] 탭을 엽니다. 이 탭에는 요약 정보와 함께 플릿에서 호스팅되는 모든 게임 세션이 나열됩니다.

3. 게임 세션을 클릭하여 게임 세션에 관한 추가 정보와 이 게임에 연결했던 플레이어 목록을 확인합니다.

게임 세션게임 세션 정보 요약은 페이지 맨 위에 표시되며 다음을 포함합니다.

• Status – 게임 세션의 상태입니다. 유효한 상태로는 다음이 포함됩니다.• Activating – Amazon GameLift는 게임 세션을 만들고 게임 속성을 게임 서버 프로세스에 전달했습니다.

게임 서버가 게임 속성을 해석하고 플레이어 세션을 연결할 준비가 되면 Amazon GameLift를 콜백합니다.

• Active – 게임 세션은 0 이상의 플레이어 세션을 연결하여 게임 플레이를 지원할 수 있습니다.• Terminated – 게임 세션이 종료되었고 종료된 게임 세션에 대한 플레이어 세션 연결이 더 이상 허용되지

않습니다.• Name – 게임 세션의 이름이 자동으로 생성됩니다.• IP address – [Activating] 또는 [Active] 상태에 있는 게임 세션의 경우, 게임에 연결하는 데 사용되는 IP 주

소입니다.• Port – 게임 세션에 연결하는 데 사용되는 포트 번호입니다.• Player sessions – 현재 게임 세션에 연결된 플레이어 수와 게임 세션 내 총 플레이어 슬롯 수입니다. 예를

들어 [10 of 15] 값은 게임에 사용할 수 있는 슬롯은 15개이고 10개가 채워져 있으며 5개가 열려 있음을 뜻합니다.

• Player session creation policy – 새로운 플레이어를 게임에 연결할 수 있는지 결정하는 정책입니다. 값은[Accept all] 또는 [Deny all]입니다. 자세한 내용은 GameSession 객체를 참조하십시오.

• Uptime – 게임 세션이 실행된 총 시간입니다.• Date created – 게임 세션이 생성된 날짜와 시간입니다.

플레이어 세션각 게임 세션에 대해 다음 플레이어 세션 데이터가 수집됩니다.

• Status – 플레이어 세션의 상태입니다. 옵션에는 다음이 포함됩니다.• Reserved – 플레이어 세션이 예약되었으나 플레이어가 아직 연결되지 않았습니다.• Active – 현재 플레이어 세션이 게임 서버에 연결되어 있습니다.• Completed – 플레이어 세션이 종료되었으며 더 이상 플레이어가 연결되지 않습니다.• Timed Out – 플레이어 세션이 예약되었으나 플레이어가 연결에 실패했습니다.

• ID – 플레이어 세션에 할당된 식별자입니다.• Player ID – 플레이어의 고유 식별자입니다. 이 ID를 클릭하여 플레이어에 대한 추가 정보를 얻습니다.• Start time – 플레이어가 게임 세션에 연결된 시간입니다.• End time – 플레이어가 게임 세션 연결을 해제한 시간입니다.• Total time – 플레이어가 플레이어 세션에 활성 상태로 머무른 시간입니다.

버전170

Amazon GameLift 개발자 안내서플레이어 정보

플레이어 정보플레이어가 현재 리전의 모든 플릿에 걸쳐 연결한 모든 게임의 목록 등, 선택한 플레이어에 관한 추가 정보를확인합니다. 이 정보에는 상태, 시작 시간과 종료 시간, 각 플레이어 세션별 총 연결 시간이 포함됩니다. 관련게임 세션과 플릿의 데이터를 클릭하여 볼 수 있습니다.

별칭 보기[Aliases] 페이지에서 그동안 만든 모든 플릿 별칭에 대한 정보를 보고 원하는 조치를 취할 수 있습니다. 표시된 별칭은 선택한 리전에 대해 생성된 별칭들만 포함합니다.

별칭 카탈로그생성된 모든 별칭은 [Aliases] 카탈로그 페이지에 표시됩니다. Aliases 페이지를 보려면 Amazon GameLift 콘솔의 메뉴 모음에서 Aliases를 선택합니다.

[Aliases] 페이지에는 유형을 포함해 모든 빌드에 관한 요약 정보가 수록되어 있습니다. 이 페이지에서 다음을 수행할 수 있습니다.

• Create a new alias. Create alias 를 클릭합니다.• 별칭 목록을 필터링하고 정렬합니다. 표 맨 위의 컨트롤을 사용합니다.• 별칭 세부 정보를 봅니다. 별칭 이름을 클릭하여 별칭 세부 정보 페이지를 엽니다.

별칭 세부 정보콘솔 대시보드 또는 [Aliases] 카탈로그 페이지에서 별칭 이름을 클릭하여 [Aliases] 세부 정보 페이지에 액세스합니다. [Aliases] 세부 정보 페이지에는 별칭에 관한 요약 정보가 표시됩니다.

이 페이지에서 다음을 수행할 수 있습니다.

• 별칭의 이름, 설명, 연결된 플릿 ID를 변경하는 등, 별칭을 편집합니다. [Actions: Edit alias]를 클릭합니다.• 현재 별칭에 연결된 플릿에 관한 정보를 봅니다. 여기에는 플릿의 상태와 현재 사용률(활성 게임 세션 및

플레이어)이 포함됩니다.• 별칭을 삭제합니다. [Actions: Delete alias]를 클릭합니다.

별칭 세부 정보에 포함된 내용은 다음과 같습니다.

• Type – 다음 항목으로 구성된 별칭의 라우팅 옵션입니다.• Simple – simple 별칭은 플레이어를 연결된 플릿의 게임으로 라우팅합니다. 언제든 별칭이 다른 플릿을

가리키도록 업데이트할 수 있습니다.• Terminal – terminal 별칭은 집합을 가리키지 않습니다. 대신, 메시지를 클라이언트로 다시 전달합니다.

이 별칭 유형은 게임 서버 집합을 더 이상 사용할 수 없을 때 플레이어에게 안전하게 알리는 데 유용합니다. 예를 들어 terminal 별칭은 플레이어에게 게임 클라이언트의 날짜가 만료되었음을 알리고 업그레이드 옵션을 제공할 수 있습니다.

• Alias ID – 별칭을 식별하는 데 사용되는 고유 번호입니다.• Description – 별칭에 대한 설명입니다.• Date created – 별칭이 생성된 날짜와 시간입니다.

버전171

Amazon GameLift 개발자 안내서CloudWatch로 모니터링

Amazon GameLift 모니터링Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

모니터링은 Amazon GameLift와 다른 AWS 솔루션의 안정성, 가용성 및 성능을 유지하는 데 있어서 중요한부분입니다. Amazon GameLift로 측정치를 사용하는 주요한 용도는 세 가지인데, 시스템 상태 모니터링 및경보 설정, 게임 서버 성능 및 사용량 추적, 그리고 수동 또는 자동 조정을 통한 용량 관리입니다.

AWS는 Amazon GameLift을(를) 관찰하고, 문제 발생 시 보고하고, 적절한 경우 자동 조치를 취하는 다음과같은 모니터링 도구를 제공합니다.

• Amazon GameLift 콘솔• Amazon CloudWatch -– 기타 AWS 클라우드 리소스와 AWS 서비스 상에서 실행하는 애플리케이션에 대

한 측정치뿐만 아니라 Amazon GameLift 측정치를 실시간으로 모니터링할 수 있습니다. CloudWatch는 사용자 지정 대시보드를 생성하는 도구와 측정치가 정해진 임계치에 도달하면 알림을 전송하거나 조치를 취하도록 경보를 설정하는 기능을 포함한 다양한 모니터링 기능을 제공합니다.

• AWS CloudTrail –는 Amazon GameLift 및 기타 AWS 서비스에 대해 AWS 계정에 의해 혹은 대신하여 이루어지는 모든 API 호출 및 관련 이벤트를 포착합니다. 데이터는 지정한 Amazon S3 버킷에 로그 파일로전송됩니다. 어떤 사용자 및 계정이 AWS를 호출했는지, 어떤 소스 IP 주소에 호출이 이루어졌는지, 언제호출이 발생했는지 확인할 수 있습니다.

주제• Amazon CloudWatch를 사용한 GameLift 모니터링 (p. 172)• AWS CloudTrail을 사용하여 Amazon GameLift API 호출 로깅 (p. 183)

Amazon CloudWatch를 사용한 GameLift 모니터링Amazon CloudWatch(원시 데이터를 수집하여 읽기 가능하고 실시간에 가까운 지표로 처리하는 AWS 서비스)를 사용하여 GameLift를 모니터링합니다. 이러한 통계는 GameLift를 통해 호스팅하는 게임 서버가 어떻게 실행되고 있는지에 대한 기록 데이터를 제공하기 위해 15개월간 보관됩니다. 특정 임계값을 주시하다가해당 임계값이 충족될 때 알림을 전송하거나 조치를 취하도록 경보를 설정할 수 있습니다. 자세한 정보는Amazon CloudWatch 사용 설명서를 참조하십시오.

다음 표는 GameLift에서 사용 가능한 지표와 차원을 열거한 것입니다. CloudWatch에서 사용할 수 있는 모든지표는 GameLift 콘솔에서 사용할 수 있으며, 이를 통해 데이터를 여러 개의 사용자 지정할 수 있는 그래프로제공합니다. 게임의 CloudWatch 지표에 액세스하려면 AWS Management 콘솔, AWS CLI 또는 CloudWatchAPI를 사용합니다.

플릿에 대한 GameLift 지표AWS/GameLift 네임스페이스에는 플릿 또는 플릿 그룹에서 다음과 같은 활동 관련 지표가 포함되어 있습니다. 플릿은 관리형 GameLift 솔루션과 함께 사용됩니다. GameLift 서비스는 1분마다 CloudWatch로 지표를전송합니다.

Instances

지표 설명

ActiveInstances 활성 서버 프로세스가 실행 중인 것을 의미하는 ACTIVE상태의 인스턴스 수. 여기에는 유휴 상태의 인스턴스와 게

버전172

Amazon GameLift 개발자 안내서플릿에 대한 GameLift 지표

지표 설명임 세션을 하나 이상 호스팅하고 있는 인스턴스도 포함됩니다. 이 지표는 현재 총 인스턴스 용량을 측정하기 때문에Auto Scaling에 사용할 수 있습니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

DesiredInstances GameLift가 플릿에서 유지 관리하기 위해 작업 중인 목표 활성 인스턴스 수. Auto Scaling 기능을 사용할 경우 이값은 현재 적용 중인 조정 정책에 따라 결정됩니다. AutoScaling 기능을 사용하지 않을 때는 수동으로 값을 설정해야 합니다. 플릿 지표 그룹의 데이터를 확인할 때는 이 지표를 사용하지 못합니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

IdleInstances 현재 0개의 게임 세션을 호스팅하고 있는 활성 인스턴스수. 이 지표는 사용할 수는 있지만 아직 미사용 중인 용량을 측정합니다. Auto Scaling에 사용할 수 있습니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

MaxInstances 플릿에 허용되는 최대 인스턴스 수. 플릿의 최대 인스턴스수에 따라 수동 또는 자동 확장 시 최대 용량이 결정됩니다. 플릿 지표 그룹의 데이터를 확인할 때는 이 지표를 사용하지 못합니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

MinInstances 플릿에 허용되는 최소 인스턴스 수. 플릿의 최소 인스턴스수에 따라 수동 또는 자동 축소 시 최소 용량이 결정됩니다. 플릿 지표 그룹의 데이터를 확인할 때는 이 지표를 사용하지 못합니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

PercentIdleInstances 유휴 상태인 모든 활성 인스턴스의 비율(IdleInstances / ActiveInstances로 계산). 이 지표는 Auto Scaling에 사용할 수 있습니다.

단위: 백분율

상대적 CloudWatch 통계: Average, Minimum, Maximum

버전173

Amazon GameLift 개발자 안내서플릿에 대한 GameLift 지표

지표 설명

InstanceInterruptions 중단된 스팟 인스턴스의 수.

단위: 개수

상대적 CloudWatch 통계: Sum, Average, Minimum,Maximum

서버 프로세스

지표 설명

ActiveServerProcesses 현재 실행 중이며, 게임 세션을 호스팅할 수 있다는 것을의미하는 ACTIVE 상태의 서버 프로세스 수. 여기에는 유휴 상태의 서버 프로세스와 게임 세션을 호스팅하고 있는서버 프로세스도 포함됩니다. 이 지표는 현재 총 서버 프로세스 용량을 측정합니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

HealthyServerProcesses 정상 상태를 보고하고 있는 활성 서버 프로세스 수. 이 지표는 플릿의 전반적인 게임 서버 상태를 추적하는 데 유용합니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

PercentHealthyServerProcesses 정상 상태를 보고하고 있는 모든 활성 서버 프로세스의 비율(HealthyServerProcesses /ActiveServerProcesses로 계산).

단위: 백분율

상대적 CloudWatch 통계: Average, Minimum, Maximum

ServerProcessAbnormalTerminations 마지막 보고 이후 비정상적인 환경으로 인해 종료된 서버프로세스 수. 이 지표에는 GameLift 서비스에서 시작되었다가 종료된 서버 프로세스도 포함됩니다. 이러한 경우는서버 프로세스가 응답을 멈추거나, 계속해서 상태 검사 실패를 보고하거나, ProcessEnding() 호출을 통해 정상적으로 종료되지 않았을 때 발생합니다.

단위: 개수

상대적 CloudWatch 통계: Sum, Average, Minimum,Maximum

ServerProcessActivations 마지막 보고 이후 상태가 ACTIVATING에서 ACTIVE로 전환된 서버 프로세스 수. 서버 프로세스는 활성 상태가 되어야만 게임 세션을 호스팅할 수 있습니다.

단위: 개수

버전174

Amazon GameLift 개발자 안내서플릿에 대한 GameLift 지표

지표 설명상대적 CloudWatch 통계: Sum, Average, Minimum,Maximum

ServerProcessTerminations 마지막 보고 이후 종료된 서버 프로세스 수. 여기에는 정상적인 프로세스 종료와 비정상적인 프로세스 종료를 포함하여 어떤 이유든지 TERMINATED 상태로 전환된 서버 프로세스가 모두 포함됩니다.

단위: 개수

상대적 CloudWatch 통계: Sum, Average, Minimum,Maximum

게임 세션

지표 설명

ActivatingGameSessions 시작 진행 중인 것을 의미하는 ACTIVATING 상태의 게임세션 수. 게임 세션은 활성 상태가 되어야만 플레이어를 호스팅할 수 있습니다. 일정 시간 높은 수를 유지할 경우 게임 세션이 ACTIVATING에서 ACTIVE 상태로 전환되지 않는 것을 의미할 수도 있습니다. Auto Scaling에 사용할 수있습니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

ActiveGameSessions 플레이어를 호스팅할 수 있으며, 0명 이상의 플레이어를호스팅하고 있다는 것을 의미하는 ACTIVE 상태의 게임세션 수. 이 지표는 현재 호스팅 중인 총 게임 세션 수를 측정합니다. Auto Scaling에 사용할 수 있습니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

AvailableGameSessions 정상 상태의 활성 서버 프로세스에서 아직 사용 중이지 않은 게임 세션 슬롯 수. 이 지표는 즉시 시작할 수 있는 새로운 게임 세션 수를 측정합니다. Auto Scaling에 사용할 수있습니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

PercentAvailableGameSessions 모든 활성 서버 프로세스(정상 또는 비정상)에서 아직 사용 중이지 않은 게임 세션 슬롯의 비율(AvailableGameSessions /[ActiveGameSessions +AvailableGameSessions + unhealthy serverprocesses]로 계산). Auto Scaling에 사용할 수 있습니다.

단위: 백분율

버전175

Amazon GameLift 개발자 안내서대기열에 대한 GameLift 지표

지표 설명관련 CloudWatch 통계: Average

GameSessionInterruptions 중단된 스팟 인스턴스의 게임 세션 수

단위: 개수

상대적 CloudWatch 통계: Sum, Average, Minimum,Maximum

플레이어 세션

지표 설명

CurrentPlayerSessions ACTIVE 상태(플레이어가 활성 게임 세션에 연결된 상태)이거나, 혹은 RESERVED 상태(플레이어에게 게임 세션슬롯이 할당되었지만 아직 연결되지 않은 상태)인 플레이어 세션 수. Auto Scaling에 사용할 수 있습니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum

PlayerSessionActivations 마지막 보고 이후 상태가 RESERVED에서 ACTIVE로 전환된 플레이어 세션 수. 이러한 경우는 플레이어가 활성 게임 세션에 성공적으로 연결되었을 때 발생합니다.

단위: 개수

상대적 CloudWatch 통계: Sum, Average, Minimum,Maximum

대기열에 대한 GameLift 지표GameLift 네임스페이스에는 게임 세션 배치 대기열에서 다음과 같은 활동 관련 지표가 포함되어 있습니다.대기열은 관리형 GameLift 솔루션과 함께 사용됩니다. GameLift 서비스는 1분마다 CloudWatch로 지표를 전송합니다.

지표 설명

AverageWaitTime 대기열에서 상태가 PENDING인 게임 세션 배치 요청이 실행될 때까지 기다린 평균 대기 시간

단위: 초

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

FirstChoiceNotViable 성공적으로 위치된 게임 세션은 첫 번째 선택 플릿에 위치하지 않습니다. 이 플릿이 (고 간섭 속도를 갖는 스팟 집합처럼) 실행 가능하지 않다고 여겨지기 때문입니다. 첫번째 선택 플릿은 대기열에 있는 첫 번째 플릿이거나, 배치 요청에 플레이어 지연 시간 데이터가 포함되는 경우FleetIQ prioritization을 통해 선택한 첫 번째 플릿입니다.

버전176

Amazon GameLift 개발자 안내서대기열에 대한 GameLift 지표

지표 설명단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

FirstChoiceOutOfCapacity 성공적으로 위치된 게임 세션은 첫 번째 선택 플릿에 위치하지 않습니다. 이 플릿이 가능한 리소스가 없기 때문입니다. 첫 번째 선택 플릿은 대기열에 있는 첫 번째 플릿이거나, 배치 요청에 플레이어 지연 시간 데이터가 포함되는 경우 FleetIQ prioritization을 통해 선택한 첫 번째 플릿입니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

LowestLatencyPlacement 게임 세션은 플레이어의 대기열 최저 가능 지연 시간을 제공하는 리전에 성공적으로 배치됩니다. 이 지표는 FleetIQprioritization을 트리거하는 배치 요청에 플레이어 지연 시간 데이터가 포함되는 경우에만 생성됩니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

LowestPricePlacement 선택한 리전에 대해 대기열의 가능한 최저 가격으로플릿에 성공적으로 배치된 게임 세션입니다. (FleetIQprioritization은 먼저 플레이어의 지연 시간이 최저인 리전을 선택한 다음 해당 리전 내에서 최저 가격을 찾습니다.)이 플릿은 스팟 집합이거나 대기열이 스팟 인스턴스가 없을 경우 온디맨드 인스턴스일 수 있습니다. 이 지표는 배치요청에 플레이어 지연 시간 데이터가 포함되는 경우에만생성됩니다.

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

Placement <region name> 게임 세션은 특정 리전에 위치한 플릿에 성공적으로 배치됩니다. 이 지표는 리전에 따라 PlacementsSucceeded지표를 나눕니다.

단위: 개수

관련 CloudWatch 통계: Sum

PlacementsCanceled 마지막 보고 이후 시간 초과 이전에 취소된 게임 세션 배치요청 수

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

버전177

Amazon GameLift 개발자 안내서매치메이킹에 대한 GameLift 지표

지표 설명

PlacementsFailed 마지막 보고 이후 모든 이유에 따라 실패한 게임 세션 배치요청 수

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

PlacementsStarted 마지막 보고 이후 대기열에 새롭게 추가된 게임 세션 배치요청 수

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

PlacementsSucceeded 마지막 보고 이후 새로운 게임 세션까지 이어진 게임 세션배치 요청 수

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

PlacementsTimedOut 마지막 보고 이후 대기열의 시간 제한에 걸려 실행되지 못한 게임 세션 배치 요청 수

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

QueueDepth 대기열에서 상태가 PENDING인 게임 세션 배치 요청 수

단위: 개수

상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

매치메이킹에 대한 GameLift 지표GameLift 네임스페이스에는 매치메이킹 구성 및 매치메이킹 규칙에 대한 FlexMatch 활동과 관련한 지표가포함되어 있습니다. FlexMatch 매치메이킹은 관리형 GameLift 솔루션과 함께 사용됩니다. GameLift 서비스는 1분마다 CloudWatch로 지표를 전송합니다.

매치메이킹 작업의 시퀀스에 대한 자세한 내용은 Amazon GameLift FlexMatch 작동 방식을 참조하십시오.

매치메이킹 구성

지표 설명

CurrentTickets 현재 처리되고 있거나 처리 대기 중인 매치메이킹 요청입니다.

단위: 개수

버전178

Amazon GameLift 개발자 안내서매치메이킹에 대한 GameLift 지표

지표 설명상대적 CloudWatch 통계: Average, Minimum, Maximum,Sum

MatchAcceptancesTimedOut 수락을 요구하는 매치메이킹 구성의 경우, 마지막 보고 이후 수락 과정에서 시간을 초과한 잠재적 매치입니다.

단위: 개수

관련 CloudWatch 통계: Sum

MatchesAccepted 수락을 요구하는 매치메이킹 구성의 경우, 마지막 보고 이후 수락된 잠재적 매치입니다.

단위: 개수

관련 CloudWatch 통계: Sum

MatchesCreated 마지막 보고 이후 생성된 잠재적 매치입니다.

단위: 개수

관련 CloudWatch 통계: Sum

MatchesPlaced 마지막 보고 이후 게임 세션에 성공적으로 배치된 매치입니다.

단위: 개수

관련 CloudWatch 통계: Sum

MatchesRejected 수락을 요구하는 매치메이킹 구성의 경우, 마지막 보고 이후 적어도 한 명의 플레이어에 의해 거부된 잠재적 매치입니다.

단위: 개수

관련 CloudWatch 통계: Sum

PlayersStarted 마지막 보고 이후 추가된 매치메이킹 티켓의 플레이어입니다.

단위: 개수

관련 CloudWatch 통계: Sum

TicketsFailed 마지막 보고 이후 매치 실패로 이어진 매치메이킹 요청입니다.

단위: 개수

관련 CloudWatch 통계: Sum

TicketsStarted 마지막 보고 이후 생성된 신규 매치메이킹 요청입니다.

단위: 개수

관련 CloudWatch 통계: Sum

버전179

Amazon GameLift 개발자 안내서매치메이킹에 대한 GameLift 지표

지표 설명

TicketsTimedOut 마지막 보고 이후 타임아웃 한도에 도달한 매치메이킹 요청입니다.

단위: 개수

관련 CloudWatch 통계: Sum

TimeToMatch 마지막 보고 이전에 취소된 잠재적 매치에 보내진 매치메이킹 요청의 경우, 티켓 생성과 잠재적 매치 생성 간의 시간차입니다.

단위: 초

관련 CloudWatch 통계: Data Samples, Average,Minimum, Maximum, p99

TimeToTicketCancel 마지막 보고 이전에 취소된 매치메이킹 요청의 경우, 티켓생성과 취소 간의 시간차입니다.

단위: 초

관련 CloudWatch 통계: Data Samples, Average,Minimum, Maximum, p99

TimeToTicketSuccess 마지막 보고 이전에 성공한 매치메이킹 요청의 경우, 티켓생성과 성공한 매치 배치 간의 시간차입니다.

단위: 초

관련 CloudWatch 통계: Data Samples, Average,Minimum, Maximum, p99

매치메이킹 규칙

지표 설명

RuleEvaluationsPassed 마지막 보고 이후 통과된 매치메이킹 프로세스 동안의 규칙 평가입니다. 이 지표는 상위 50개 규칙으로 제한됩니다.

단위: 개수

관련 CloudWatch 통계: Sum

RuleEvaluationsFailed 마지막 보고 이후 실패한 매치메이킹 동안의 규칙 평가입니다. 이 지표는 상위 50개 규칙으로 제한됩니다.

단위: 개수

관련 CloudWatch 통계: Sum

버전180

Amazon GameLift 개발자 안내서FleetIQ에 대한 GameLift 지표

FleetIQ에 대한 GameLift 지표GameLift 네임스페이스에는 게임 호스팅을 위한 FleetIQ 독립형 솔루션의 일부로서 FleetIQ게임 서버 그룹및 게임 서버 활동에 대한 지표가 포함되어 있습니다. GameLift 서비스는 1분마다 CloudWatch로 지표를 전송합니다. 또한 Amazon EC2 Auto Scaling 사용 설명서에서 Amazon CloudWatch를 사용하여 Auto-scaling그룹 및 인스턴스 모니터링을 참조하십시오.

독립 실행형 솔루션으로서 FleetIQ에 대한 자세한 내용은 GameLift FleetIQ 가이드[공개 미리 보기] (p. 186) 단원을 참조하십시오.

지표 설명

AvailableGameServers 게임을 실행하는 데 사용할 수 있고 현재 게임 플레이로 점유되지 않은 게임 서버 수입니다. 여기에는 클레임되었지만 아직 AVAILABLE 상태인 게임 서버도 포함됩니다.

단위: 개수

관련 CloudWatch 통계: Sum

차원: GameServerGroup

UtilizedGameServers 현재 게임 플레이로 점유된 게임 서버 수입니다. 이 숫자에는 UTILIZED 상태인 게임 서버가 포함됩니다.

단위: 개수

관련 CloudWatch 통계: Sum

차원: GameServerGroup

DrainingAvailableGameServers 현재 게임 플레이를 지원하지 않으며 종료 예정된 인스턴스의 게임 서버 수입니다. 이러한 게임 서버는 새 클레임요청에 대한 응답으로 클레임되는 우선 순위가 가장 낮습니다.

단위: 개수

관련 CloudWatch 통계: Sum

차원: GameServerGroup

DrainingUtilizedGameServers 현재 게임 플레이를 지원하며 종료 예정된 인스턴스의 게임 서버 수입니다.

단위: 개수

관련 CloudWatch 통계: Sum

차원: GameServerGroup

PercentUtilizedGameServers 현재 게임 실행을 지원하는 게임 서버의 비율입니다. 이 지표는 현재 사용 중인 게임 서버 용량을 나타냅니다. 플레이어 수요에 맞게 인스턴스를 동적으로 추가 및 제거할 수 있는 Auto Scaling 정책을 실행하는 데 유용합니다.

단위: 백분율

상대적 CloudWatch 통계: Average, Minimum, Maximum

버전181

Amazon GameLift 개발자 안내서GameLift 지표 차원

지표 설명차원: GameServerGroup

GameServerInterruptions 제한된 스팟 가용성으로 인해 중단된 스팟 인스턴스의 게임 서버입니다.

단위: 개수

관련 CloudWatch 통계: Sum

차원: GameServerGroup, InstanceType

InstanceInterruptions 제한된 가용성으로 인해 중단된 스팟 인스턴스입니다.

단위: 개수

관련 CloudWatch 통계: Sum

차원: GameServerGroup, InstanceType

GameLift 지표 차원GameLift는 다음 차원을 기준으로 지표 필터링을 지원합니다.

차원 설명

FleetId 단일 플릿에 대한 지표를 필터링합니다. 이 차원은 인스턴스, 서버 프로세스, 게임 세션 및 플레이어 세션에 대한 모든 플릿 지표에 사용할 수 있습니다.

MetricGroup 플릿 모음에 대한 지표를 필터링합니다. 지표 그룹 이름을 플릿 속성에 추가하면 플릿이 지표 그룹에 추가됩니다(UpdateFleetAttributes() 참조). 이 차원은 인스턴스, 서버프로세스, 게임 세션 및 플레이어 세션에 대한 모든 플릿지표에 사용할 수 있습니다.

QueueName 단일 대기열에 대한 지표를 필터링합니다. 이 차원은 게임세션 배치 대기열에 국한된 지표에 사용됩니다.

MatchmakingConfigurationName 단일 매치메이킹 구성에 대한 지표를 필터링합니다. 이 차원은 매치메이킹 구성의 지표에 사용됩니다.

MatchmakingConfigurationName-RuleName

매치메이킹 구성과 매치메이킹 규칙의 교차에 대한 지표를 필터링합니다. 이 차원은 매치메이킹 규칙에 국한된 지표에 사용됩니다.

InstanceType “c4.large”와 같은 EC2 인스턴스 유형 지정에 대한 지표를필터링합니다. 이 차원은 스팟 인스턴스의 지표에 사용됩니다.

OperatingSystem 인스턴스의 운영 체제에 대한 지표를 필터링합니다. 이 차원은 스팟 인스턴스의 지표에사용됩니다.

GameServerGroup 게임 서버 그룹에 대한 FleetIQ 지표를 필터링합니다.

버전182

Amazon GameLift 개발자 안내서API 호출 로깅

AWS CloudTrail을 사용하여 Amazon GameLift API호출 로깅

Amazon GameLift이 AWS CloudTrail과 통합되었습니다. 이 서비스는 AWS계정CloudTrail에서 AmazonGameLift에 의해 또는 이를 대신하여 수행된 API 호출을 캡처하고 사용자가 지정하는 Amazon S3버킷에 로그 파일을 전송합니다. 은 Amazon GameLiftAPI 또는 Amazon GameLift콘솔에서 API 호출을 CloudTrail캡처합니다. CloudTrail에서 수집하는 정보를 사용하여 Amazon GameLift에 어떤 요청이 이루어졌는지, 어떤소스 IP 주소에서 요청했는지, 누가 언제 요청했는지 등을 확인할 수 있습니다. 그 구성 및 활성화 방법을 포함하여 CloudTrail에 대한 자세한 내용은 AWS CloudTrail User Guide 단원을 참조하십시오.

CloudTrail의 Amazon GameLift 정보AWS 계정에서 CloudTrail 로깅이 활성화된 경우 Amazon GameLift 작업에 대한 API 호출이 로그 파일에 추적됩니다. Amazon GameLift 레코드가 다른 AWS 서비스 레코드와 함께 로그 파일에 기록됩니다. 기간 및 파일 크기를 기준으로 새 파일을 만들고 기록하는 시점을 CloudTrail이 결정합니다.

모든 Amazon GameLift 작업은 CloudTrail에 의해 로깅됩니다. 예를 들어 CreateGameSession,CreatePlayerSession 및 UpdateGameSession을 호출하면 CloudTrail 로그 파일에 항목이 생성됩니다.전체 작업 목록은 Amazon GameLift API 레퍼런스를 참조하십시오.

모든 로그 항목은 누가 요청을 생성했는가에 대한 정보가 들어 있습니다. 로그의 사용자 자격 증명 정보를 참조하여 요청이 AWS루트나 IAM 사용자 자격 증명 또는 역할이나 페더레이션 사용자를 위한 임시 보안 자격증명을 사용하여 이루어졌는지 아니면 요청이 다른 AWS 서비스에 의해 이루어졌는지 확인할 수 있습니다.자세한 내용은 CloudTrail이벤트 참조 단원의 userIdentity 필드를 참조하십시오.

원하는 기간만큼 S3 버킷에 로그 파일을 저장할 수 있습니다. 그러나 Amazon S3 수명 주기 규칙을 정의하여자동으로 로그 파일을 보관하거나 삭제할 수도 있습니다.

로그 파일 전송 시 신속한 조치를 취해야 하는 경우 새 로그 파일이 전송될 때 에서 Amazon SimpleNotification ServiceAmazon SNS 알림을 CloudTrail게시하게 할 수 있습니다. 자세한 내용은 Amazon SNS알림 설정을 참조하십시오.

또한 여러 AWS 리전 및 여러 AWS 계정의 Amazon GameLift 로그 파일을 하나의 버킷으로 통합할 수도 있습니다. 자세한 내용은 단일 Amazon S3 버킷에 CloudTrail 로그 파일 통합 단원을 참조하십시오.

Amazon GameLift 로그 파일 항목 이해CloudTrail 로그 파일에는 하나 이상의 로그 항목이 포함될 수 있으며, 각 항목은 여러 개의 JSON 형식 이벤트로 구성됩니다. 로그 항목은 어떤 소스로부터의 요청 하나를 나타내며 요청된 작업, 모든 파라미터, 작업날짜와 시간 등에 대한 정보가 들어 있습니다. 로그 항목의 순서가 정해져 있는 것은 아닙니다. 즉 순서가 지정된 공개 API 호출의 스택 추적이 아닙니다.

다음 예제는 CreateFleet 및 DescribeFleetAttributes 작업을 보여주는 CloudTrail 로그 항목입니다.

{ "Records": [ { "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": AKIAIOSFODNN7EXAMPLE", "userName": "myUserName"

버전183

Amazon GameLift 개발자 안내서Amazon GameLift 로그 파일 항목 이해

}, "eventTime": "2015-12-29T23:40:15Z", "eventSource": "gamelift.amazonaws.com", "eventName": "CreateFleet", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "[]", "requestParameters": { "buildId": "build-92b6e8af-37a2-4c10-93bd-4698ea23de8d", "eC2InboundPermissions": [ { "ipRange": "10.24.34.0/23", "fromPort": 1935, "protocol": "TCP", "toPort": 1935 } ], "logPaths": [ "C:\\game\\serverErr.log", "C:\\game\\serverOut.log" ], "eC2InstanceType": "c5.large", "serverLaunchPath": "C:\\game\\MyServer.exe", "description": "Test fleet", "serverLaunchParameters": "-paramX=baz", "name": "My_Test_Server_Fleet" }, "responseElements": { "fleetAttributes": { "fleetId": "fleet-0bb84136-4f69-4bb2-bfec-a9b9a7c3d52e", "serverLaunchPath": "C:\\game\\MyServer.exe", "status": "NEW", "logPaths": [ "C:\\game\\serverErr.log", "C:\\game\\serverOut.log" ], "description": "Test fleet", "serverLaunchParameters": "-paramX=baz", "creationTime": "Dec 29, 2015 11:40:14 PM", "name": "My_Test_Server_Fleet", "buildId": "build-92b6e8af-37a2-4c10-93bd-4698ea23de8d" } }, "requestID": "824a2a4b-ae85-11e5-a8d6-61d5cafb25f2", "eventID": "c8fbea01-fbf9-4c4e-a0fe-ad7dc205ce11", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, { "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-12-29T23:40:15Z", "eventSource": "gamelift.amazonaws.com", "eventName": "DescribeFleetAttributes", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "[]", "requestParameters": { "fleetIds": [

버전184

Amazon GameLift 개발자 안내서Amazon GameLift 로그 파일 항목 이해

"fleet-0bb84136-4f69-4bb2-bfec-a9b9a7c3d52e" ] }, "responseElements": null, "requestID": "82e7f0ec-ae85-11e5-a8d6-61d5cafb25f2", "eventID": "11daabcb-0094-49f2-8b3d-3a63c8bad86f", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, ]}

버전185

Amazon GameLift 개발자 안내서GameLift FleetIQ 기능

GameLift FleetIQ 가이드[공개 미리 보기]

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

클라우드 기반 게임 호스팅을 위한 저비용 스팟 인스턴스의 사용을 최적화하는 GameLift FleetIQ를 이제 독립형 기능으로 사용할 수 있습니다. 스팟 인스턴스는 가용성이 변동되고 중단 가능성이 있으므로 파격 할인가로 제공되는 예비 AWS 컴퓨팅 용량을 사용합니다. 게임 호스팅은 특히 중단에 민감하기 때문에 스팟 인스턴스가 항상 실행 가능한 옵션은 아닙니다. GameLift FleetIQ를 사용하면 중단이 게임 서버에 끼치는 영향을최소화하여 게임 호스팅에 대해 스팟 인스턴스를 실행할 수 있습니다. GameLift FleetIQ를 독립형 기능으로사용하면 GameLift 최적화를 활용하여 플레이어를 위해 저비용의 탄력적인 게임 호스팅을 제공하는 동시에Amazon EC2 및 Auto Scaling에서 호스팅 리소스를 직접 작업할 수 있습니다.

GameLift FleetIQ는 다음과 같은 고객에게 적합한 게임 호스팅 옵션입니다.

• 기존 AWS 배포가 있으며 관리형 GameLift 서비스를 통하지 않고 직접 Amazon EC2를 사용하려는 고객.GameLift FleetIQ는 AWS 계정에서 관리하는 Auto Scaling 그룹과 연동되며 Amazon EC2 인스턴스 및그룹에 대한 모든 액세스 권한을 제공합니다. 또한 Amazon Elastic Container Service, Amazon ElasticKubernetes Service 및 AWS Shield Advanced를 비롯한 다른 AWS 서비스와 통합할 수 있습니다.

• 기존 온프레미스 게임 호스팅이 있고 클라우드로 용량을 확장하려는 고객. GameLift FleetIQ를 사용하면기존 온프레미스 용량을 활용하면서 필요에 따라 AWS 클라우드 용량을 점진적으로 추가할 수 있는 하이브리드 배포 시스템을 구축할 수 있습니다.

GameLift FleetIQ 기능• 최적화된 스팟 리밸런싱. GameLift FleetIQ는 인스턴스 유형을 주기적으로 평가하여 게임 세션 중단 가능

성이 높아 실행 가능한 것으로 간주되지 않는 인스턴스를 대체합니다. Auto Scaling 그룹이 이전 인스턴스를 사용 중지하고 새 인스턴스를 시작하면 해당 그룹은 현재 게임 호스팅에 적합한 인스턴스 유형으로 항상 새로 고쳐집니다.

• 최적의 플레이어 라우팅. GameLift FleetIQ API는 새 게임 세션을 게임 세션이 중단될 가능성이 가장 적은인스턴스로 보냅니다. 또한 게임 세션을 더 적은 수의 인스턴스로 압축하여 Auto Scaling 그룹이 불필요한리소스를 축소하고 비용을 절감하는 기능을 개선합니다.

• 플레이어 사용률에 따른 자동 조정. GameLift FleetIQ에서는 게임 서버 사용률 데이터를 CloudWatch 지표로 내보냅니다. 이러한 지표를 바탕으로 사용 가능한 호스팅 리소스를 자동으로 조정하여 실제 플레이어수요에 맞추고 호스팅 비용을 줄일 수 있습니다.

• 자체 AWS 계정에서 Amazon EC2 인스턴스 직접 관리. Amazon EC2 인스턴스 및 Auto Scaling 그룹을 완벽하게 제어할 수 있습니다. 즉, 인스턴스 시작 템플릿을 설정하고, Auto Scaling 그룹 구성을 유지하며,다른 AWS 서비스와 통합할 수 있습니다. 스팟 리밸런싱 활동의 일환으로 GameLift FleetIQ는 일부 AutoScaling 그룹 속성을 주기적으로 업데이트합니다. 필요에 따라 일시적으로 이러한 설정을 재정의하거나GameLift FleetIQ 활동을 일시 중단할 수 있습니다.

• 여러 게임 서버 실행 형식 지원. GameLift FleetIQ는 Windows, Linux, 컨테이너 및 Kubernetes를 포함하여현재 Amazon EC2에서 실행되는 모든 형식을 지원합니다. 지원되는 운영 체제 및 런타임 목록은 AmazonEC2 FAQ를 참조하십시오.

버전186

Amazon GameLift 개발자 안내서

• 여러 유형의 호스팅 리소스. GameLift FleetIQ를 사용하면 게임 서버 호스팅을 위해 50개 이상의 인스턴스 유형에 액세스할 수 있습니다(이용 가능 여부는 리전에 따라 다름). 따라서 게임 서버에 적절한 조합의CPU, 메모리, 스토리지 및 네트워킹 용량을 사용하여 플레이어에게 최상의 게임 경험을 제공할 수 있습니다.

• 전 세계적 지원. GameLift FleetIQ는 현재 중국을 포함한 15개 리전에서 제공됩니다. 따라서 플레이어가 어디에 있든 게임 지연을 최소화하면서 게임 서버에 액세스할 수 있습니다. 리전의 전체 목록은 GameLift 서비스 엔드포인트를 참조하십시오.

GameLift FleetIQ 작동 방식

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

이 주제에서는 GameLift FleetIQ 독립형 솔루션에 대한 일반적인 개요를 제공합니다. 다른 GameLift 솔루션에 대한 자세한 내용은 Amazon GameLift란 무엇입니까? (p. 1) 단원을 참조하십시오.

GameLift FleetIQ는 Amazon EC2 및 Auto Scaling과 함께 얻는 컴퓨팅 리소스 관리 도구의 전체 집합을 보완하는 게임 호스팅 계층입니다. GameLift FleetIQ를 사용하여 Amazon EC2 리소스를 직접 관리하고, AutoScaling 그룹의 용량을 동적으로 관리하고, 선택적으로 다른 AWS 서비스와 통합할 수 있습니다. GameLiftFleetIQ는 게임 서버 상태 추적, 플레이어를 실행 가능한 게임 서버로 라우팅 등의 게임 호스팅 작업을 관리하는 동시에 게임 호스팅에 저비용 스팟 인스턴스를 사용할 수 있게 하는 추가 로직 계층을 제공합니다.

GameLift FleetIQ에서는 평상시처럼 게임 서버 소프트웨어로 Amazon Machine Image(AMI)를 생성하고Amazon EC2 시작 템플릿을 생성하여 호스팅에 사용할 Amazon EC2 인스턴스를 시작할 수 있도록 준비합니다. 또한 Auto Scaling 그룹에 대한 구성 설정을 정의합니다. Auto Scaling 그룹을 설정할 준비가 되면GameLift FleetIQ 게임 서버 그룹을 생성합니다. 이 작업은 GameLift FleetIQ가 시작 템플릿에 정의된 AMI를사용하여 게임 서버 그룹과 해당 Auto Scaling 그룹을 모두 생성하고 이 두 그룹을 함께 연결하도록 합니다.

Auto Scaling 그룹이 생성되면 사용자에게 Amazon EC2 및 Auto Scaling 리소스에 대한 모든 액세스 권한이 부여됩니다. Auto Scaling 그룹 구성을 변경하거나, 다중 레벨 조정 정책 또는 로드 밸런서와 같은 선택적Auto Scaling 기능을 추가하거나, 다른 AWS 서비스와 통합할 수 있습니다. 그룹의 인스턴스에 직접 연결할수 있습니다. GameLift FleetIQ는 해당 인스턴스 밸런싱 로직의 일부로 특정 Auto Scaling 그룹 속성을 주기적으로 업데이트합니다. 이러한 값을 단기적으로 자유롭게 변경하거나 언제든지 GameLift FleetIQ 활동을일시적으로 일시 중단할 수 있습니다. 또한 게임 조정 그룹을 삭제하지만 해당 Auto Scaling 그룹은 유지할수 있는 옵션도 있습니다.

GameLift FleetIQ 로직다음 다이어그램은 게임 호스팅을 위해 Amazon EC2와 함께 사용할 때 GameLift FleetIQ의 역할을 보여줍니다. 주된 목표는 게임 세션을 호스팅하는 데 최고의 적정 게임 서버를 찾고 플레이어에게 최적의 게임 플레이 경험을 제공하는 것입니다. 게임 호스팅에 최고의 리소스는 최저 비용으로 가장 높은 호스팅 실행 가능성을 제공하는 리소스로 정의됩니다. GameLift FleetIQ는 두 가지 주요 방식으로 이 목표에 접근하는데 하나는Auto Scaling 그룹에 최적의 인스턴스 유형만 허용하는 것이고, 다른 하나는 그룹의 사용 가능한 리소스 전체에 새 게임 세션을 효과적으로 배치하는 것입니다.

버전187

Amazon GameLift 개발자 안내서GameLift FleetIQ 로직

버전188

Amazon GameLift 개발자 안내서GameLift FleetIQ 로직

Auto Scaling 그룹을 최적의 인스턴스 유형으로 채우기Auto Scaling 그룹의 임무는 새 인스턴스를 시작하고 이전 인스턴스를 사용 중지하면서 호스팅 리소스 모음을 유지하고 플레이어 수요에 맞게 조정하는 것입니다. 사용자는 게임 서버 그룹을 생성할 때 게임에 필요한인스턴스 유형 목록을 생성합니다. 이 목록은 Auto Scaling 그룹에 전달되며, 이 그룹이 시작하는 모든 새 인스턴스는 이 목록에 있는 인스턴스 유형을 사용합니다. GameLift FleetIQ는 Auto Scaling 그룹이 다음과 같은방법으로 최적의 인스턴스 유형을 선택하는 방법에 영향을 줍니다.

• Auto Scaling 그룹을 설정할 때 GameLift FleetIQ는 그룹이 저비용 스팟 인스턴스만 시작하도록 구성합니다. 스팟 인스턴스는 예비 컴퓨팅 용량을 사용합니다. 가용성 변동과 잠재적인 중단으로 인해 비용이 절감됩니다. GameLift FleetIQ는 게임 서버 호스팅에 대한 이러한 제한을 최소화합니다. 사용 가능한 스팟 인스턴스가 없을 때 필요에 따라 Auto Scaling 그룹에서 온디맨드 인스턴스를 허용하도록 구성할 수 있습니다.

• GameLift FleetIQ는 게임 서버 그룹 목록에 있는 각 스팟 인스턴스 유형을 정기적으로 평가하여 게임 호스팅에 대한 실행 가능성을 평가합니다. 이 프로세스는 인스턴스 유형의 최근 가용성 및 중단률을 평가하는예측 알고리즘을 사용합니다. 게임 서버 중단 가능성이 너무 높으면 GameLift FleetIQ에서 실행 불가능한이 인스턴스 유형을 Auto Scaling 그룹의 원하는 인스턴스 유형 목록에서 제거합니다.

• GameLift FleetIQ는 Auto Scaling 그룹의 기존 인스턴스 중 현재 실행 불가능한 인스턴스 유형을 식별합니다. 이러한 인스턴스에는 드레이닝이라는 플래그가 지정되어 있습니다. 이는 해당 인스턴스가 종료되고 새인스턴스로 교체됨을 의미합니다. 게임 서버 보호 기능이 설정되어 있는 인스턴스의 경우 모든 활성 게임세션이 정상적으로 종료될 때까지 종료가 연기됩니다.

• GameLift FleetIQ는 Auto Scaling 그룹 인스턴스가 원하는 목록에 있는 실행 가능한 모든 인스턴스 유형 전체에서 밸런스되도록 합니다. 다양한 인스턴스 유형을 가진 그룹은 복원력이 뛰어나며 예기치 않은 호스팅실행 가능성 문제를 처리할 수 있습니다.

저비용 스팟 인스턴스 유형의 가용성이 변동되더라도 Auto Scaling 그룹은 인스턴스를 시작하고 만료할 때게임 호스팅에 최적화된 모음을 계속 유지합니다. 이 프로세스의 작동 방식에 대해 스팟 리밸런싱 프로세스 (p. 192)에서 자세히 알아보십시오.

효과적으로 게임 세션 배치GameLift FleetIQ는 게임 서버 그룹의 모든 활성 게임 서버를 추적하고 이 정보를 사용하여 새 게임 세션 및플레이어에 가장 적합한 위치를 결정합니다.

GameLift FleetIQ에서 게임 서버를 추적하려면 게임 서버 소프트웨어가 해당 상태를 보고해야 합니다. 사용자 지정 AMI는 각 인스턴스에서 새 게임 서버 프로세스가 시작 및 중지되는 방법을 제어합니다. 새 게임 서버가 시작되면 GameLift FleetIQ에 등록되어 게임 세션을 호스트할 준비가 되었음을 나타냅니다. 등록 후 게임서버는 주기적으로 자체 상태와 현재 게임 세션을 호스팅하고 있는지 여부를 보고합니다. 게임 서버가 종료되면 GameLift FleetIQ에서 등록이 취소됩니다.

새 게임 세션을 시작하기 위해 게임 클라이언트(또는 매치메이커나 다른 클라이언트 서비스)는 게임 서버에대한 요청을 GameLift FleetIQ에 보냅니다. GameLift FleetIQ는 사용 가능한 게임 서버를 찾아 새 게임 세션에 사용하도록 클레임하고 게임 서버 ID 및 연결 정보로 응답합니다. 그런 다음 게임 서버의 상태가 업데이트되고 들어오는 플레이어를 위한 새 게임 세션이 시작됩니다.

GameLift FleetIQ는 새 게임 세션을 호스팅할 게임 서버를 선택할 때 다음과 같은 의사 결정 프로세스를 통해실행 가능한 저비용 스팟 인스턴스를 사용하여 배치를 최적화합니다.

1. GameLift FleetIQ는 게임 호스팅에 실행 불가능을 의미하는 드레이닝이라는 플래그가 지정된 인스턴스는무시합니다. 이러한 인스턴스는 기존 게임 세션을 지원하기 위해서만 계속 실행됩니다. 이러한 인스턴스는 다른 게임 서버를 사용할 수 없으면 새 게임 세션에 사용할 수 없습니다.

2. GameLift FleetIQ는 실행 가능한 인스턴스에서 실행 중인 사용 가능한 모든 게임 서버를 식별합니다.3. 가능한 경우 GameLift FleetIQ는 이미 다른 게임 세션을 호스팅하고 있는 인스턴스에 새 게임 세션을 배치

합니다. 일부 인스턴스로 압축하고(과부하시키는 않음) 다른 인스턴스를 유휴 상태로 유지함으로써 AutoScaling 그룹이 필요 없을 때 유휴 인스턴스를 빠르게 축소할 수 있으므로 호스팅 비용을 절감할 수 있습니다.

버전189

Amazon GameLift 개발자 안내서주요 리소스 및 구성 요소

게임 서버 그룹에 대한 게임 세션 보호 기능을 설정하여 Auto Scaling 그룹이 활발하게 실행 중인 게임 세션이 있는 인스턴스를 종료하지 못하게 할 수 있습니다.

주요 리소스 및 구성 요소GameLift FleetIQ를 사용하여 게임 호스팅 리소스를 설정하기 전에 AWS 계정으로 다음 리소스를 생성합니다. 게임 서버 그룹을 통해 사용하기 전에 이러한 리소스를 사용하여 게임 서버 배포를 개발하고 테스트하는것이 좋습니다.

• Amazon Machine Image(AMI). AMI는 Amazon EC2 인스턴스로 시작하려는 특정 소프트웨어 구성을 위한템플릿입니다. 게임 호스팅의 경우 AMI에는 운영 체제, 게임 서버 바이너리 또는 컨테이너, 게임 서버에 필요한 기타 런타임 소프트웨어가 포함됩니다. AMI 생성에 대한 자세한 내용은 Linux 인스턴스용 AmazonEC2 사용 설명서의 Amazon Machine Image(AMI)를 참조하십시오. AMI는 리전별로 고유합니다. AmazonEC2 사용 설명서의 AMI 복사에 설명된 대로 한 리전에서 다른 리전으로 AMI를 복사할 수 있습니다.

• Amazon EC2 시작 템플릿. 시작 템플릿은 Auto Scaling 그룹에서 인스턴스를 시작하고 관리하는 것에 대한 지침을 제공합니다. 시작 템플릿은 AMI를 지정하고 적절한 인스턴스 유형 목록을 제공하며 네트워크,보안 및 기타 속성을 설정합니다. 시작 템플릿 생성에 대한 자세한 내용은 Amazon EC2 사용 설명서의 시작 템플릿에서 인스턴스 시작을 참조하십시오. 시작 템플릿은 리전별로 고유합니다.

• AWS IAM 역할. IAM 역할은 AWS 리소스에 대한 제한된 액세스를 허용하는 권한 집합을 정의합니다. 다른AWS 서비스와 같은 신뢰할 수 있는 엔터티는 역할을 수임하고 해당 권한을 상속할 수 있습니다. GameLiftFleetIQ를 사용하는 경우 AWS 계정에서 GameLift FleetIQ가 Auto Scaling 그룹 및 EC2 인스턴스 리소스를 생성하고 액세스하도록 허용하는 관리형 정책을 IAM 역할에 제공해야 합니다. IAM 역할은 리전별로 고유하지 않습니다.

GameLift FleetIQ는 다음 리소스를 직접 관리하며 직접적인 권한을 가지고 있습니다.

• GameLift 게임 서버 그룹. 게임 서버 그룹에는 저비용 게임 호스팅을 제공하기 위해 GameLift FleetIQ가 해당 Auto Scaling 그룹과 함께 작동하는 방식을 정의하는 구성 설정이 포함되어 있습니다. 게임 서버 그룹은리전별로 고유합니다. 리전에 게임 서버 그룹을 생성하면 동일한 리전에 AWS 계정으로 새 Auto Scaling그룹이 자동으로 생성됩니다. 게임 서버 그룹은 Auto Scaling 그룹에 연결되어 있으며 IAM 역할을 수임함으로써 일부 설정을 관리하고 수정할 수 있는 권한을 갖습니다. 게임 서버 그룹은 수명이 긴 리소스이므로개발자가 자주 생성할 필요가 없습니다. 또한 게임 서버 그룹은 Auto Scaling 그룹의 인스턴스에서 호스팅되고 GameLift FleetIQ에 등록된 게임 서버의 기능적 그룹화 리소스입니다.

• GameLift 게임 서버. 게임 서버 리소스는 게임 서버 그룹과 연결된 GameLift FleetIQ 인스턴스에서 실행되는 게임 실행을 나타냅니다. 이 리소스는 게임 서버가 GameLift FleetIQ에 등록되고 속한 게임 서버 그룹을식별할 때 생성됩니다. GameLift FleetIQ는 등록된 각 게임 서버의 사용률 상태 및 클레임 상태를 추적하여게임 서버의 가용성을 모니터링할 수 있습니다. 게임 서버는 리전별 게임 서버 그룹과 연결되어 있다는 점에서 리전별로 고유합니다. 게임에서 새 게임 서버를 요청할 때 게임 서버 그룹 및 리전을 지정합니다.

이 리소스는 GameLift FleetIQ 리소스를 통해 생성됩니다. 이 리소스는 AWS 계정에서 생성되며 사용자가 완벽하게 제어할 수 있습니다.

• Amazon EC2 Auto Scaling 그룹. Auto Scaling 그룹은 EC2 인스턴스 모음을 시작 및 관리하고 그룹 용량을 자동으로 조정합니다. GameLift FleetIQ에서는 게임 서버 그룹과 Auto Scaling 그룹 간에 일대일 관계가있습니다. 사용자가 Auto Scaling 그룹에 대한 모든 설정을 업데이트할 수 있지만 GameLift FleetIQ에서 게임 호스팅에 실행할 수 있도록 스팟 인스턴스를 밸런싱하는 로직에 따라 주기적으로 특정 설정을 재정의하고 업데이트합니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서의 AutoScalingGroup을 참조하십시오. Auto Scaling 그룹은 리전별로 고유하며 게임 서버 그룹과 동일한 리전에 생성됩니다.

• Amazon EC2 인스턴스. 인스턴스는 클라우드의 가상 서버입니다. 인스턴스 유형에는 컴퓨팅, 메모리,디스크 및 네트워크 리소스를 지정하는 특정 하드웨어 구성이 있습니다. 일반적으로 AMI가 있는 AutoScaling 그룹에서 시작합니다. 인스턴스는 가용성에 따라 스팟 또는 온디맨드일 수 있습니다. GameLiftFleetIQ에서 인스턴스는 하나 또는 여러 개의 게임 서버 프로세스를 실행하며 각 프로세스는 여러 게임 세션을 호스팅할 수 있습니다. 인스턴스는 리전별 Auto Scaling 그룹과 연결되어 있다는 점에서 리전별로 고유합니다.

버전190

Amazon GameLift 개발자 안내서게임 아키텍처

GameLift FleetIQ를 사용한 게임 아키텍처게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

온프레미스 호스팅 보완GameLift FleetIQ는 이미 보유하고 있는 플레이어 지리 IP 라우팅, 매치메이킹, 로비 서비스를 비롯한 기존 게임 백엔드를 재사용할 수 있도록 설계되었습니다. 다음 예에서는 기존 온프레미스 배포에 GameLiftFleetIQ를 어떻게 사용할 수 있는지 보여 줍니다.

Example

이 예에서는 북미와 유럽의 플레이어를 호스팅하도록 처음에 4개의 전용 데이터 센터에서 게임 호스팅을 처리합니다. 플레이어는 소재지에 따라 두 리전 매치메이커 중 하나로 라우팅됩니다. 매치메이커는 스킬과 지연 시간을 기준으로 플레이어를 그룹화하고 가까운 게임 서버에 배치하여 지연을 최소화합니다.

게임 개발자는 북미 게임 서버를 GameLift FleetIQ에서 제공하는 서버로 교체하려고 합니다. 개발자는 우선GameLift FleetIQ를 사용할 수 있도록 게임 서버를 약간 업데이트한 다음 Amazon Machine Image(AMI)를 생성합니다. 이 이미지는 게임용으로 배포된 모든 EC2 인스턴스에 설치됩니다. 이미지에는 게임 서버, 종속성및 플레이어를 위한 게임 세션을 실행하는 데 필요한 모든 것이 포함되어 있습니다.

AMI가 준비되면 개발자는 각 AWS 북미 리전(us-east-1 및 us-west-2))에 대해 하나씩 총 두 개의GameLift FleetIQ 게임 서버 그룹을 생성합니다. 개발자는 AMI, 원하는 인스턴스 유형 목록 및 그룹에 대한기타 구성 설정을 전달합니다. 필요한 인스턴스 유형 목록은 게임 호스팅에 대해 실행 가능한 스팟 인스턴스를 검색할 때 사용할 유형을 GameLift FleetIQ에 알려줍니다.

마지막으로, 개발자는 AWS SDK와 GameLift FleetIQ를 북미 매치메이커에 통합하여 새 플레이어 그룹에 게임 세션을 위한 서버 용량이 필요할 때 GameLift FleetIQ를 호출합니다. GameLift FleetIQ는 사용 가능한 게임 서버가 있는 스팟 인스턴스를 찾고, 플레이어를 위해 해당 인스턴스를 예약하고, 서버 연결 정보를 제공합니다. 플레이어는 서버에 연결하여 게임을 플레이하고 연결을 끊습니다. 플레이어가 새 게임을 시작하려고하면 매치메이킹이 다시 시작되어 GameLift FleetIQ에서 사용 가능한 게임 서버를 다시 찾습니다. 새 게임 요청이 있을 때마다 GameLift FleetIQ는 중단 가능성이 낮은 게임 서버를 검색하고 선택합니다. 즉, 스팟 인스

버전191

Amazon GameLift 개발자 안내서수명 주기 및 상태

턴스 가용성이 시간에 따라 변동되더라도 GameLift FleetIQ는 항상 게임 호스팅에 대해 실행 가능하지 않은게임 서버에서 멀리 플레이어를 리디렉션합니다.

GameLift FleetIQ 수명 주기 및 상태

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

스팟 리밸런싱 프로세스GameLift FleetIQ에서 정기적으로 Auto Scaling 그룹의 인스턴스를 리밸런싱합니다. 이 프로세스의 주요 목적은 다음 두 가지입니다.

• 현재 게임 호스팅에 대해 실행 가능성이 높은 스팟 인스턴스 유형만 사용하여 그룹을 지속적으로 새로 고치기 위해

• 예기치 않은 게임 서버 중단의 영향을 줄일 목적으로 실행 가능한 여러 인스턴스 유형(가능한 경우)을 사용하기 위해

GameLift FleetIQ는 그룹의 인스턴스 유형을 평가하고 게임 서버 중단을 초래할 가능성이 높은 인스턴스를제거하여 리밸런싱합니다. 리밸런싱 중에 활성 게임 플레이가 있는 인스턴스가 종료되지 않도록 프로덕션 환경의 게임 서버 그룹에 대해 게임 서버 보호 기능을 설정하는 것이 가장 좋습니다.

Example

다음 예제에서는 Auto Scaling 그룹의 인스턴스가 어떻게 스팟 리밸런싱의 영향을 받는지 보여 줍니다.

버전192

Amazon GameLift 개발자 안내서게임 서버 그룹의 수명

• 단계 1. 게임 서버 그룹을 통해 연결된 Auto Scaling 그룹이 게임 서버 보호가 활성화된 상태로 m4.large,c4.large 및 c5.large 유형의 인스턴스를 시작하도록 설정됩니다. Auto Scaling 그룹은 각 유형의 두 스팟 인스턴스로 구성된 밸런싱된 컬렉션을 시작했습니다. 4개의 인스턴스에는 UTILIZED 상태(점선으로 표시됨)인 게임 서버가 하나 이상 있고, 2개의 인스턴스는 현재 게임 플레이를 지원하지 않습니다.

• 단계 2. GameLift FleetIQ는 3가지 인스턴스 유형 모두의 현재 게임 호스팅 실행 가능성을 평가합니다.이 평가에서는 c4.large 인스턴스 유형에 받아들일 수 없는 게임 서버 중단 가능성이 있다고 확인합니다.GameLift FleetIQ는 Auto Scaling 그룹 구성을 즉시 업데이트하여 인스턴스 유형 목록에서 c4.large를 일시적으로 제거함으로써 해당 유형의 인스턴스가 추가로 시작되지 않도록 합니다.

• 단계 3. GameLift FleetIQ가 c4.large 유형의 기존 인스턴스를 식별하고 그룹에서 인스턴스를 제거하는 작업을 수행합니다. 첫 번째 단계로 c4.large 인스턴스에서 실행 중인 모든 게임 서버에 드레이닝 플래그가지정됩니다. 드레이닝 인스턴스의 게임 서버는 다른 게임 서버를 사용할 수 없을 때 최후의 수단으로만 클레임될 수 있습니다. 또한 드레이닝 인스턴스가 있는 Auto Scaling 그룹이 트리거되어 새 인스턴스를 시작함으로써 드레이닝 인스턴스를 교체합니다.

• 단계 4. 실행 가능한 새 인스턴스가 온라인 상태가 되면 Auto Scaling 그룹이 드레이닝 인스턴스를 종료합니다. 이 교체를 통해 그룹의 원하는 용량을 유지할 수 있습니다. 종료되는 첫 번째 인스턴스는 사용되는게임 서버가 없고 게임 서버 보호가 비활성화된 c4.large 인스턴스입니다. 이는 새 c5.large 인스턴스로 교체됩니다.

• 단계 5. 게임 서버 보호가 활성화된 드레이닝 인스턴스는 게임 서버가 게임 플레이를 지원하는 동안 계속실행됩니다. 게임 플레이가 끝나면 새 m4.large 인스턴스가 시작되고 남은 c4.large 인스턴스가 종료됩니다.

이 프로세스의 결과로 그룹이 3가지에서 2가지 인스턴스 유형을 사용하는 것으로 리밸런싱되고 AutoScaling 그룹에서는 원하는 용량이 유지됩니다. GameLift FleetIQ는 원래 인스턴스 유형 목록을 지속적으로평가하여 게임 호스팅에 실행 가능한지 판단합니다. c4.large가 다시 실행 가능한 인스턴스 유형으로 간주되면 세 가지 인스턴스 유형을 모두 포함하도록 Auto Scaling 그룹이 업데이트됩니다. 이 그룹은 시간이 지남에따라 자동으로 리밸런싱됩니다.

게임 서버 그룹의 수명게임 서버 그룹은 프로비저닝 및 상태 업데이트를 포함한 다음과 같은 수명 주기를 거칩니다. 게임 서버 그룹은 수명이 긴 리소스로 예상됩니다.

버전193

Amazon GameLift 개발자 안내서게임 서버의 수명

• 게임 서버 그룹을 생성하려면 GameLift API CreateGameServerGroup()을 호출하여 EC2 시작 템플릿및 구성 설정을 전달합니다. 호출에 대한 응답으로 새 게임 서버 그룹이 생성되고 NEW 상태로 설정됩니다.

• GameLift FleetIQ는 비동기 활성화 워크플로우를 활성화하여 게임 서버 그룹을 ACTIVATING 상태로 전환합니다. 워크플로는 Amazon EC2 Auto Scaling 그룹과 제공된 AMI가 있는 EC2 인스턴스를 포함한 기본리소스의 생성을 시작합니다.• 어떤 이유로든 프로비저닝에 실패하면 게임 서버 그룹이 ERROR 상태로 전환됩니다. 오류 원

인을 디버깅하는 데 도움이 되는 추가 오류 정보를 얻으려면 오류 상태의 게임 서버 그룹에서DescribeGameServerGroup()을 호출합니다.

• 프로비저닝에 성공하면 게임 서버 그룹이 ACTIVE 상태로 전환됩니다. 그러면 GameLift FleetIQ에 등록된 게임 서버를 사용하여 인스턴스가 시작됩니다. 그룹의 인스턴스 유형은 게임 호스팅에 실행 가능한지주기적으로 평가되고 필요에 따라 리밸런싱됩니다. 또한 GameLift FleetIQ는 그룹 내 활성 게임 서버의상태를 추적하고 게임 서버에 대한 요청에 응답합니다.

• 게임 서버 그룹을 제거하려면 그룹 식별자를 사용하여 DeleteGameServerGroup()을 호출합니다. 이작업을 수행하면 게임 서버 그룹이 DELETE_SCHEDULED 상태로 전환됩니다. ACTIVE 또는 ERROR 상태의 게임 서버 그룹만 삭제하도록 예약할 수 있습니다.

• GameLift FleetIQ는 DELETE_SCHEDULED 상태에 대한 응답으로 비동기 비활성화 워크플로를 활성화하여 게임 서버 그룹 상태를 DELETING으로 전환합니다. 게임 서버 그룹만 삭제하거나 게임 서버 그룹 및 연결된 Auto Scaling 그룹을 모두 삭제할 수 있습니다.• 어떤 이유로든 비활성화에 실패하면 게임 서버 그룹이 ERROR 상태로 전환됩니다. 오류 원

인을 디버깅하는 데 도움이 되는 추가 오류 정보를 얻으려면 오류 상태의 게임 서버 그룹에서DescribeGameServerGroup()을 호출합니다.

• 비활성화에 성공하면 게임 서버 그룹이 DELETED 상태로 전환됩니다.

게임 서버의 수명GameLift FleetIQ를 사용하는 경우 게임 서버가 프로비저닝 및 상태 업데이트를 포함한 다음과 같은 수명 주기를 거칩니다. 게임 서버는 수명이 짧은 리소스입니다. 게임 세션이 끝난 후에는 재사용하는 대신 게임 서버의 등록을 취소하는 것이 좋습니다. 이렇게 하면 게임 서버 그룹이 지속적으로 새로 고쳐지고 항상 게임 호스팅에 실행 가능한 가장 저렴한 리소스에서 사용 가능한 게임 서버가 실행될 수 있습니다.

• 게임 서버 리소스는 GameLift FleetIQ에 연결된 Auto Scaling 그룹의 인스턴스에서 실행되는 게임 서버 프로세스가 GameLift API RegisterGameServer()를 호출하여 플레이어와 게임 플레이를 호스팅할 준비가 되었음을 GameLift FleetIQ에 알리면 생성됩니다. 게임 서버의 두 가지 상태를 통해 현재 가용성이 추적됩니다.

버전194

Amazon GameLift 개발자 안내서게임 서버의 수명

• 사용률 상태는 게임 서버가 현재 게임 플레이를 지원하는지 여부를 추적합니다. 이 상태는 처음에AVAILABLE로 설정되어 새로운 게임 플레이를 수용할 준비가 되었음을 나타냅니다. 게임 서버가 게임플레이로 점유되면 이 상태가 UTILIZED로 설정됩니다.

• 클레임 상태는 게임 서버가 임박한 게임 플레이에 클레임되었는지 여부를 추적합니다. CLAIMED 상태의 게임 서버는 게임 클라이언트(또는 매치메이커와 같은 게임 서비스)에 의해 일시적으로 예약되었음을 나타냅니다. 이 상태에서는 GameLift FleetIQ가 동일한 게임 서버를 여러 요청자에게 제공하지 못합니다. 빈 클레임 상태의 게임 서버는 클레임 가능합니다.

• 다음 다이어그램은 게임 서버의 사용률 상태 및 클레임 상태가 수명 기간 동안 어떻게 변하는지를 보여줍니다.

• 단계 1. 게임 서버 그룹에 6개의 게임 서버가 등록되어 있습니다. 4개(A, B, C, D)는 사용률 상태가AVAILABLE이고 2개(E, F)는 현재 UTILIZED입니다.

• 단계 2. 게임 클라이언트 또는 매치메이킹 시스템은 GameLift API ClaimGameServer()를 호출하여새 게임 서버를 요청합니다. 이 요청에서는 GameLift FleetIQ에게 사용 가능한 게임 서버(D)를 검색하고클레임 상태를 60초 동안 CLAIMED로 설정하라고 합니다. GameLift FleetIQ는 게임 서버에 대한 연결정보(IP 주소 및 포트)와 기타 선택적 게임 관련 데이터를 사용하여 요청에 응답합니다. 아직 게임 서버에서 게임 플레이가 시작되지 않았으므로 사용률 상태는 AVAILABLE로 유지되지만 다른 요청으로 게임서버를 클레임할 수 없습니다.

• 단계 3a. 제공된 연결 정보를 사용하여 게임 클라이언트가 게임 서버에 연결하고 게임 플레이를 시작할수 있습니다. GameLift API UpdateGameServer()를 호출하여 게임 서버(D)를 60초 이내에 트리거해야 사용률 상태를 UTILIZED로 변경할 수 있습니다.

버전195

Amazon GameLift 개발자 안내서설정

• 단계 3b. 게임 서버의 사용률 상태가 60초 이내에 업데이트되지 않으면 클레임 타이머가 만료되고 클레임 상태가 빈 클레임으로 재설정됩니다. 게임 서버(D)가 사용 가능하고 클레임되지 않은 게임 서버 풀로반환됩니다.

• 게임 서버의 게임 플레이가 완료되고 플레이어 연결이 끊어지면 게임 서버 리소스가 제거됩니다. 종료하기전에 게임 서버 프로세스는 GameLift API DeregisterGameServer()를 호출하여 게임 서버 그룹의 게임 서버 풀에서 게임 서버가 제거됨을 GameLift FleetIQ에 알립니다.

GameLift FleetIQ 설정

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

이 단원에서는 사용자의 게임을 Amazon GameLift FleetIQ 서비스용으로 설정하는 주요 절차를 설명합니다.여기에는 GameLift FleetIQ를 Amazon EC2 및 Auto Scaling과 함께 사용하여 멀티플레이어 게임을 호스팅하는 데 필요한 도구를 얻는 방법이 포함되어 있습니다.

주제• GameLift FleetIQ SDK 및 플랫폼 (p. 196)• GameLift FleetIQ에 대한 AWS 계정 설정 (p. 197)

GameLift FleetIQ SDK 및 플랫폼Amazon EC2 리소스 및 GameLift FleetIQ와 함께 사용할 64비트, 멀티플레이어 게임 서버, 클라이언트 및 게임 서비스를 생성하고 배포합니다.

SDK 지원

GameLift API와 함께 사용되는 AWS SDK에는 게임 서버 및 클라이언트가 GameLift FleetIQ 서비스와 통신할 수 있게 하고 GameLift가 게임 세션 및 플레이어 배치를 최적화할 수 있게 하는 기능이 포함되어 있습니다. AWS SDK를 다운로드하거나 Amazon GameLift API 참조 문서를 봅니다.

AWS SDK Amazon GameLift는 다음 언어로 제공됩니다. 개발 환경 지원에 대한 자세한 내용은 각 언어로 된설명서를 참조하십시오.

• C++(SDK docs)(Amazon GameLift)• Java(SDK docs)(Amazon GameLift)• .NET(SDK docs)(Amazon GameLift)• Go(SDK docs)(Amazon GameLift)• Python(SDK docs)(Amazon GameLift)• Ruby(SDK docs)(Amazon GameLift)• PHP(SDK docs)(Amazon GameLift)• JavaScript/Node.js(SDK docs)(Amazon GameLift)

운영 체제 및 개발 환경

GameLift FleetIQ는 EC2에서 실행되는 모든 운영 체제, 엔진 및 프로그래밍 언어를 지원합니다. AmazonEC2에서는 현재 Amazon Linux, Ubuntu, Windows Server, Red Hat Enterprise Linux, SUSE Linux

버전196

Amazon GameLift 개발자 안내서AWS 계정 설정

Enterprise Server, Fedora, Debian, CentOS, Gentoo Linux, Oracle Linux 및 FreeBSD를 비롯한 다양한 운영체제를 지원하고 있습니다.

게임 서버를 호스팅하고 Unreal, Unity 및 사용자 지정 게임 엔진으로 개발된 게임 클라이언트 및 클라이언트서비스뿐만 아니라 C++, C# 및 AWS SDK에서 지원하는 다른 언어로 작성된 게임 서버도 통합할 수 있습니다.

GameLift FleetIQ에서는 Kubernetes, Amazon Elastic Container Service (Amazon ECS) 및 Amazon ElasticKubernetes Service(EKS)를 사용하는 컨테이너를 지원합니다.

GameLift FleetIQ에 대한 AWS 계정 설정

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

GameLift FleetIQ를 Amazon EC2, Auto Scaling 및 기타 AWS 서비스와 함께 사용할 때 AWS Identity andAccess Management를 사용하여 서비스 전반의 권한을 관리할 수 있습니다. GameLift FleetIQ에 대한 AWS계정을 설정하려면 다음을 수행합니다.

• GameLift FleetIQ에서 사용할 AWS 계정을 생성합니다.• 게임과 관련된 AWS 서비스를 함께 사용하는 사용자 및 사용자 그룹에 대해 IAM 권한을 설정합니다.• Amazon EC2 인스턴스 및 Auto Scaling 그룹과 상호 작용할 수 있는 제한된 권한을 GameLift에 부여하는

관리형 IAM 역할을 생성합니다.

Amazon GameLift에서 사용할 계정 얻기Amazon Web Services를 열고 Sign In to the Console(콘솔에 로그인)을 선택합니다. 메시지를 따라 새 계정을 만들거나 기존 계정으로 로그인합니다.

IAM 사용자 및 사용자 그룹 정책 업데이트GameLift FleetIQ 게임 서버 그룹 및 관련 Amazon EC2 및 Auto Scaling 서비스와 함께 작업하는 사용자는 이러한 서비스의 해당 작업에 액세스할 수 있어야 합니다. 액세스 권한을 제공하려면 AWS Identity andAccess Management(IAM)에서 사용자 또는 사용자 그룹을 생성합니다.

IAM 콘솔을 열어 게임의 사용자 또는 사용자 그룹 집합을 정의합니다. 콘솔(또는 AWS CLI나 기타 도구)을사용하여 사용자 그룹을 설정하는 방법에 대한 자세한 지침은 IAM 사용자 생성을 참조하십시오. 권한을 사용자 또는 사용자 그룹으로 확장하려면 사용자가 액세스할 수 있는 AWS 서비스 및 작업 집합을 지정하는IAM 정책을 연결합니다. 다음 구문을 사용하여 인라인 사용자 지정 정책을 생성하고 이를 각 사용자 또는 사용자 그룹에 연결합니다.

GameLift FleetIQ_policy

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "*" }, {

버전197

Amazon GameLift 개발자 안내서AWS 계정 설정

"Action": [ "iam:CreateServiceLinkedRole" ], "Effect": "Allow", "Resource": "arn:*:iam::*:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" }, { "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:DescribeAutoScalingGroups", "autoscaling:PutLifecycleHook", "autoscaling:PutScalingPolicy", "autoscaling:UpdateAutoScalingGroup", "autoscaling:DeleteAutoScalingGroup" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "ec2:DescribeLaunchTemplates", "ec2:DescribeLaunchTemplateVersions", "ec2:RunInstances" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "events:EnableRule", "events:PutRule", "events:PutTargets" ], "Effect": "Allow", "Resource": "*" } ] }

IAM 서비스 역할 생성GameLift FleetIQ는 해당 스팟 리밸런싱 활동의 일환으로 GameLift FleetIQ 게임 서버 그룹과 연결된 AutoScaling 그룹, 인스턴스 및 수명 주기 후크를 액세스하고 수정해야 합니다. 이렇게 하려면 이러한 작업에 대한 제한된 권한을 GameLift에 부여하는 IAM 역할을 생성합니다. 자세한 내용은 IAM 사용 설명서의 AWS 서비스에 대한 역할 생성을 참조하십시오.

AWS CLI

다음 단계에서는 AWS CLI를 사용하여 필요한 역할을 생성하는 방법을 설명합니다.

1. 신뢰 정책용 JSON 파일 하나와 권한 정책용 JSON 파일 하나인 총 두 개의 JSON 파일을 생성합니다. 아래 표시된 구문을 복사합니다.

2. 새 IAM 역할을 생성하여 신뢰 정책 JSON에 연결합니다.

aws iam create-role --role-name Role-for-GameLift --assume-role-policy-document file://C:\policies\trustpolicyforGameLift.json

Linux에서 작업하는 경우 file://policies/trustpolicyforfiesta.json과 같은 JSON 파일을 참조합니다.

3. IAM 역할을 권한 정책 JSON으로 업데이트합니다.

버전198

Amazon GameLift 개발자 안내서AWS 계정 설정

aws iam put-role-policy --role-name Test-Role-for-Fiesta --policy-name Permissions-Policy-For-GameLift --policy-document file://C:\policies\permissionspolicyforGameLift.json

Linux에서 작업하는 경우 file://policies/permissionspolicyforfiesta.json과 같은JSON 파일을 참조합니다.

4. IAM 역할을 올바르게 구성했는지 테스트하려면 IAM 역할을 전달하는 CreateGameServerGroupAPI를 호출합니다. GameServerGroup이 ACTIVE 상태가 되면 GameLift FleetIQ는 사용자의 계정에서 예상대로 AWS 리소스를 수정할 수 있습니다.

신뢰 정책 구문

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "gamelift.amazonaws.com", "autoscaling.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

권한 정책 구문

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "*", "Condition": { "StringEquals": { "ec2:ResourceTag/GameLift": "GameServerGroups" } } }, { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction", "autoscaling:ResumeProcesses", "autoscaling:EnterStandby", "autoscaling:SetInstanceProtection", "autoscaling:UpdateAutoScalingGroup", "autoscaling:SuspendProcesses", "autoscaling:DetachInstances" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/GameLift": "GameServerGroups" } }

버전199

Amazon GameLift 개발자 안내서

}, { "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:DescribeInstances", "autoscaling:DescribeAutoScalingGroups", "ec2:DescribeLaunchTemplateVersions" ], "Resource": "*" }, { "Effect": "Allow", "Action": "sns:Publish", "Resource": [ "arn:aws:sns:*:*:ActivatingLifecycleHookTopic-*", "arn:aws:sns:*:*:TerminatingLifecycleHookTopic-*" ] } ]}

GameLift FleetIQ 시작하기게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

GameLift FleetIQ 사용을 시작하려면 온프레미스 또는 EC2 환경에서 실행되는 작동 게임 서버가 있어야 합니다. 게임 서버는 하나 또는 여러 게임 세션을 관리하거나, 하위 프로세스를 생성하거나, 컨테이너 내에서실행하는 단일 프로세스일 수 있습니다.

1. AWS 계정을 가져옵니다.

이미 하나 이상의 AWS 계정이 있는 경우 GameLift FleetIQ에 사용할 AWS 계정을 선택합니다. 이 계정 및사용자/사용자 그룹에는 게임에 사용되는 사용자의 Amazon EC2, Auto Scaling 및 기타 AWS 리소스를 관리할 수 있는 권한이 있어야 합니다. 자세한 내용은 IAM 사용자 및 사용자 그룹 정책 업데이트 (p. 197)단원을 참조하십시오. 이 시작 안내서의 뒷부분에서 서비스 간 권한을 관리할 IAM 역할을 생성합니다.

2. GameLift FleetIQ 기능을 사용하여 AWS SDK 및 AWS CLI를 가져옵니다.• AWS SDK의 최신 버전을 다운로드합니다.• AWS Command Line Interface 도구를 다운로드하여 설치합니다.• Amazon GameLift API 참조 문서를 봅니다.

3. GameLift FleetIQ와 함께 사용할 게임 서버를 준비합니다.

AWS SDK를 게임 서버에 통합하고 다음 세 가지 API를 구현합니다.• RegisterGameServer(): 게임 서버 프로세스가 시작될 때 한 번 호출됩니다.• UpdateGameServer(): 게임 서버의 상태 및 플레이어의 존재를 보고하기 위해 주기적으로 호출됩니다.• DeregisterGameServer(): 게임 서버가 종료될 때 한 번 호출됩니다.

이러한 API를 통해 GameLift FleetIQ가 게임 서버의 상태(호스트 플레이어가 사용할 수 있는지 또는 게임서버가 점유되었는지 여부)로 계속 업데이트됩니다. 이 정보를 통해 GameLift FleetIQ는 매치메이킹 시스템에 점유되지 않은 실행 가능 게임 서버 목록을 제공할 수 있으며, 리밸런싱 동안 해당 서버에서 플레이어와의 인스턴스가 종료되는 것을 방지할 수도 있습니다. 추가 지침 및 예제는 the section called “게임 서버 통합” (p. 201) 단원을 참조하십시오.

4. 게임 서버로 EC2 Amazon Machine Image(AMI)를 생성합니다.

버전200

Amazon GameLift 개발자 안내서게임 서버 통합

게임 서버 소프트웨어 및 기타 런타임 자산 또는 구성 설정을 사용하여 AMI를 생성합니다. 자세한 내용은Amazon EC2 사용 설명서의 Amazon Machine Images(AMI)를 참조하십시오.

5. EC2 시작 템플릿을 생성합니다.

사용자 지정 AMI를 사용하고 호스팅 리소스에 대한 네트워크 및 보안 설정을 정의하는 EC2 시작 템플릿을 빌드합니다. 이 작업은 나중에 수행되므로 시작 템플릿에 인스턴스 유형을 포함할 필요는 없습니다. 자세한 내용은 Amazon EC2 사용 설명서의 시작 템플릿 생성을 참조하십시오. 시작 템플릿과 AMI를 디버깅작업 단순화를 위해 GameLift FleetIQ와 함께 사용하기 전에 테스트하는 Auto Scaling 그룹을 직접 생성하는 것이 좋습니다.

6. IAM 역할 생성.

GameLift 서비스에 계정으로 Auto Scaling 그룹을 생성하고 업데이트할 수 있는 권한을 부여합니다.GameLift FleetIQ는 이 IAM 역할을 사용하여 인스턴스 유형 리밸런싱의 일부로 Auto Scaling 그룹의인스턴스를 업데이트합니다. 추가 지침 및 IAM 정책 구문은 GameLift FleetIQ에 대한 AWS 계정 설정 (p. 197) 단원을 참조하십시오.

7. GameLift FleetIQ 호스팅 리소스를 설정합니다.

게임 서버를 배포할 각 리전에서 CreateGameServerGroup()을 호출하여 게임 서버 그룹을 생성합니다.시작 템플릿(사용자 지정 AMI, 네트워크 및 보안 설정 포함), IAM 역할 및 게임을 실행할 수 있는 인스턴스유형 목록을 전달합니다. 이 작업은 GameLift FleetIQ에서 수정할 수 있는 AWS 계정의 Auto Scaling 그룹을 설정합니다. 추가 지침 및 예제는 게임 서버 그룹 생성 및 업데이트 (p. 203) 단원을 참조하십시오.

8. GameLift FleetIQ를 게임 클라이언트에 통합합니다.

게임 클라이언트, 매치메이커 또는 게임 서버 용량을 할당하는 기타 백엔드 구성 요소에 AWS SDK를 추가합니다. 게임 유형에 따라 매치메이커가 ListGameServers() 또는 ClaimGameServer()를 호출하여 서버용량을 확보하고 사용 가능한 게임 서버를 예약할 수 있습니다. 추가 지침 및 예제는 게임 클라이언트에GameLift FleetIQ 통합 (p. 202) 단원을 참조하십시오.

9. Auto Scaling 그룹을 확대합니다.

인스턴스가 Auto Scaling 그룹에서 프로비저닝되면 게임 서버가 시작됩니다. 그런 다음 각 게임 서버는GameLift FleetIQ에 사용 가능한 용량으로 등록되어 나중에 매치메이커에 의해 나열되거나 클레임됩니다.

10.게임을 테스트합니다.

매치메이커를 호출하고 ListGameServers 또는 ClaimGameServer를 호출하여 서버 용량을 요청합니다. 게임 클라이언트가 게임 서버에 연결할 수 있도록 결과 IP 및 포트를 게임 클라이언트에 다시 전달합니다.

게임 서버에 GameLift FleetIQ 통합

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

게임 서버 프로세스가 시작되어 실시간 게임 플레이를 호스팅할 준비가 되면 RegisterGameServer()를 호출하여 GameLift FleetIQ에 등록해야 합니다. 등록하면 GameLift FleetIQ가 서버 용량에 대한 매치메이킹 시스템 요청에 응답할 수 있습니다. 응답에는 게임 호스팅에 실행 가능한 스팟 인스턴스에서 사용 가능한 게임 서버 용량이 포함됩니다. 등록 시 게임 서버는 인바운드 클라이언트 연결에 사용하는 포트 및 IP 주소를 포함하여 관련 게임 서버 데이터 및 연결 정보를 GameLift FleetIQ에 제공할 수 있습니다.

aws gamelift register-game-server \ --game-server-id UniqueId-1234 \ --game-server-group-name MyLiveGroup \ --instance-id i-1234567890 \ --connection-info "1.2.3.4:123" \

버전201

Amazon GameLift 개발자 안내서게임 클라이언트 통합

--game-server-data "{\"key\": \"value\"}"

등록 후 게임 서버는 GameLift FleetIQ 상태를 동기화 상태로 유지하기 위해 해당 상태 및 플레이어에 의한점유 여부를 정기적으로 보고해야 합니다. UpdateGameServer()를 호출하여 상태 및 사용률 상태를 보고합니다. 아래 예에서는 게임 서버가 정상 상태이며 플레이어나 게임 플레이에 의해 아직 점유되지 않았음을 보고합니다.

aws gamelift update-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234 \ --health-check HEALTHY \ --utilization-status AVAILABLE

매치메이킹 시스템에서 서버 용량을 요청하면 ClaimGameServer()를 호출하여 GameLift FleetIQ에 게임 호스팅에 대해 실행 가능한 스팟 인스턴스에서 사용 가능한 게임 서버를 찾으라는 메시지를 표시합니다. 응답은 해당 클레임 상태가 60초 동안 CLAIMED로 설정된 GameServer 리소스를 식별합니다. 이 응답에는 클라이언트가 게임 서버에 연결하는 데 사용할 수 있는 연결 정보 및 게임 데이터도 포함될 수 있습니다.

게임에는 플레이어가 연결되고 게임 플레이가 시작된 후 게임 서버의 상태를 업데이트하는 게임 클라이언트,클라이언트 서비스 또는 게임 서버에 의해 트리거되는 메커니즘이 있어야 합니다. 이는 게임이 현재 게임 플레이를 지원 중임을 나타내기 위해 사용률 상태가 UTILIZED로 설정된 UpdateGameServer()를 호출함으로써 수행됩니다. 이 메커니즘은 GameLift FleetIQ에서 게임 서버 용량에 대한 후속 요청의 응답으로 이 게임서버를 제공하지 않음을 확인합니다.

aws update-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234 \ --health-check HEALTHY \ --utilization-status UTILIZED

게임이 종료되면 DeregisterGameServer()를 사용하여 GameLift FleetIQ에서 게임 서버의 등록을 취소해야합니다.

aws deregister-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234

게임 클라이언트에 GameLift FleetIQ 통합

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

게임 클라이언트 또는 매치메이커가 플레이어를 위한 게임 서버 리소스를 요청할 수 있는 방법을 생성합니다. 이 작업을 수행하는 방법에 대한 몇 가지 옵션이 있습니다.

• 사용 가능한 모든 게임 서버를 요청하고 사용할 게임 서버 하나를 선택합니다(“나열 및 선택”이라고도 함).• GameLift FleetIQ에서 사용 가능한 게임 서버를 선택하도록 합니다.

나열 및 선택 방법을 사용하려면 ListGameServers()를 호출하여 게임 클라이언트 또는 매치메이커가 사용가능한 게임 서버 목록을 요청하도록 합니다. 게임 서버 데이터를 사용하여 플레이어 또는 매치메이커가 게임 서버를 선택할 때 사용할 수 있는 추가 정보를 제공할 수 있습니다. 페이지 매김된 결과를 요청하고 사용자 지정 정렬 키를 사용하여 결과가 반환되는 방식을 제어할 수 있습니다. 다음 요청은 지정된 게임 서버 그룹에 있는 모든 활성 및 사용 가능한 게임 서버를 반환합니다.

버전202

Amazon GameLift 개발자 안내서게임 서버 그룹 생성 및 업데이트

aws gamelift list-game-servers \ --game-server-group-name MyLiveGroup

플레이어 또는 매치메이커는 적합한 게임 서버를 선택하고 해당 게임 서버 ID로 ClaimGameServer()를 호출하여 해당 게임 서버를 클레임할 수 있습니다. 이 시나리오에서는 GameLift FleetIQ가 해당 인스턴스 유형 최적화 로직 중 어떤 것도 실행하지 않습니다.

aws GameLift FleetIQ claim-game-server \ --game-server-group-name MyLiveGroup \ -–client-token 12345 \ --game-server-id UniqueId-1234

GameLift FleetIQ에서 사용 가능한 게임 서버를 선택하도록 하려면 게임 서버 ID를 지정하지 않고ClaimGameServer()를 호출합니다. 이 시나리오에서는 GameLift FleetIQ가 게임 호스팅에 대해 실행 가능하며 자동 조정에 최적화된 인스턴스에서 게임 서버를 찾는 해당 로직을 실행합니다.

aws GameLift FleetIQ claim-game-server \ --game-server-group-name MyLiveGroup \ -–client-token 12345

클레임 요청에 대한 응답으로 GameLift FleetIQ는 클라이언트가 게임 서버에 연결하는 데 사용할 수 있는 GameServer 리소스, 연결 정보 및 게임 데이터를 식별합니다. 게임 서버의 클레임 상태는 60초 동안CLAIMED로 설정됩니다. 게임에는 플레이어가 연결되고 게임 플레이가 시작된 후 게임 서버의 상태를 업데이트하는 게임 클라이언트, 클라이언트 서비스 또는 게임 서버에 의해 트리거되는 메커니즘이 있어야합니다. 이는 게임이 현재 게임 플레이를 지원 중임을 나타내기 위해 사용률 상태가 UTILIZED로 설정된UpdateGameServer()를 호출함으로써 수행됩니다. 이 메커니즘은 GameLift FleetIQ에서 게임 서버 용량에대한 후속 요청의 응답으로 이 게임 서버를 제공하지 않음을 확인합니다.

aws update-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234 \ --health-check HEALTHY \ --utilization-status UTILIZED

게임 서버 그룹 생성 및 업데이트

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

게임 서버 그룹을 생성하려면 CreateGameServerGroup()을 호출합니다. 다음 예에서는 Auto Scaling그룹에 대한 c4.large 및 c5.large 인스턴스 유형을 지정하고 그룹을 스팟 인스턴스로만 제한하는GameServerGroup이 생성됩니다. 짧은 프로비저닝 기간 후 AutoScalingGroup 리소스가 생성되고GameServerGroup이 ACTIVE 상태가 됩니다.

aws gamelift create-game-server-group \ --game-server-group-name MyLiveGroup \ --role-arn arn:aws:iam:: 123456789012 :role/ GameLiftGSGRole \ --min-size 1 \ --max-size 10 \ --game-server-protection-policy FULL_PROTECTION \ --balancing-strategy SPOT_ONLY \ --launch-template LaunchTemplateId=lt-012ab345cde6789ff \ --instance-definitions '[{"InstanceType": "c4.large"}, {"InstanceType": "c5.large"}]' \ --auto-scaling-policy '{"TargetTrackingConfiguration": {"TargetValue": 66}}'

버전203

Amazon GameLift 개발자 안내서모범 사례

Auto Scaling 그룹에 대한 인스턴스 유형 속성은 정기적으로 GameLift FleetIQ에서 덮어쓰여지고 AutoScaling 그룹에서 직접 업데이트되지 않아야 합니다. GameLift FleetIQ에서 덮어쓰는 속성을 업데이트하려면 UpdateGameServerGroup()을 호출합니다. 게임 서버 그룹을 변경한 후 GameLift FleetIQ에서 변경 사항을 Auto Scaling 그룹에 전파합니다. MinSize, MaxSize, LaunchTemplate 등의 기타 속성은 Auto Scaling그룹에서 직접 수정할 수 있습니다.

아래 예에서 인스턴스 유형은 c4.xlarge 및 c5.xlarge 인스턴스 유형으로 전환하도록 업데이트되었습니다.

aws fiesta update-game-server-group \ --game-server-group-name MyLiveGroup \ --instance-definitions '[{"InstanceType": "c4.xlarge"}, {"InstanceType": "c5.xlarge"}]'

GameLift FleetIQ 모범 사례게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

GameLift FleetIQ는 게임 호스팅을 위한 저비용 Amazon EC2 리소스를 관리하는 데 도움이 되는 저수준 로직 계층입니다. GameLift FleetIQ는 게임 호스팅에 대해 실행 가능한 스팟 인스턴스만 포함하도록 게임 서버그룹을 최적화하여 게임 세션이 중단될 가능성을 최소화합니다. 사용 가능한 게임 서버를 추적하고 실행 가능성이 높은 저렴한 게임 서버로 게임 플레이를 라우팅하는 기본적인 게임 호스팅 기능을 제공합니다.

독립형 기능으로 사용되는 GameLift FleetIQ는 호스팅 비용 최소화를 위해 FleetIQ도 사용하는 전체GameLift 관리형 솔루션과 함께 제공되는 고급 기능은 제공하지 않습니다. 매치메이킹, 지연 시간 기반 플레이어 라우팅, 게임 세션 및 플레이어 세션 관리, 버전 관리 등의 기능이 필요한 경우 GameLift 관리형 솔루션을 살펴보십시오.

다음은 GameLift FleetIQ의 이점을 최대한 활용하는 데 도움이 될 수 있는 몇 가지 모범 사례입니다.

• 세션 기반 게임에 GameLift FleetIQ 사용. GameLift FleetIQ는 게임 세션이 중단될 가능성이 가장 적은인스턴스로 플레이어를 지속적으로 유도할 때 가장 효과적입니다. 장기간 세션을 유지하면 GameLiftFleetIQ 리밸런싱 프로세스가 방해되어 게임 세션이 중단될 가능성이 높아집니다. 이상적인 워크플로는 플레이어가 매치메이킹(또는 서버 선택)에서 게임 플레이로 이동하는 것입니다. 게임이 종료되면 플레이어는 매치메이킹으로 돌아가고 새 인스턴스의 다른 게임 서버로 라우팅됩니다. 세션이 두 시간 미만인 게임에 GameLift FleetIQ를 사용하는 것이 좋습니다.

• 다양한 인스턴스 유형을 선택할 수 있도록 제공. 게임 서버 그룹을 설정할 때 사용할 인스턴스 유형 목록을 제공합니다. 더 많은 인스턴스 유형을 포함할수록 GameLift FleetIQ에서 게임 호스팅에 실행 가능성이 높은 스팟 인스턴스를 사용하는 유연성도 증가합니다. 예를 들어, 동일한 인스턴스 패밀리(c5.large,c5.xlarge, c5.2xlarge, c5.4xlarge) 내 여러 크기를 나열할 수도 있습니다. 인스턴스가 클수록 각 인스턴스에서 더 많은 게임 서버를 실행할 수 있으므로 잠재적으로 비용을 절감할 수 있습니다. 인스턴스가 작을수록 자동 크기 조정은 플레이어 수요의 변화에 더 빠르게 대응할 수 있습니다. 원하는 인스턴스 유형 목록에는 우선 순위가 없습니다. Auto Scaling 그룹은 실행 가능한 인스턴스 유형의 밸런스를 이용해 그룹의 복원력을 유지합니다.

• 모든 인스턴스 유형에서 게임을 테스트합니다. 게임 서버 그룹에 대해 구성하는 모든 인스턴스 유형에서게임 서버가 제대로 실행되는지 확인합니다.

• 인스턴스 용량 가중치를 사용합니다. 다양한 인스턴스 크기(예: c5.2xlarge, c5.4xlarge, c5.12xlarge)를 사용하도록 게임 서버 그룹을 구성하는 경우 각 인스턴스 유형에 대한 용량 가중치 정보를 포함합니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서의 Amazon EC2 Auto Scaling용 인스턴스 가중치 부여를 참조하십시오.

• GameLift FleetIQ를 사용하여 게임 세션 배치. 플레이어 그룹을 게임 서버에 배치할 때 GameLift APIClaimGameServer()를 사용합니다. 이렇게 하면 GameLift FleetIQ에서 게임 세션이 중단될 가능성이 높은 인스턴스에 플레이어를 배치하는 일이 방지됩니다.

버전204

Amazon GameLift 개발자 안내서CloudWatch로 모니터링

• 게임 서버 상태를 GameLift FleetIQ에 보고. GameLift API UpdateGameServer()를 사용하여 서버 상태및 사용률 상태를 주기적으로 보고합니다. 정확한 게임 서버 상태를 유지하면 GameLift FleetIQ에서 게임플레이를 보다 효율적으로 배치할 수 있을 뿐만 아니라, 스팟 리밸런싱 활동 중에 활성 게임 플레이가 있는인스턴스가 종료되는 일을 방지할 수 있습니다.

• AutoScaling 정책 설정. 플레이어 사용률 및 예상 수요에 따라 호스팅 용량을 유지하는 대상 추적 조정 정책을 생성할 수 있습니다. GameLift FleetIQ 지표 PercentUtilizedGameServers는 현재 사용 중인 호스팅 용량의 크기를 측정한 것입니다. 대부분의 게임은 새 플레이어가 게임에 빠르게 참가할 수 있도록 사용되지 않는 게임 서버의 버퍼를 유지하려고 합니다. 플레이어 수요 변동에 따라 인스턴스를 추가하거나제거하여 특정 버퍼 크기를 유지하는 조정 정책을 생성할 수 있습니다. 자세한 내용은 Amazon EC2 AutoScaling 사용 설명서의 Target Tracking Scaling Policies(대상 추적 조정 정책)를 참조하십시오.

• 개발과 프로덕션 환경에 서로 다른 AWS 계정 사용. 전체 계정에서 개발과 프로덕션 구성을 분리하면 잘못된 구성이 라이브 플레이어에게 영향을 미치는 위험을 줄일 수 있습니다.

• 프로덕션 환경에서 게임 서버 그룹에 대한 게임 세션 보호를 활성화합니다. 플레이어를 보호하려면 게임세션 보호 기능을 설정하고 조정 또는 리밸런싱 활동으로 인해 활성 게임 세션이 조기에 종료되는 것을 방지합니다.

• GameLift FleetIQ와 통합하기 전에 EC2에서 게임을 테스트합니다. 먼저 EC2에서 게임을 시작 및 실행하고 구성을 미세 조정하는 것이 좋습니다. 그런 다음 동일한 시작 템플릿 및 AMI를 사용하여 게임 서버 그룹을 생성할 수 있습니다.

Kubernetes를 사용 중인 경우 먼저 Kubernetes 클러스터에 표준 EC2 인스턴스를 추가한 다음 Kubernetes클러스터의 작업자 노드에 대해 생성한 시작 템플릿을 사용하여 게임 서버 그룹을 생성하는 것이 좋습니다. EKS를 사용 중인 경우 EKS 클러스터 및 게임 서버 그룹을 별도로 생성합니다. 게임 서버 그룹의 경우EKS 최적화 AMI를 EKS 통합에 사용되는 적절한 사용자 데이터 및 시작 템플릿 구성과 함께 사용합니다.EKS 작업자 노드 및 EKS 최적화 AMI에 대한 자세한 내용은 Amazon EKS 최적화 Linux AMI 안내서를 참조하십시오.

또한 다음 AWS 모범 사례를 검토하십시오.

• Amazon EC2의 모범 사례• Amazon EC2 Auto Scaling의 모범 사례

Amazon CloudWatch를 사용한 GameLift FleetIQ 모니터링

게임 서버 그룹이 있는 Amazon GameLift FleetIQ은 현재 프리뷰 버전이 출시 중이기 때문에 변경될 수 있습니다. 관리형 GameLift의 기능인 FleetIQ는 변경되지 않습니다.

Amazon CloudWatch 지표를 사용하여 인스턴스 용량을 확장하고, 작업 대시보드를 빌드하고, 경보를 트리거합니다. 독립 실행형 솔루션으로서 GameLift FleetIQ는 AWS 계정에 일련의 Amazon CloudWatch 지표를 내보냅니다. 또한 Amazon EC2 Auto Scaling 사용 설명서에서 Amazon CloudWatch를 사용하여 Auto-scaling 그룹 및 인스턴스 모니터링을 참조하십시오.

FleetIQ 지표는 다음과 같습니다. FleetIQ에 대한 GameLift 지표 (p. 181) 단원에서 GameLift FleetIQ에 대한전체 Amazon CloudWatch 지표 정보를 참조하십시오

• AvailableGameServers

• UtilizedGameServers

• DrainingAvailableGameServers

• DrainingUtilizedGameServers

• PercentUtilizedGameServers

버전205

Amazon GameLift 개발자 안내서CloudWatch로 모니터링

• GameServerInterruptions

• InstanceInterruptions

버전206

Amazon GameLift 개발자 안내서데이터 보호

Amazon GameLift의 보안Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

AWS에서는 클라우드 보안을 가장 중요하게 생각합니다. AWS 고객은 보안에 가장 보안에 민감한 조직의 요구 사항에 부합하도록 구축된 데이터 센터 및 네트워크 아키텍처의 혜택을 누릴 수 있습니다.

보안은 AWS와 귀하의 공동 책임입니다. 공동 책임 모델은 이 사항을 클라우드의 보안 및 클라우드 내 보안으로 설명합니다.

• 클라우드의 보안 – AWS는 AWS 클라우드에서 AWS 서비스를 실행하는 인프라를 보호합니다. AWS는 또한 안전하게 사용할 수 있는 서비스를 제공합니다. 타사 감사자는 AWS 규정 준수 프로그램의 일환으로 보안 효과를 정기적으로 테스트하고 검증합니다. Amazon GameLift에 적용되는 규정 준수 프로그램에 대한자세한 내용은 규정 준수 프로그램 제공 범위 내 AWS 서비스를 참조하십시오.

• 클라우드 내 보안 – 귀하의 책임은 귀하가 사용하는 AWS 서비스에 의해 결정됩니다. 또한 귀하는 데이터의 민감도, 회사 요구 사항, 관련 법률 및 규정을 비롯한 기타 요소에 대해서도 책임이 있습니다.

이 설명서는 GameLift 사용 시 책임 분담 모델을 적용하는 방법을 이해하는 데 도움이 됩니다. 다음 항목에서는 보안 및 규정 준수 목표를 충족하도록 GameLift를 구성하는 방법을 보여줍니다. 또한 GameLift 리소스를모니터링하고 보호하는 데 도움이 되는 다른 AWS 서비스를 사용하는 방법을 배우게 됩니다.

주제• GameLift의 데이터 보호 (p. 207)• GameLift의 자격 증명 및 액세스 관리 (p. 209)• GameLift를 사용한 로깅 및 모니터링 (p. 220)• GameLift의 규정 준수 확인 (p. 220)• GameLift의 복원성 (p. 221)• GameLift의 인프라 보안 (p. 221)• GameLift에서 구성 및 취약성 분석 (p. 222)• Amazon GameLift의 보안 모범 사례 (p. 222)

GameLift의 데이터 보호Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

Amazon GameLift 서비스는 AWS 공동 책임 모델을 준수하며, 이 모델에는 데이터 보호 관련 규정 및 지침이포함되어 있습니다. AWS는 모든 AWS 서비스를 실행하는 글로벌 인프라를 보호할 책임이 있습니다. AWS는 고객 콘텐츠 및 개인 데이터의 처리를 위한 보안 구성 제어 등 이 인프라에서 호스팅하는 데이터에 대한제어권을 보유합니다. 데이터 제어자 또는 데이터 처리자의 역할을 담당하는 AWS 고객과 APN 파트너는AWS 클라우드에 올린 모든 개인 데이터에 대해 책임을 집니다.

데이터 보호를 위해 AWS 계정 자격 증명을 보호하고 AWS Identity and Access Management (IAM)을 사용하여 개별 사용자 계정을 설정하여 각 사용자에게 직무를 수행하는 데 필요한 권한만 부여하는 것이 좋습니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.

• 각 계정마다 멀티 팩터 인증(MFA)을 사용합니다.• SSL/TLS를 사용하여 AWS 리소스와 통신합니다.

버전207

Amazon GameLift 개발자 안내서저장된 암호화

• AWS CloudTrail로 API 및 사용자 활동 로깅을 설정합니다.• AWS 암호화 솔루션을 AWS 서비스 내의 모든 기본 보안 컨트롤과 함께 사용합니다.• Amazon S3에 저장된 개인 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리

형 보안 서비스를 사용합니다.

이름 필드와 같은 자유 형식 필드에 고객 계정 번호와 같은 중요 식별 정보를 절대 입력하지 마십시오. 여기에는 GameLift 또는 기타 AWS 제품에서 콘솔, API, AWS CLI 또는 AWS SDK를 사용하여 작업하는 경우가포함됩니다. GameLift 또는 기타 서비스에 입력하는 모든 데이터는 진단 로그에 포함하기 위해 선택될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명 정보를 URL에 포함시키지 마십시오.

GameLift 고유 데이터는 다음과 같이 처리됩니다.

• GameLift에 업로드하는 게임 서버 빌드 및 스크립트는 Amazon S3에 저장됩니다. 이 데이터는 업로드한후에 고객이 직접 액세스할 수 없습니다. 권한 있는 사용자는 파일을 업로드하기 위한 임시 액세스 권한을얻을 수 있지만 Amazon S3에서 직접 파일을 보거나 업데이트할 수는 없습니다. 스크립트 및 빌드를 삭제하려면 GameLift 콘솔 또는 서비스 API를 사용합니다.

• 게임 세션 로그 데이터는 게임 세션이 완료된 후 일정 기간 동안 Amazon S3에 저장됩니다. 권한 있는 사용자는 GameLift 콘솔의 링크를 통해 다운로드하거나 서비스 API를 호출하여 로그 데이터에 액세스할 수 있습니다.

• 지표 및 이벤트 데이터는 GameLift에 저장되며 GameLift 콘솔을 통해 또는 서비스 API를 호출하여 액세스할 수 있습니다. 플릿, 인스턴스, 게임 세션 배치, 매치메이킹 티켓, 게임 세션 및 플레이어 세션에서 데이터를 검색할 수 있습니다. Amazon CloudWatch 및 CloudWatch 이벤트를 통해 데이터에 액세스할 수도 있습니다.

• 고객이 제공한 데이터는 GameLift에 저장됩니다. 권한 있는 사용자는 서비스 API 호출을 통해 액세스할 수있습니다. 잠재적으로 민감한 데이터에는 플레이어 데이터, 플레이어 세션 및 게임 세션 데이터(연결 정보포함), 자동 매치메이커 데이터 등이 포함될 수 있습니다.

Note

요청에 사용자 지정 플레이어 ID를 제공하는 경우 이러한 값은 익명화된 UUID이며 플레이어 식별 정보를 포함하지 않아야 합니다.

데이터 보호에 대한 자세한 내용은 AWS 보안 블로그에서 AWS 공동 책임 모델 및 GDPR 블로그 게시물을참조하십시오.

저장된 암호화GameLift 고유 데이터의 유휴 데이터 암호화는 다음과 같이 처리됩니다.

• 게임 서버 빌드 및 스크립트는 서버 측 암호화를 사용하여 Amazon S3 버킷에 저장됩니다.• 고객이 제공한 데이터는 암호화된 형식으로 GameLift에 저장됩니다.

전송 중 데이터 암호화GameLift API에 대한 연결은 보안(SSL) 연결을 통해 이루어지며 AWS 서명 버전 4를 사용하여 인증됩니다(AWS CLI 또는 AWS SDK를 통해 연결할 경우 서명이 자동으로 처리됨). 인증은 연결에 사용되는 보안 자격증명에 대한 IAM 정의 액세스 정책을 사용하여 관리됩니다.

게임 클라이언트와 게임 서버 간의 직접 통신은 다음과 같습니다.

• GameLift 리소스에서 호스팅되는 사용자 지정 게임 서버의 경우 통신에 GameLift 서비스가 관련되지 않습니다. 이 통신의 암호화는 고객의 책임입니다. TLS가 활성화된 플릿을 사용하면 게임 클라이언트가 연결시 게임 서버를 인증하고 게임 클라이언트와 게임 서버 간의 모든 통신을 암호화할 수 있습니다.

버전208

Amazon GameLift 개발자 안내서인터네트워크 트래픽 개인 정보 보호

• TLS 인증서 생성이 활성화된 Realtime 서버의 경우 Realtime Client SDK를 사용하는 게임 클라이언트와Realtime 서버 간의 트래픽이 전송 중에 암호화됩니다. TCP 트래픽은 TLS 1.2를 사용하여 암호화되고,UDP 트래픽은 DTLS 1.2를 사용하여 암호화됩니다.

인터네트워크 트래픽 개인 정보 보호GameLift 인스턴스에 안전하게 원격으로 액세스할 수 있습니다. Linux를 사용하는 인스턴스의 경우 SSH가 원격 액세스를 위한 보안 통신 채널을 제공합니다. Windows를 실행하는 인스턴스의 경우 RDP(원격 데스크톱 프로토콜) 클라이언트를 사용합니다. GameLift FleetIQ의 경우, AWS Systems Manager SessionManager 및 Run Command를 사용하는 인스턴스에 대한 원격 액세스는 TLS 1.2를 사용하여 암호화되며, 연결을 생성하기 위한 요청은 SigV4를 사용하여 서명됩니다. 관리형 GameLift 인스턴스 연결에 대한 도움말은GameLift 플릿 인스턴스에 원격으로 액세스 (p. 113) 단원을 참조하십시오.

GameLift의 자격 증명 및 액세스 관리AWS Identity and Access Management(IAM)는 관리자가 AWS 리소스에 대한 액세스를 안전하게 제어할 수있도록 지원하는 AWS 서비스입니다. IAM 관리자는 GameLift 리소스를 사용하기 위해 인증(로그인) 및 권한부여(권한 있음)할 수 있는 사람을 제어합니다. IAM은 추가 비용 없이 사용할 수 있는 AWS 서비스입니다.

주제• 대상 (p. 209)• 자격 증명을 통한 인증 (p. 209)• 정책을 사용하여 액세스 관리 (p. 211)• GameLift에서 IAM를 사용하는 방법 (p. 212)• GameLift 자격 증명 기반 정책 예제 (p. 215)• GameLift 자격 증명 및 액세스 문제 해결 (p. 218)

대상AWS Identity and Access Management(IAM) 사용 방법은 GameLift에서 하는 작업에 따라 달라집니다.

서비스 사용자 – GameLift 서비스를 사용하여 작업을 수행하는 경우 필요한 자격 증명과 권한을 관리자가 제공합니다. 더 많은 GameLift 기능을 사용하여 작업을 수행하게 되면 추가 권한이 필요할 수 있습니다. 액세스권한 관리 방식을 이해하면 적절한 권한을 관리자에게 요청할 수 있습니다. GameLift의 기능에 액세스할 수없는 경우 GameLift 자격 증명 및 액세스 문제 해결 (p. 218) 단원을 참조하십시오.

서비스 관리자 – 회사에서 GameLift 리소스를 책임지고 있는 경우 GameLift에 대한 전체 액세스를 가지고있을 것입니다. 서비스 관리자는 직원이 액세스해야 하는 GameLift 기능과 리소스를 결정합니다. 그런 다음IAM 관리자에게 요청을 제출하여 서비스 사용자의 권한을 변경합니다. 이 페이지의 정보를 검토하여 IAM의기본 개념을 이해하십시오. 회사가 GameLift에서 IAM을 사용하는 방법에 대해 자세히 알아보려면 GameLift에서 IAM를 사용하는 방법 (p. 212) 단원을 참조하십시오.

IAM 관리자 – IAM 관리자는 GameLift에 대한 액세스 권한을 관리할 수 있는 정책을 작성하는 방법에 대해자세히 알아보고 싶을 수 있습니다. IAM에서 사용할 수 있는 예제 GameLift 자격 증명 기반 정책을 보려면GameLift 자격 증명 기반 정책 예제 (p. 215) 단원을 참조하십시오.

자격 증명을 통한 인증인증은 ID 자격 증명을 사용하여 AWS에 로그인하는 방식입니다. AWS Management 콘솔을 사용하여 로그인하는 방법에 대한 자세한 내용은 IAM 사용 설명서의 IAM 콘솔 및 로그인 페이지를 참조하십시오.

버전209

Amazon GameLift 개발자 안내서자격 증명을 통한 인증

AWS 계정 루트 사용자, class="non-printable-char non-printable-space"> IAM class="non-printable-charnon-printable-space"> 사용자로서 class="non-printable-char non-printable-space"> 또는 class="non-printable-char non-printable-space"> IAM class="non-printable-char non-printable-space"> 역할을class="non-printable-char non-printable-space"> 수임하여 class="non-printable-char non-printable-space">인증(AWS에 class="non-printable-char non-printable-space"> 로그인)되어야 class="non-printable-charnon-printable-space"> 합니다. 회사의 싱글 사인온(SSO) 인증을 사용하거나 Google 또는 Facebook을 사용하여 로그인할 수도 있습니다. 이러한 경우 관리자는 이전에 IAM 역할을 사용하여 자격 증명 연동을 설정한것입니다. 다른 회사의 자격 증명을 사용하여 AWS에 액세스하면 간접적으로 역할을 가정하는 것입니다.

AWS Management 콘솔에 직접 로그인하려면 루트 사용자 이메일이나 IAM 사용자 이름과 비밀번호를 사용하십시오. 루트 사용자 또는 IAM 사용자 액세스 키를 사용하여 프로그래밍 방식으로 AWS에 액세스할 수있습니다. AWS는 자격 증명을 사용하여 암호화 방식으로 요청에 서명할 수 있는 SDK 및 명령줄 도구를 제공합니다. AWS 도구를 사용하지 않는 경우 요청에 직접 서명해야 합니다. 이렇게 하려면 인바운드 API 요청을 인증하기 위한 프로토콜인 서명 버전 4를 사용합니다. 요청 인증에 대한 자세한 정보는 AWS GeneralReference의 서명 버전 4 서명 프로세스 단원을 참조하십시오.

사용하는 인증 방법에 상관 없이 추가 보안 정보를 제공해야 할 수도 있습니다. 예를 들어, AWS는 멀티 팩터인증(MFA)을 사용하여 계정의 보안을 강화하는 것을 권장합니다. 자세한 내용은 IAM 사용 설명서의 AWS에서 Multi-Factor Authentication(MFA) 사용을 참조하십시오.

AWS 계정 루트 사용자AWS 계정을 처음 생성할 때는 해당 계정의 모든 AWS 서비스 및 리소스에 대한 완전한 액세스 권한이 있는SSO(Single Sign-In) ID로 시작합니다. 이 자격 증명은 AWS 계정 루트 사용자라고 하며, 계정을 생성할 때사용한 이메일 주소와 암호로 로그인하여 액세스합니다. 일상적인 작업은 물론 관리 작업에도 루트 사용자를사용하지 않는 것이 좋습니다. 대신 IAM 사용자를 처음 생성할 때만 루트 사용자를 사용하는 모범 사례를 준수하십시오. 그런 다음 루트 사용자 자격 증명을 안전하게 보관해 두고 몇 가지 계정 및 서비스 관리 작업을수행할 때만 해당 자격 증명을 사용합니다.

IAM 사용자 및 그룹IAM 사용자는 단일 개인 또는 애플리케이션에 대한 특정 권한을 가지고 있는 AWS 계정 내 ID입니다. IAM 사용자에게는 사용자 이름과 암호 또는 액세스 키 세트와 같은 장기 자격 증명이 있을 수 있습니다. 액세스 키를 생성하는 방법을 알아보려면 IAM 사용 설명서의 IAM 사용자의 액세스 키 관리를 참조하십시오. IAM 사용자의 액세스 키를 생성할 때는 키 페어를 보고 안전하게 저장해야 합니다. 향후에 보안 액세스 키를 복구할수 없습니다. 그 대신 새 액세스 키 페어를 생성해야 합니다.

IAM 그룹은 IAM 사용자 컬렉션을 지정하는 ID입니다. 그룹으로 로그인할 수 없습니다. 그룹을 사용하여 여러 사용자의 권한을 한 번에 지정할 수 있습니다. 그룹을 사용하면 대규모 사용자 집합의 권한을 더 쉽게 관리할 수 있습니다. 예를 들어, IAMAdmins이라는 그룹이 있고 이 그룹에 IAM 리소스를 관리할 권한을 부여할수 있습니다.

사용자는 역할과 다릅니다. 사용자는 한 사람 또는 애플리케이션과 고유하게 연결되지만, 역할은 해당 역할이 필요한 사람이라면 누구나 수임할 수 있습니다. 사용자는 영구적인 장기 자격 증명을 가지고 있지만, 역할은 임시 자격 증명만 제공합니다. 자세한 내용은 IAM 사용 설명서의 IAM사용자(역할 대신)를 생성하는 경우를 참조하십시오.

IAM 역할IAM 역할은 특정 권한을 가지고 있는 AWS 계정 내 ID입니다. 이 역할은 IAM 사용자와 비슷하지만, 특정 개인과 연결되지 않습니다. 역할을 전환하여 AWS Management 콘솔에서 IAM 역할을 임시로 수임할 수 있습니다. AWS CLI 또는 AWS API 작업을 호출하거나 사용자 지정 URL을 사용하여 역할을 수임할 수 있습니다.역할 사용 방법에 대한 자세한 내용은 IAM 사용 설명서의 IAM 역할 사용을 참조하십시오.

임시 자격 증명이 있는 IAM 역할은 다음과 같은 상황에서 유용합니다.

• 임시 IAM 사용자 권한 – IAM 사용자는 IAM 역할을 수임하여 특정 작업에 대한 다른 권한을 임시로 받을 수있습니다.

버전210

Amazon GameLift 개발자 안내서정책을 사용하여 액세스 관리

• 연합된 사용자 액세스 – IAM 사용자를 생성하는 대신 AWS Directory Service의 기존 ID, 엔터프라이즈 사용자 디렉터리 또는 웹 ID 공급자를 사용할 수 있습니다. 이 사용자를 연합된 사용자라고 합니다. AWS에서는 ID 공급자를 통해 액세스가 요청되면 연합된 사용자에게 역할을 할당합니다. 연합된 사용자에 대한자세한 내용은 IAM 사용 설명서의 연합된 사용자 및 역할을 참조하십시오.

• 교차 계정 액세스 – IAM 역할을 사용하여 다른 계정의 사용자(신뢰할 수 있는 보안 주체)가 내 계정의 리소스에 액세스하도록 할 수 있습니다. 역할은 교차 계정 액세스를 부여하는 기본적인 방법입니다. 그러나 일부 AWS 서비스를 사용하면 역할을 프록시로 사용하는 대신 리소스에 정책을 직접 연결할 수 있습니다. 교차 계정 액세스를 위한 역할과 리소스 기반 정책의 차이점을 알아보려면 IAM 사용 설명서의 IAM 역할과리소스 기반 정책의 차이를 참조하십시오.

• AWS 서비스 액세스 – 서비스 역할은 서비스가 사용자를 대신하여 사용자 계정에서 작업을 수행하기 위해수임하는 IAM 역할입니다. 일부 AWS 서비스 환경을 설정할 때 서비스에서 맡을 역할을 정의해야 합니다.이 서비스 역할에는 서비스가 AWS 리소스에 액세스하는 데 필요한 모든 권한이 포함되어야 합니다. 서비스 역할은 서비스마다 다르지만 해당 서비스에 대한 문서화된 요구 사항을 충족하는 한 대부분의 경우 권한을 선택할 수 있습니다. 서비스 역할은 해당 계정 내 액세스 권한만 제공하며 다른 계정의 서비스에 대한액세스 권한을 부여하는 데 사용될 수 없습니다. IAM 내에서 서비스 역할을 생성, 수정 및 삭제할 수 있습니다. 예를 들어 Amazon Redshift에서 사용자 대신 Amazon S3 버킷에 액세스하도록 허용하는 역할을 생성한 후 해당 버킷에 있는 데이터를 Amazon Redshift 클러스터로 로드할 수 있습니다. 자세한 내용은 IAM사용 설명서의 AWS 서비스에 대한 권한을 위임할 역할 생성을 참조하십시오.

• Amazon EC2에서 실행 중인 애플리케이션 – IAM 역할을 사용하여 EC2 인스턴스에서 실행되고 AWS CLI또는 AWS API 요청을 수행하는 애플리케이션의 임시 자격 증명을 관리할 수 있습니다. 이는 EC2 인스턴스 내에 액세스 키를 저장할 때 권장되는 방법입니다. EC2 인스턴스에 AWS 역할을 할당하고 해당 역할을모든 애플리케이션에서 사용할 수 있도록 하려면 인스턴스에 연결된 인스턴스 프로파일을 생성합니다. 인스턴스 프로파일에는 역할이 포함되어 있으며 EC2 인스턴스에서 실행되는 프로그램이 임시 자격 증명을얻을 수 있습니다. 자세한 내용은 IAM 사용 설명서의 IAM 역할을 사용하여 Amazon EC2 인스턴스에서 실행되는 애플리케이션에 권한 부여를 참조하십시오.

IAM 역할을 사용할지 여부를 알아보려면 IAM 사용 설명서의 사용자 대신 IAM 역할을 생성해야 하는 경우를참조하십시오.

정책을 사용하여 액세스 관리정책을 생성하고 IAM 자격 증명 또는 AWS 리소스에 연결하여 AWS 액세스를 제어합니다. 정책은 자격 증명이나 리소스와 연결될 때 해당 권한을 정의하는 AWS의 객체입니다. AWS는 엔터티(루트 사용자, IAM 사용자 또는 IAM 역할)가 요청을 보낼 때 이러한 정책을 평가합니다. 정책에서 권한은 요청이 허용되거나 거부되는지 여부를 결정합니다. 대부분의 정책은 AWS에 JSON 문서로서 저장됩니다. JSON 정책 문서의 구조와콘텐츠에 대한 자세한 내용은 IAM 사용 설명서의 JSON 정책 개요를 참조하십시오.

IAM 관리자는 AWS 리소스에 액세스할 수 있는 사람과 해당 리소스에 대해 수행할 수 있는 작업을 지정할 수있습니다. 모든 IAM 엔터티(사용자 또는 역할)는 처음에는 권한이 없습니다. 다시 말해, 기본적으로 사용자는아무 작업도 수행할 수 없으며, 자신의 암호를 변경할 수도 없습니다. 사용자에게 작업을 수행할 권한을 부여하기 위해 관리자는 사용자에게 권한 정책을 연결해야 합니다. 또한 관리자는 의도한 권한을 가지고 있는 그룹에 사용자를 추가할 수 있습니다. 관리자가 그룹에 권한을 부여하면 그룹의 모든 사용자가 해당 권한을 받습니다.

IAM 정책은 작업을 실행하기 위한 방법과 상관없이 작업을 정의합니다. 예를 들어, iam:GetRole 작업을허용하는 정책이 있다고 가정합니다. 해당 정책이 있는 사용자는 AWS Management 콘솔, AWS CLI 또는AWS API에서 역할 정보를 가져올 수 있습니다.

자격 증명 기반 정책자격 증명 기반 정책은 IAM 사용자, 역할 또는 그룹과 같은 자격 증명에 연결할 수 있는 JSON 권한 정책 문서입니다. 이러한 정책은 자격 증명이 수행할 수 있는 작업, 대상 리소스 및 이에 관한 조건을 제어합니다. 자격 증명 기반 정책을 생성하는 방법을 알아보려면 IAM 사용 설명서의 IAM 정책 생성을 참조하십시오.

자격 증명 기반 정책은 인라인 정책 또는 관리형 정책으로 한층 더 분류할 수 있습니다. 인라인 정책은 단일사용자, 그룹 또는 역할에 직접 포함됩니다. 관리형 정책은 AWS 계정에 속한 다수의 사용자, 그룹 및 역할에

버전211

Amazon GameLift 개발자 안내서GameLift에서 IAM를 사용하는 방법

게 독립적으로 추가할 수 있는 정책입니다. 관리형 정책에는 AWS 관리형 정책과 고객 관리형 정책이 포함되어 있습니다. 관리형 정책 또는 인라인 정책을 선택하는 방법을 알아보려면 IAM 사용 설명서의 관리형 정책과 인라인 정책의 선택을 참조하십시오.

리소스 기반 정책리소스 기반 정책은 Amazon S3 버킷과 같은 리소스에 연결하는 JSON 정책 문서입니다. 서비스 관리자는이러한 정책을 사용하여 지정된 보안 주체(계정 멤버, 사용자 또는 역할)가 해당 리소스에 대해 수행할 수 있는 작업과 어떤 조건에서 수행할 수 있는지를 정의할 수 있습니다. 리소스 기반 정책은 인라인 정책입니다.관리형 리소스 기반 정책은 없습니다.

ACL(액세스 제어 목록)ACL(액세스 제어 목록)은 리소스에 액세스할 수 있는 권한을 가진 보안 주체(계정 멤버, 사용자 또는 역할)를제어하는 정책의 유형입니다. ACL은 리소스 기반 정책과 유사하지만 JSON 정책 문서 형식을 사용하지 않습니다. Amazon S3, AWS WAF 및 Amazon VPC는 ACL을 지원하는 서비스의 예입니다. ACL에 대한 자세한정보는 Amazon Simple Storage Service 개발자 가이드의 ACL(액세스 제어 목록) 개요 단원을 참조하십시오.

기타 정책 유형AWS는 비교적 일반적이지 않은 추가 정책 유형을 지원합니다. 이러한 정책 유형은 더 일반적인 정책 유형에따라 사용자에게 부여되는 최대 권한을 설정할 수 있습니다.

• 권한 경계 – 권한 경계는 자격 증명 기반 정책에 따라 IAM 엔터티(IAM 사용자 또는 역할)에 부여할 수 있는최대 권한을 설정하는 고급 기능입니다. 엔터티에 대한 권한 경계를 설정할 수 있습니다. 그 결과로 얻는권한은 엔터티의 자격 증명 기반 정책의 교차와 그 권한 경계입니다. Principal 필드에서 사용자나 역할을 보안 주체로 지정하는 리소스 기반 정책은 권한 경계를 통해 제한되지 않습니다. 이러한 정책 중 하나에포함된 명시적 거부는 허용을 재정의합니다. 권한 경계에 대한 자세한 내용은 IAM 사용 설명서의 IAM 엔터티에 대한 권한 경계를 참조하십시오.

• 서비스 제어 정책(SCP) – SCP는 AWS Organizations에서 조직 또는 조직 단위(OU)에 최대 권한을 지정하는 JSON 정책입니다. AWS Organizations는 기업이 소유하는 여러 개의 AWS 계정을 그룹화하고 중앙에서 관리하기 위한 서비스입니다. 조직에서 모든 기능을 활성화할 경우 서비스 제어 정책(SCP)을 임의의또는 모든 계정에 적용할 수 있습니다. SCP는 각 AWS 계정 루트 사용자를 비롯하여 멤버 계정의 엔터티에 대한 권한을 제한합니다. 조직 및 SCP에 대한 자세한 내용은 AWS Organizations 사용 설명서의 SCP의 작동 방식 단원을 참조하십시오.

• 세션 정책 – 세션 정책은 역할 또는 연합된 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달하는 고급 정책입니다. 결과적으로 얻는 세션의 권한은 사용자 또는 역할의 자격 증명 기반정책의 교차와 세션 정책입니다. 또한 권한을 리소스 기반 정책에서 가져올 수도 있습니다. 이러한 정책 중하나에 포함된 명시적 거부는 허용을 재정의합니다. 자세한 내용은 IAM 사용 설명서의 세션 정책을 참조하십시오.

여러 정책 유형여러 정책 유형이 요청에 적용되는 경우 결과 권한은 이해하기가 더 복잡합니다. 여러 정책 유형이 관련될 때AWS가 요청을 허용할지 여부를 결정하는 방법을 알아보려면 IAM 사용 설명서의 정책 평가 로직을 참조하십시오.

GameLift에서 IAM를 사용하는 방법IAM을 사용하여 GameLift에 대한 액세스를 관리하려면 먼저 어떤 IAM 기능을 GameLift에 사용할 수 있는지를 이해해야 합니다. GameLift 및 기타 AWS 서비스가 IAM과 작용하는 방법의 상위 수준 보기를 얻으려면IAM 사용 설명서의 IAM으로 작업하는 AWS 서비스를 참조하십시오.

버전212

Amazon GameLift 개발자 안내서GameLift에서 IAM를 사용하는 방법

Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

GameLift 자격 증명 기반 정책IAM 자격 증명 기반 정책을 사용하면 허용되거나 거부되는 작업과 리소스 및 작업이 허용되거나 거부되는조건을 지정할 수 있습니다. GameLift는 특정 작업, 리소스 및 조건 키를 지원합니다. JSON 정책에서 사용하는 모든 요소에 대해 알아보려면 IAM 사용 설명서의 IAM JSON 정책 요소 참조를 참조하십시오.

작업IAM 자격 증명 기반 정책의 Action 요소는 정책에 따라 허용되거나 거부되는 특정 작업에 대해 설명합니다.일반적으로 정책 작업의 이름은 연결된 AWS API 작업의 이름과 동일합니다. 이 작업은 연결된 작업을 수행할 수 있는 권한을 부여하기 위한 정책에서 사용됩니다.

GameLift의 정책 작업은 작업 앞에 gamelift: 접두사를 사용합니다. 예를 들어GameLiftStartGameSessionPlacement API 작업을 사용하여 새 게임 세션을 요청할 수 있는 권한을 부여하려면 gamelift:StartGameSessionPlacement 작업을 해당 정책에 포함합니다. 정책 설명문에는Action 또는 NotAction 요소가 있어야 합니다. GameLift는 이 서비스를 통해 수행할 수 있는 작업을 설명하는 고유한 작업 세트를 정의합니다.

명령문 하나에 여러 작업을 지정하려면 다음과 같이 쉼표로 구분합니다.

"Action": [ "gamelift:action1", "gamelift:action2"

와일드카드(*)를 사용하여 여러 작업을 지정할 수 있습니다. 예를 들어, Describe라는 단어로 시작하는 모든 작업을 지정하려면 다음 작업을 포함합니다.

"Action": "gamelift:Describe*"

GameLift 작업 목록을 보려면 IAM 사용 설명서의 Amazon GameLift에서 정의한 작업 단원을 참조하십시오.

다음 GameLift 작업에는 추가 권한 종속성이 있습니다.

• VPC 피어링 작업 CreateVpcPeeringAuthorization 및 CreateVpcPeeringConnection은 관련VPC에 대한 액세스가 필요합니다. VPC는 GameLift를 관리하는 데 사용하는 것과 동일한 AWS 계정이소유하거나 다른 AWS 계정에서 소유할 수 있습니다. GameLift에서의 VPC 피어링에 대한 자세한 내용은GameLift에 대한 VPC 피어링 (p. 160) 단원을 참조하십시오.

• CreateGameServerGroup을 포함하여 GameLift FleetIQ 작업을 수행하려면 특정 Amazon EC2, AutoScaling 및 기타 관련 작업에 대한 액세스가 필요합니다. GameLift FleetIQ에서 사용할 IAM 권한 설정에 대한 자세한 내용은 GameLift FleetIQ 안내서의 IAM 사용자 및 사용자 그룹 정책 업데이트 (p. 197) 단원을참조하십시오.

리소스Resource 요소는 작업이 적용되는 객체를 지정합니다. 문에는 Resource 또는 NotResource 요소가 반드시 추가되어야 합니다. ARN을 사용하거나 문이 모든 리소스에 적용됨을 표시하는 와일드카드(*)룰 사용하여리소스를 지정합니다.

수명이 긴 GameLift 리소스에는 ARN 값이 있어 IAM 정책을 사용하여 리소스에 대한 액세스를 관리할 수 있습니다. GameLift 플릿 리소스에는 다음 구문을 사용하는 ARN이 있습니다.

arn:${Partition}:gamelift:${Region}:${Account}:fleet/${FleetId}

버전213

Amazon GameLift 개발자 안내서GameLift에서 IAM를 사용하는 방법

ARN 형식에 대한 자세한 내용은 Amazon 리소스 이름(ARN) 및 AWS 서비스 네임스페이스를 참조하십시오.

예를 들어, 명령문에 fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa 플릿을 지정하려면 다음 ARN을 사용합니다.

"Resource": "arn:aws:gamelift:us-west-2:123456789012:fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa"

특정 계정에 속하는 모든 플릿을 지정하려면 와일드카드(*)를 사용합니다.

"Resource": "arn:aws:gamelift:us-west-2:123456789012:fleet/*"

리소스를 생성하기 위한 작업과 같은 일부 GameLift 작업은 특정 리소스에서 수행할 수 없습니다. 이러한 경우 와일드카드(*)를 사용해야 합니다.

"Resource": "*"

ARN이 있는 GameLift 리소스 유형의 목록을 보려면 Amazon GameLift 호스팅 리소스 정보 (p. 81) 단원을참조하십시오. 각 리소스의 ARN을 지정할 수 있는 작업을 알아보려면 Amazon GameLift에서 정의한 작업단원을 참조하십시오.

조건 키Condition 요소(또는 Condition 블록)를 사용하면 정책이 발효되는 조건을 지정할 수 있습니다.Condition 요소는 선택 사항입니다. 같음, 미만 등 조건 연산자를 사용하여 정책의 조건을 요청의 값과 일치시키는 조건식을 빌드할 수 있습니다.

한 문에서 여러 Condition 요소를 지정하거나 단일 Condition 요소에서 여러 키를 지정하는 경우 AWS는 논리적 AND 작업을 사용하여 평가합니다. 단일 조건 키의 여러 값을 지정하는 경우 AWS는 논리적 OR 작업을 사용하여 조건을 평가합니다. 문의 권한을 부여하기 전에 모든 조건을 충족해야 합니다.

조건을 지정할 때 자리 표시자 변수를 사용할 수도 있습니다. 예를 들어, IAM 사용자에게 IAM 사용자 이름으로 태그가 지정된 경우에만 리소스에 액세스할 수 있는 권한을 부여할 수 있습니다. 자세한 내용은 IAM 사용설명서의 IAM 정책 요소: 변수 및 태그 단원을 참조하십시오.

GameLift는 일부 전역 조건 키를 사용하도록 지원합니다. 모든 AWS 전역 조건 키를 보려면 IAM 사용 설명서의 AWS 전역 조건 컨텍스트 키를 참조하십시오.

많은 GameLift 작업이 aws:RequestedTag 조건 키를 지원합니다. GameLift 조건 키 목록을 확인하려면IAM 사용 설명서의 Amazon GameLift의 조건 키 단원을 참조하십시오. 조건 키를 사용할 수 있는 작업과 리소스를 알아보려면 Amazon GameLift에서 정의한 작업 단원을 참조하십시오.

예제

GameLift 자격 증명 기반 정책의 예를 보려면 GameLift 자격 증명 기반 정책 예제 (p. 215) 단원을 참조하십시오.

GameLift 리소스 기반 정책GameLift는 리소스 기반 정책을 지원하지 않습니다.

GameLift 태그 기반 권한 부여태그를 GameLift 리소스에 연결하거나 요청을 통해 태그를 GameLift에 전달할 수 있습니다. 태그를 기반으로 액세스를 제어하려면 gamelift:ResourceTag/key-name, aws:RequestTag/key-name 또는

버전214

Amazon GameLift 개발자 안내서자격 증명 기반 정책 예제

aws:TagKeys 조건 키를 사용하여 정책의 조건 요소에 태그 정보를 제공하십시오. GameLift 리소스 태그 지정에 대한 자세한 내용은 Amazon GameLift API 레퍼런스의 TagResource() 단원을 참조하십시오.

해당 리소스의 태그를 기반으로 리소스에 대한 액세스를 제한하기 위한 자격 증명 기반 정책의 예제를 보려면 태그를 기준으로 GameLift 플릿 보기 (p. 218) 단원을 참조하십시오.

GameLift IAM 역할IAM 역할은 특정 권한을 가지고 있는 AWS 계정 내 개체입니다.

GameLift에서 임시 자격 증명 사용

임시 자격 증명을 사용하여 페더레이션을 통해 로그인하거나, IAM 역할을 수임하거나, 교차 계정 역할을 수임할 수 있습니다. AssumeRole 또는 GetFederationToken 같은 AWS STS API 작업을 호출하여 임시 보안자격 증명을 가져옵니다.

GameLift는 임시 자격 증명 사용을 지원합니다.

서비스 연결 역할

서비스 연결 역할을 사용하면 AWS 제품이 다른 서비스의 리소스에 액세스하여 사용자 대신 작업을 완료할수 있습니다. 서비스 연결 역할은 IAM 계정에 나타나고, 서비스가 소유합니다. IAM 관리자는 서비스 연결 역할의 권한을 볼 수 있지만 편집할 수는 없습니다.

GameLift는 서비스 연결 역할을 지원하지 않습니다.

서비스 역할

이 기능을 사용하면 서비스가 사용자를 대신해 서비스 역할을 맡을 수 있습니다. 이 역할을 사용하면 서비스는 다른 서비스의 리소스에 액세스해 사용자를 대신해 작업을 완료할 수 있습니다. 서비스 역할은 IAM 계정에 나타나고, 해당 계정이 소유합니다. 즉, IAM 관리자가 이 역할에 대한 권한을 변경할 수 있습니다. 그러나권한을 변경하면 서비스의 기능이 손상될 수 있습니다.

GameLift는 다음과 같은 시나리오에 대해 서비스 역할 사용을 지원합니다.

• GameLift 호스팅 게임 서버가 AWS Lambda 함수 또는 Amazon DynamoDB 데이터베이스와 같은 다른AWS 리소스에 액세스할 수 있도록 허용합니다. 게임 서버는 GameLift에서 관리하는 플릿에서 호스팅되므로 다른 AWS 리소스에 대한 제한된 액세스를 GameLift에 부여하는 서비스 역할이 필요합니다. 자세한내용은 플릿에서 AWS 리소스에 액세스 (p. 45) 단원을 참조하십시오.

• GameLift FleetIQ를 독립 실행형 솔루션으로 사용하는 경우 GameLift가 게임 서버를 호스팅하는 AmazonEC2 및 Auto Scaling 리소스를 재분배할 수 있도록 허용합니다. 자세한 내용은 GameLift FleetIQ 설명서의IAM 서비스 역할 생성 (p. 198) 단원을 참조하십시오.

GameLift 자격 증명 기반 정책 예제기본적으로 IAM 사용자 및 역할은 GameLift 리소스를 생성하거나 수정할 수 있는 권한이 없습니다. 또한AWS Management 콘솔, AWS CLI 또는 AWS API를 사용해 작업을 수행할 수 없습니다. IAM 관리자는 지정된 리소스에서 특정 API 작업을 수행할 수 있는 권한을 사용자와 역할에게 부여하는 IAM 정책을 생성해야 합니다. 그런 다음 관리자는 해당 권한이 필요한 IAM 사용자 또는 그룹에 이러한 정책을 연결해야 합니다.

이러한 예제 JSON 정책 문서를 사용하여 IAM 자격 증명 기반 정책을 생성하는 방법을 알아보려면 IAM 사용설명서의 JSON 탭에서 정책 생성을 참조하십시오.

주제• 정책 모범 사례 (p. 216)• GameLift 콘솔 사용 (p. 216)

버전215

Amazon GameLift 개발자 안내서자격 증명 기반 정책 예제

• 사용자가 자신이 권한을 볼 수 있도록 허용 (p. 216)• 게임 세션을 위한 플레이어 액세스 허용 (p. 217)• 하나의 GameLift 대기열에 대한 액세스 허용 (p. 217)• 태그를 기준으로 GameLift 플릿 보기 (p. 218)

정책 모범 사례자격 증명 기반 정책은 매우 강력합니다. 이 정책은 계정에서 사용자가 GameLift 리소스를 생성, 액세스 또는삭제할 수 있는지 여부를 결정합니다. 이 작업으로 인해 AWS 계정에 비용이 발생할 수 있습니다. 자격 증명기반 정책을 생성하거나 편집할 때는 다음 지침과 권장 사항을 따르십시오.

• AWS 관리형 정책을 사용하여 시작하기 – GameLift 사용을 빠르게 시작하려면 AWS 관리형 정책을 사용하여 필요한 권한을 직원에게 부여합니다. 이 정책은 이미 계정에서 사용할 수 있으며 AWS에 의해 유지관리 및 업데이트됩니다. 자세한 내용은 IAM 사용 설명서의 AWS 관리형 정책으로 권한 사용 시작하기를참조하십시오.

• 최소 권한 부여 – 사용자 지정 정책을 생성할 때는 작업을 수행하는 데 필요한 권한만 부여합니다. 최소한의 권한 조합으로 시작하여 필요에 따라 추가 권한을 부여합니다. 처음부터 권한을 많이 부여한 후 나중에줄이는 방법보다 이 방법이 안전합니다. 자세한 내용은 IAM 사용 설명서의 최소 권한 부여를 참조하십시오.

• 중요한 작업에 대해 MFA 활성화 – 보안을 강화하기 위해 IAM 사용자가 중요한 리소스 또는 API 작업에 액세스하려면 멀티 팩터 인증(MFA)을 사용해야 합니다. 자세한 내용은 IAM 사용 설명서의 AWS에서 Multi-Factor Authentication(MFA) 사용하기를 참조하십시오.

• 보안 강화를 위해 정책 조건 사용 – 실제로 가능한 경우, 자격 증명 기반 정책이 리소스에 대한 액세스를 허용하는 조건을 정의합니다. 예를 들어 요청을 할 수 있는 IP 주소의 범위를 지정하도록 조건을 작성할 수있습니다. 지정된 날짜 또는 시간 범위 내에서만 요청을 허용하거나, SSL 또는 MFA를 사용해야 하는 조건을 작성할 수도 있습니다. 자세한 내용은 IAM 사용 설명서의 IAM JSON 정책 요소: 조건을 참조하십시오.

GameLift 콘솔 사용GameLift 콘솔에 액세스하려면 최소 권한 집합이 있어야 합니다. 이러한 권한은 AWS 계정에서 GameLift 리소스에 대한 세부 정보를 나열하고 볼 수 있도록 허용해야 합니다. 최소 필수 권한보다 더 제한적인 자격 증명 기반 정책을 만들면 콘솔이 해당 정책에 연결된 개체(IAM 사용자 또는 역할)에 대해 의도대로 작동하지 않습니다.

이러한 엔터티가 GameLift 콘솔을 계속 사용할 수 있도록 하려면 다음 정책 구문을 사용하여 사용자 및 그룹에 인라인 정책을 추가합니다. 자세한 내용은 IAM 사용 설명서의 사용자에게 권한 추가 단원을 참조하십시오. 게임 클라이언트를 사용하는 플레이어와 같이 AWS CLI 또는 AWS API만 호출하는 사용자에게 최소 콘솔 권한을 허용할 필요가 없습니다. 그 대신, 수행하려는 API 작업과 일치하는 작업에만 액세스할 수 있도록합니다.

• 모든 GameLift 콘솔 기능을 사용하는 데 필요한 권한: GameLift의 IAM 정책 예제 (p. 20) 단원의 관리자에대한 인라인 정책 구문을 참조하십시오.

사용자가 자신이 권한을 볼 수 있도록 허용이 예제는 IAM 사용자가 자신의 사용자 자격 증명에 연결된 인라인 및 관리형 정책을 볼 수 있도록 허용하는정책을 생성하는 방법을 보여 줍니다. 이 정책에는 콘솔에서 또는 AWS CLI나 AWS API를 사용하여 프로그래밍 방식으로 이 작업을 완료할 수 있는 권한이 포함됩니다.

{ "Version": "2012-10-17", "Statement": [ {

버전216

Amazon GameLift 개발자 안내서자격 증명 기반 정책 예제

"Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ]}

게임 세션을 위한 플레이어 액세스 허용게임 클라이언트(또는 게임 클라이언트의 요청을 관리하는 클라이언트 서비스)가 새 게임 세션을 만들고 사용 가능한 게임 세션에서 플레이어 배치를 요청하는 데 필요한 액세스 권한을 부여하려고 합니다. 게임에서이 작업을 수행할 수 있는 방법은 게임 세션 배치를 대기열과 함께 사용하거나 매치메이킹을 사용하거나 수동 배치를 사용하는 등 여러 가지가 있습니다. 이러한 시나리오에 대한 정책 예제를 보려면 GameLift의 IAM정책 예제 (p. 20) 단원의 플레이어에 대한 인라인 정책 구문을 참조하십시오.

하나의 GameLift 대기열에 대한 액세스 허용이 예제에서는 AWS 계정의 IAM 사용자에게 대기열 대상을 추가, 업데이트 및 삭제하는 기능을 비롯하여GameLift 대기열 gamesessionqueue/examplequeue123 중 하나에 대한 액세스 권한을 부여하려고 합니다.

이 정책은 사용자에게 gamelift:UpdateGameSessionQueue, gamelift:DeleteGameSessionQueue및 gamelift:DescribeGameSessionQueues 작업에 대한 권한을 부여합니다. 표시된 것처럼 이 정책은리소스 요소를 사용하여 단일 대기열로 액세스를 제한합니다.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"ViewSpecificQueueInfo", "Effect":"Allow", "Action":[ "gamelift:DescribeGameSessionQueues" ], "Resource":"arn:aws:gamelift:::gamesessionqueue/examplequeue123" }, { "Sid":"ManageSpecificQueue", "Effect":"Allow", "Action":[

버전217

Amazon GameLift 개발자 안내서문제 해결

"gamelift:UpdateGameSessionQueue", "gamelift:DeleteGameSessionQueue" ], "Resource":"arn:aws:gamelift:::gamesessionqueue/examplequeue123" } ]}

태그를 기준으로 GameLift 플릿 보기자격 증명 기반 정책의 조건을 사용하여 태그를 기반으로 GameLift 리소스에 대한 액세스를 제어할 수 있습니다. 이 예제에서는 플릿을 보도록 허용하는 정책을 생성할 수 있는 방법을 보여줍니다. 그러나 플릿 태그Owner에 해당 사용자의 사용자 이름 값이 있는 경우에만 권한이 부여됩니다. 이 정책은 콘솔에서 이 작업을완료하는 데 필요한 권한도 부여합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListFleetsInConsole", "Effect": "Allow", "Action": "gamelift:ListFleets", "Resource": "*" }, { "Sid": "ViewFleetIfOwner", "Effect": "Allow", "Action": "gamelift:DescribeFleetAttributes", "Resource": "arn:aws:gamelift:*:*:fleet/*", "Condition": { "StringEquals": {"gamelift:ResourceTag/Owner": "${aws:username}"} } } ]}

이 정책을 계정의 IAM 사용자에게 연결할 수 있습니다. richard-roe라는 사용자가 GameLift 플릿을 보려면 플릿에 Owner=richard-roe 또는 owner=richard-roe 태그가 지정되어야 합니다. 그렇지 않으면 액세스가 거부됩니다. 조건 키 이름은 대소문자를 구분하지 않기 때문에 태그 키 Owner는 Owner 및 owner 모두와 일치합니다. 자세한 내용은 IAM 사용 설명서의 IAM JSON 정책 요소: 조건을 참조하십시오.

GameLift 자격 증명 및 액세스 문제 해결다음 정보를 사용하여 GameLift 및 IAM에서 발생할 수 있는 공통적인 문제를 진단하고 수정할 수 있습니다.

주제• GameLift에서 작업을 수행할 권한이 없음 (p. 218)• iam:PassRole를 수행하도록 인증되지 않음 (p. 219)• 액세스 키를 보아야 합니다. (p. 219)• 관리자이며 다른 사용자가 GameLift에 액세스하도록 허용하려고 함 (p. 219)• AWS 계정 외부의 사람이 GameLift 리소스에 액세스하도록 허용하려고 합니다. (p. 220)

GameLift에서 작업을 수행할 권한이 없음AWS Management 콘솔에서 작업을 수행할 권한이 없다는 메시지가 나타나는 경우 관리자에게 문의하여 도움을 받아야 합니다. 관리자는 사용자 이름과 암호를 제공한 사람입니다.

버전218

Amazon GameLift 개발자 안내서문제 해결

다음 예제 오류는 IAM 사용자 mateojackson가 콘솔을 사용하여 실행에 대한 세부 정보를 보려고 하지만gamelift:DescribeGameSessionQueues 권한이 없는 경우에 발생합니다.

User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: gamelift:DescribeGameSessionQueues on resource: examplequeue123

이 경우 Mateo는 gamelift:DescribeGameSessionQueues 작업을 사용하여 examplequeue123 리소스에 액세스할 수 있도록 정책을 업데이트할 것을 관리자에게 요청합니다.

iam:PassRole를 수행하도록 인증되지 않음iam:PassRole 작업을 수행할 권한이 없다는 오류가 수신되면 관리자에게 문의하여 도움을 받아야 합니다.관리자는 사용자 이름과 암호를 제공한 사람입니다. 역할을 GameLift로 전달하도록 허용하는 정책을 업데이트하라고 관리자에게 요청합니다.

일부 AWS 서비스에서는 새 서비스 역할 또는 서비스 연결 역할을 생성하는 대신, 해당 서비스에 기존 역할을 전달할 수 있습니다. 이렇게 하려면 사용자가 서비스에 역할을 전달할 수 있는 권한을 가지고 있어야 합니다.

다음 예제 오류는 marymajor라는 IAM 사용자가 콘솔을 사용하여 GameLift에서 작업을 수행하려고 하는 경우에 발생합니다. 하지만 작업을 수행하려면 서비스에 서비스 역할이 부여한 권한이 있어야 합니다. Mary는서비스에 역할을 전달할 수 있는 권한을 가지고 있지 않습니다.

User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole

이 경우 Mary는 iam:PassRole 작업을 수행하도록 허용하는 정책을 업데이트하라고 관리자에게 요청합니다.

액세스 키를 보아야 합니다.IAM 사용자 액세스 키를 생성한 후에는 언제든지 액세스 키 ID를 볼 수 있습니다. 하지만 보안 액세스 키는다시 볼 수 없습니다. 보안 액세스 키를 잃어버린 경우 새로운 액세스 키 페어를 생성해야 합니다.

액세스 키는 액세스 키 ID(예: AKIAIOSFODNN7EXAMPLE)와 보안 액세스 키(예: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)의 2가지 부분으로 구성됩니다. 사용자 이름 및 암호와 같이 액세스 키ID와 보안 액세스 키를 함께 사용하여 요청을 인증해야 합니다. 사용자 이름과 암호를 관리하는 것처럼 안전하게 액세스 키를 관리합니다.

Important

정식 사용자 ID를 찾는 데 도움이 된다고 하더라도 액세스 키를 제3자에게 제공하지 마십시오. 이로인해 다른 사람에게 계정에 대한 영구 액세스를 제공하게 될 수 있습니다.

액세스 키 페어를 생성할 때는 액세스 키 ID와 보안 액세스 키를 안전한 위치에 저장하라는 메시지가 나타납니다. 보안 액세스 키는 생성할 때만 사용할 수 있습니다. 하지만 보안 액세스 키를 잃어버린 경우 새로운 액세스 키를 IAM 사용자에게 추가할 수 있습니다. 최대 두 개의 액세스 키를 가질 수 있습니다. 이미 두 개가 있는 경우 새로 생성하려면 먼저 키 페어 하나를 삭제해야 합니다. 지침을 보려면 IAM 사용 설명서의 액세스 키관리를 참조하십시오.

관리자이며 다른 사용자가 GameLift에 액세스하도록 허용하려고함다른 사용자가 GameLift에 액세스하도록 허용하려면 액세스 권한이 필요한 사용자나 애플리케이션에 대한IAM 엔터티(사용자 또는 역할)를 생성해야 합니다. 다른 사용자들은 해당 엔터티에 대한 자격 증명을 사용해AWS에 액세스합니다. 그런 다음 GameLift에서 다른 사용자에게 올바른 권한을 부여하는 정책을 엔터티에연결해야 합니다.

버전219

Amazon GameLift 개발자 안내서GameLift를 사용한 로깅 및 모니터링

즉시 시작하려면 IAM 사용 설명서의 첫 번째 IAM 위임 사용자 및 그룹 생성을 참조하십시오.

AWS 계정 외부의 사람이 GameLift 리소스에 액세스하도록 허용하려고 합니다.다른 계정의 사용자 또는 조직 외부의 사람이 리소스에 액세스하는 데 사용할 수 있는 역할을 생성할 수 있습니다. 역할을 수임할 신뢰할 수 있는 사람을 지정할 수 있습니다. 리소스 기반 정책 또는 ACL(액세스 제어 목록)을 지원하는 서비스의 경우 이러한 정책을 사용하여 다른 사람에게 리소스에 대한 액세스 권한을 부여할수 있습니다.

자세히 알아보려면 다음을 참조하십시오.

• GameLift에서 이러한 기능을 지원하는지 여부를 알아보려면 GameLift에서 IAM를 사용하는 방법 (p. 212) 단원을 참조하십시오.

• 소유하고 있는 AWS 계정의 리소스에 대한 액세스 권한을 제공하는 방법을 알아보려면 IAM 사용 설명서의 자신이 소유한 다른 AWS 계정의 IAM 사용자에 대한 액세스 권한 제공을 참조하십시오

• 리소스에 대한 액세스 권한을 제3자 AWS 계정에게 제공하는 방법을 알아보려면 IAM 사용 설명서의 제3자가 소유한 AWS 계정에게 액세스 권한 제공을 참조하십시오.

• 자격 증명 연동을 통해 액세스 권한을 제공하는 방법을 알아보려면 IAM 사용 설명서의 외부에서 인증된사용자에게 액세스 권한 제공(자격 증명 연동)을 참조하십시오.

• 교차 계정 액세스를 위한 역할과 리소스 기반 정책 사용의 차이점을 알아보려면 IAM 사용 설명서의 IAM역할과 리소스 기반 정책의 차이를 참조하십시오.

GameLift를 사용한 로깅 및 모니터링모니터링은 GameLift 및 AWS 솔루션의 안정성, 가용성 및 성능을 유지하는 데 중요한 부분입니다. 발생하는다중 지점 실패를 보다 쉽게 디버깅할 수 있도록 AWS 솔루션의 모든 부분으로부터 모니터링 데이터를 수집해야 합니다.

AWS와 GameLift는 게임 호스팅 리소스를 모니터링하고 잠재적 인시던트에 대응하기 위한 다양한 도구를제공합니다.

Amazon CloudWatch 경보

Amazon CloudWatch 경보를 사용하면 지정한 기간 동안 단일 지표를 감시할 수 있습니다. 지표가 지정된 임계값을 초과하면 Amazon SNS 주제 또는 AWS Auto Scaling 정책으로 알림이 전송됩니다. CloudWatch 경보는 특정 상태가 아니라 상태 변경에 의해 트리거되고 지정된 수의 기간 동안 유지됩니다. 자세한 내용은Amazon CloudWatch를 사용한 GameLift 모니터링 (p. 172) 단원을 참조하십시오.

AWS CloudTrail 로그

CloudTrail은 GameLift에서 사용자, 역할 또는 AWS 서비스가 수행한 작업의 기록을 제공합니다. CloudTrail에서 수집한 정보를 사용하여 GameLift에 수행된 요청, 요청이 수행된 IP 주소, 요청을 수행한 사람, 요청이수행된 시간 및 추가 세부 정보를 확인할 수 있습니다. 자세한 내용은 AWS CloudTrail을 사용하여 AmazonGameLift API 호출 로깅 (p. 183) 단원을 참조하십시오.

GameLift의 규정 준수 확인GameLift는 AWS 규정 준수 프로그램의 범위에 포함되지 않습니다.

특정 규정 준수 프로그램의 범위 내에 있는 AWS 서비스 목록은 규정 준수 프로그램 제공 범위 내 AWS 서비스를 참조하십시오. 일반적인 내용은 AWS 규정 준수 프로그램을 참조하십시오.

버전220

Amazon GameLift 개발자 안내서복원성

AWS Artifact를 사용하여 타사 감사 보고서를 다운로드할 수 있습니다. 자세한 내용은 AWS 아티팩트에서 보고서 다운로드를 참조하십시오.

AWS 서비스를 사용할 때 규정 준수 책임은 데이터의 민감도, 회사의 규정 준수 목표, 관련 법률 및 규정에 따라 결정됩니다. AWS는 규정 준수를 지원하기 위해 다음과 같은 리소스를 제공합니다.

• 보안 및 규정 준수 빠른 시작 안내서 – 이 배포 가이드에서는 아키텍처 고려 사항에 대해 설명하고 보안 및규정 준수에 중점을 둔 기본 AWS 환경을 배포하기 위한 단계를 제공합니다.

• HIPAA 보안 및 규정 준수 기술 백서 설계 – 이 백서는 기업에서 AWS를 사용하여 HIPAA를 준수하는 애플리케이션을 만드는 방법을 설명합니다.

Note

일부 서비스는 HIPAA를 준수하지 않습니다.• AWS 규정 준수 리소스 – 이 워크북 및 안내서 모음은 귀사가 속한 업계 및 위치에 적용될 수 있습니다.• AWS Config 개발자 안내서의 규칙을 사용하여 리소스 평가 – 이 AWS Config 서비스는 리소스 구성이 내

부 사례, 업계 지침, 규정을 얼마나 잘 준수하는지 평가합니다.• AWS Security Hub – 이 AWS 제품으로 보안 업계 표준 및 모범 사례 규정 준수 여부를 확인하는 데 도움이

되는 AWS 내 보안 상태에 대한 포괄적인 관점을 제공합니다.

GameLift의 복원성Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

AWS 글로벌 인프라는 AWS 리전 및 가용 영역을 중심으로 구축됩니다. AWS 리전에서는 물리적으로 분리되고 격리된 다수의 가용 영역을 제공하며 이러한 가용 영역은 짧은 지연 시간, 높은 처리량 및 높은 중복성을 갖춘 네트워크에 연결되어 있습니다. 가용 영역을 사용하면 중단 없이 영역 간에 자동으로 장애 조치가 이루어지는 애플리케이션 및 데이터베이스를 설계하고 운영할 수 있습니다. 가용 영역은 기존의 단일 또는 다중 데이터 센터 인프라보다 가용성, 내결함성, 확장성이 뛰어납니다.

AWS 리전 및 가용 영역에 대한 자세한 내용은 AWS 글로벌 인프라를 참조하십시오.

AWS 글로벌 인프라뿐만 아니라 GameLift도 데이터 복원성 요구 사항을 지원하기 위해 다음과 같은 기능을제공합니다.

• 다중 리전 대기열 – GameLift 게임 세션 대기열은 사용 가능한 호스팅 리소스로 새 게임 세션을 배치하는데 사용됩니다. 여러 리전에 걸쳐 있는 대기열은 한 리전이 중단될 경우 게임 세션 배치를 리디렉션할 수있습니다. 게임 세션 대기열 생성에 대한 자세한 내용과 모범 사례는 게임 세션 대기열 설계 (p. 124) 단원을 참조하십시오.

• 자동 용량 조정 – GameLift 조정 도구를 사용하여 호스팅 리소스의 상태와 가용성을 유지합니다. 이러한도구는 게임 및 플레이어의 요구에 맞게 플릿 용량을 조정할 수 있는 다양한 옵션을 제공합니다. 조정에 대한 자세한 내용은 GameLift 플릿 용량 조정 (p. 115) 단원을 참조하십시오.

• 인스턴스 간 분산 – GameLift는 플릿 크기에 따라 수신 트래픽을 여러 인스턴스로 분산합니다. 인스턴스가비정상이거나 응답하지 않는 경우 프로덕션 게임의 가용성을 유지하기 위해 인스턴스가 여러 개 있어야 합니다.

• Amazon S3 스토리지 – 게임 서버 빌드 및 스크립트는 GameLift에 업로드되고 여러 데이터 센터 복제를 사용하여 복원성을 높이는 스탠다드 스토리지 클래스를 사용하여 Amazon S3에 저장됩니다. 게임 세션 로그도 스탠다드 스토리지 클래스를 사용하여 Amazon S3에 저장됩니다.

GameLift의 인프라 보안Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

버전221

Amazon GameLift 개발자 안내서구성 및 취약성 분석

관리형 서비스인 GameLift는 Amazon Web Services: 보안 프로세스 개요 백서에 설명된 AWS 글로벌 네트워크 보안 절차로 보호됩니다.

AWS에서 게시한 API 호출을 사용하여 네트워크를 통해 GameLift에 액세스합니다. 클라이언트가 TLS(전송 계층 보안) 1.0 이상을 지원해야 합니다. TLS 1.2 이상을 권장합니다. 클라이언트는 Ephemeral Diffie-Hellman(DHE) 또는 Elliptic Curve Ephemeral Diffie-Hellman(ECDHE)과 같은 PFS(전달 완전 보안, PerfectForward Secrecy)가 포함된 암호 제품군도 지원해야 합니다. Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

또한 요청은 액세스 키 ID 및 IAM 주체와 관련된 보안 액세스 키를 사용하여 서명해야 합니다. 또는 AWSSecurity Token Service(AWS STS)를 사용하여 임시 보안 자격 증명을 생성하여 요청에 서명할 수 있습니다.

이 GameLift 서비스는 각 플릿이 AWS 클라우드에서 논리적으로 격리된 영역에 존재하도록 모든 플릿을Amazon Virtual Private Cloud(VPC) 에 배치합니다. 또한 GameLift 정책을 사용하여 특정 VPC 엔드포인트또는 특정 VPC로부터의 액세스를 제어할 수 있습니다. 그러면 AWS 네트워크의 특정 VPC에서만 주어진GameLift 리소스에 대한 네트워크 액세스가 효과적으로 격리됩니다. 플릿을 만들 때 포트 번호 및 IP 주소의범위를 지정합니다. 이러한 범위는 인바운드 트래픽이 플릿 VPC에서 호스팅된 게임 서버에 액세스하는 방법을 제한합니다. 플릿 액세스 설정을 선택할 때 표준 보안 모범 사례를 사용하십시오.

GameLift에서 구성 및 취약성 분석Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

구성 및 IT 제어는 AWS와 고객 간의 공동 책임입니다. 자세한 내용은 AWS 공동 책임 모델을 참조하십시오. AWS가 게스트 운영 체제(OS), 데이터베이스 패치, 방화벽 구성, 재해 복구 등의 기본 보안 작업을 처리합니다. 적합한 제3자가 이 절차를 검토하고 인증하였습니다. 자세한 내용은 다음 리소스를 참조하십시오.Amazon Web Services: 보안 프로세스 개요(백서).

다음 보안 모범 사례에서도 GameLift의 구성 및 취약성 분석을 다룹니다.

• 고객은 게임 호스팅을 위해 GameLift 인스턴스에 배포되는 소프트웨어를 관리할 책임이 있습니다. 구체적으로 설명하면 다음과 같습니다.• 업데이트 및 보안 패치를 포함하여 고객이 제공한 게임 서버 애플리케이션 소프트웨어를 유지 관리해야

합니다. 게임 서버 소프트웨어를 업데이트하려면 새 빌드를 GameLift에 업로드하고, 새 빌드에 대한 새플릿을 만들고, 트래픽을 새 플릿으로 리디렉션합니다.

• 운영 체제를 포함하는 기본 Amazon Machine Image(AMI) 는 새 플릿이 생성될 때만 업데이트됩니다. 운영 체제 및 AMI의 일부인 기타 애플리케이션을 패치, 업데이트 및 보호하려면 게임 서버 업데이트에 관계없이 정기적으로 플릿을 재활용합니다.

• 고객은 AWS SDK, GameLift Server SDK, GameLift Client SDK for Realtime Servers 등 최신 SDK 버전으로 게임을 정기적으로 업데이트하는 것을 고려해야 합니다.

Amazon GameLift의 보안 모범 사례Amazon EC2에서 GameLift FleetIQ를 독립형 기능으로 사용 중인 경우 Linux 인스턴스용 Amazon EC2 사용설명서의 Amazon EC2의 보안을 참조하십시오.

GameLift는 자체 보안 정책을 개발하고 구현할 때 고려해야 할 여러 보안 기능을 제공합니다. 다음 모범 사례는 일반적인 지침이며 완벽한 보안 솔루션을 나타내지는 않습니다. 이러한 모범 사례는 환경에 적절하지 않거나 충분하지 않을 수 있으므로 참고용으로만 사용해 주십시오.

• Amazon Web Services: 보안 프로세스의 개요(백서)• AWS 보안 모범 사례(백서)

버전222

Amazon GameLift 개발자 안내서서비스 API 참조(AWS SDK)

Amazon GameLift 레퍼런스 가이드이 단원에는 Amazon GameLift 사용에 대한 참조 문서가 나와 있습니다.

주제• GameLift 서비스 API 참조(AWS SDK) (p. 223)• Amazon GameLift Realtime 서버 참조 (p. 228)• Amazon GameLift Server SDK 참조 (p. 243)• Amazon GameLift FlexMatch 참조 (p. 281)

GameLift 서비스 API 참조(AWS SDK)GameLift 서비스 API는 AWS SDK에 패키지되어 있습니다. AWS SDK를 다운로드하거나 Amazon GameLiftAPI 참조 문서를 읽어보십시오.

• 관리형 GameLift용 API

이러한 작업은 사용자 지정 게임 서버 및 Realtime 서버에 대한 전체 관리형 GameLift 솔루션의 일부입니다.• 게임 세션 및 플레이어 작업 (p. 223)• 관리형 GameLift 호스팅 리소스 작업 (p. 224)• FlexMatch 매치메이킹 작업 (p. 226)

• GameLift FleetIQ용 API

이러한 작업은 Amazon EC2에서 게임 호스팅과 함께 사용할 독립 실행형 FleetIQ 솔루션을 위한 것입니다.• GameLift FleetIQ 작업 (p. 227)

• 사용 가능한 프로그래밍 언어 (p. 227)

게임 세션 및 플레이어 작업관리형 GameLift 솔루션을 사용하는 경우, 게임 클라이언트 서비스에서 이러한 작업을 호출하여 게임 세션을 시작하거나 참가하고 게임 및 플레이어 세션 데이터에 액세스합니다. 이러한 작업은 GameLift에서 호스팅되는 사용자 지정 게임 서버가 있는 게임을 위한 것입니다. Realtime 서버를 사용하는 경우 Realtime 서버Client API(C#) 참조 (p. 228) 단원을 참조하십시오.

• 하나 이상의 플레이어를 위한 새로운 게임 세션 시작. 현재 이용 가능한 최상의 호스팅 리소스를 찾아 새게임 세션을 시작하는 데 사용하십시오. 또는 지정된 플릿에 새 게임 세션을 만듭니다.• StartGameSessionPlacement – 하나 이상의 플레이어에 대해 새 게임 세션 배치를 요청합니다.• DescribeGameSessionPlacement – 배치 요청에 대한 세부 정보 및 상태를 가져옵니다.• StopGameSessionPlacement – 배치 요청을 취소합니다.• CreateGameSession – 특정 플릿에서 새 게임 세션을 시작합니다. GameLift 로컬에서 사용 가능

• 플레이어를 기존 게임에 배치. 사용 가능한 플레이어 슬롯이 있는 기존 게임을 찾아서 새 플레이어를 위해예약합니다.• SearchGameSessions – 사용 가능한 모든 게임 세션을 검색하거나 기준 집합과 일치하는 게임 세션을

검색합니다.• CreatePlayerSession – 열린 슬롯 한 개를 게임 세션에 참여할 플레이어 한 명을 위해 예약합니다.

GameLift 로컬에서 사용 가능

버전223

Amazon GameLift 개발자 안내서호스팅 리소스 작업

• CreatePlayerSessions – 열린 슬롯 여러 개를 게임 세션에 참여할 플레이어 여러 명을 위해 예약합니다.GameLift 로컬에서 사용 가능

• 게임 세션 및 플레이어 세션 데이터로 작업. 기존 게임 세션 및 플레이어 세션에서 현재 데이터를 검색하고필요에 따라 업데이트합니다.• DescribeGameSessions – 활성 상태인 시간 길이 및 현재 플레이어 수를 포함하여 하나 이상의 게임 세

션에 대한 메타데이터를 검색합니다. GameLift 로컬에서 사용 가능• DescribeGameSessionDetails – 하나 이상의 게임 세션에 대한 메타데이터 및 게임 세션 보호 설정을 검

색합니다.• GetGameSessionLogUrl – 게임 세션에 대해 저장된 로그의 위치를 가져옵니다.• DescribePlayerSessions – 상태, 재생 시간 및 플레이어 데이터를 포함하여 플레이어 활동에 대한 세부

정보를 가져옵니다. GameLift 로컬에서 사용 가능• UpdateGameSession – 최대 플레이어 수 및 참여 정책과 같은 게임 세션 설정을 변경합니다.

관리형 GameLift 호스팅 리소스 작업관리형 GameLift 솔루션을 사용하는 경우, 이러한 작업을 호출하여 게임 서버의 호스팅 리소스 구성, 플레이어 수요에 맞게 용량 조정, 성능 및 사용률 지표에 액세스 등을 수행할 수 있습니다. 이러한 API 작업은Realtime 서버를 포함하여 GameLift에서 호스팅되는 게임 서버에서 사용됩니다. 대부분의 리소스 관리 작업에 GameLift 콘솔을 사용하거나 AWS Command Line Interface(AWS CLI) 도구 또는 AWS SDK를 사용하여서비스를 호출할 수 있습니다.

게임 서버 설정호스팅을 위해 플릿에 배포되는 게임에 게임 서버를 구성합니다.

사용자 지정 게임 서버 빌드

• CreateBuild – Amazon S3 버킷에 저장된 파일을 사용하여 새 빌드를 생성합니다. 빌드를 생성하고 로컬경로에서 파일을 업로드하려면 AWS CLI 전용 명령인 upload-build를 사용합니다.

• ListBuilds – GameLift 리전에 업로드된 모든 빌드의 목록을 가져옵니다.• DescribeBuild – 빌드와 관련된 정보를 검색합니다.• UpdateBuild – 빌드 이름 및 버전을 포함하여 빌드 메타데이터를 변경합니다.• DeleteBuild – GameLift에서 빌드를 제거합니다.

Realtime 서버 구성 스크립트

• CreateScript – Realtime 서버에서 실행할 새 서버 스크립트를 생성합니다.• ListScripts – GameLift 리전에 업로드된 모든 Realtime 스크립트의 목록을 가져옵니다.• DescribeScript – Realtime 스크립트와 관련된 정보를 검색합니다.• UpdateScript – 스크립트 메타데이터를 변경하고 수정된 스크립트 콘텐츠를 업로드합니다.• DeleteScript – GameLift에서 Realtime 스크립트를 제거합니다.

컴퓨팅 리소스 관리호스팅 리소스를 구성하고 게임 서버 빌드 또는 Realtime 구성 스크립트를 배포합니다.

플릿

• CreateFleet – 사용자 지정 게임 서버 빌드 또는 Realtime 스크립트를 실행할 새 플릿을 구성하고 활성화합니다.

• ListFleets – GameLift 리전에 있는 모든 플릿의 목록을 가져옵니다.

버전224

Amazon GameLift 개발자 안내서호스팅 리소스 작업

• DeleteFleet – 더 이상 게임 서버나 호스팅 플레이어를 실행하지 않는 플릿을 종료합니다.• 플릿 구성 보기/업데이트.

• DescribeFleetAttributes / UpdateFleetAttributes – 게임 세션 보호와 리소스 생성 제한에 대한 플릿의 메타데이터 및 설정을 보거나 변경합니다.

• DescribeFleetPortSettings / UpdateFleetPortSettings – 플릿에 허용되는 인바운드 권한(IP 주소 및 포트설정 범위)을 보거나 변경합니다.

• DescribeRuntimeConfiguration / UpdateRuntimeConfiguration – 플릿의 각 인스턴스에서 실행할 서버프로세스 및 개수를 보거나 변경합니다.

• 플릿 용량 설정• DescribeEC2InstanceLimits – 현재 AWS 계정과 현재 사용 수준에 허용되는 최대 인스턴스 수를 검색합

니다.• DescribeFleetCapacity – 플릿의 현재 용량 설정을 검색합니다.• UpdateFleetCapacity – 수동으로 플릿 용량 설정을 조정합니다.• Auto-scaling 관리:

• PutScalingPolicy – 대상 기반 자동 조정을 설정하거나, 사용자 지정 자동 조정 정책을 생성하거나, 기존 정책을 업데이트합니다.

• DescribeScalingPolicies – 기존의 자동 조정 정책을 검색합니다.• DeleteScalingPolicy – 자동 조정 정책을 삭제하고 이 정책이 플릿 용량에 영향을 미치는 것을 중지시

킵니다.• StartFleetActions – 플릿의 자동 조정 정책을 다시 시작합니다.• StopFleetActions – 플릿의 자동 조정 정책을 일시 중단합니다.

• 플릿 활동 모니터링. 플릿의 서버 프로세스 및 게임 세션 활동에 대한 최신 정보를 가져옵니다.• DescribeFleetUtilization – 현재 플릿에서 활성 상태인 서버 프로세스, 게임 세션 및 플레이어의 수에 대

한 통계를 검색합니다.• DescribeFleetEvents – 지정된 시간 범위 동안 플릿에 대해 기록된 이벤트를 봅니다.• DescribeGameSessions – 게임의 실행 시간 및 현재 플레이어 수를 포함하여 게임 세션 메타데이터를

검색합니다.

최적의 게임 세션 배치를 위한 대기열 설정비용, 지연 시간 및 복원력을 고려하여 사용 가능한 최상의 호스팅 리소스와 함께 게임 세션을 배치하기 위해다중 플릿, 다중 리전 대기열을 설정합니다.

게임 세션 대기열

• CreateGameSessionQueue – 게임 세션 배치 요청을 처리할 때 사용하기 위한 대기열을 만듭니다.• DescribeGameSessionQueues – GameLift 리전에 정의된 게임 세션 대기열을 검색합니다.• UpdateGameSessionQueue – 게임 세션 대기열의 구성을 변경합니다.• DeleteGameSessionQueue – 리전에서 게임 세션 대기열을 제거합니다.

플릿 별칭 관리별칭을 사용하여 플릿을 나타내거나 터미널 대체 대상을 만듭니다. 별칭은 예를 들어 게임 서버 빌드 업데이트 중에 한 플릿에서 다른 플릿으로 게임 활동을 전환할 때 유용합니다.

별칭

• CreateAlias – 새 별칭을 정의하고 선택적으로 플릿에 할당합니다.• ListAliases – GameLift 리전에 정의된 모든 플릿 별칭을 가져옵니다.• DescribeAlias – 기존 별칭에 대한 정보를 검색합니다.

버전225

Amazon GameLift 개발자 안내서FlexMatch 매치메이킹 작업

• UpdateAlias – 한 플릿에서 다른 플릿으로 리디렉션하는 등 별칭 설정을 변경합니다.• DeleteAlias – 리전에서 별칭을 제거합니다.• ResolveAlias – 지정된 별칭이 가리키는 플릿 ID를 가져옵니다.

호스팅 인스턴스 액세스플릿의 개별 인스턴스에 대한 정보를 보거나 문제 해결을 위해 지정된 플릿 인스턴스에 대한 원격 액세스를요청합니다.

• DescribeInstances – 인스턴스 ID, IP 주소 및 상태를 포함하여, 플릿의 각 인스턴스에 대한 정보를 가져옵니다.

• GetInstanceAccess – 플릿의 지정된 인스턴스에 원격으로 연결하는 데 필요한 액세스 자격 증명을 요청합니다.

VPC 피어링 설정GameLift 호스팅 리소스와 기타 AWS 리소스 간의 VPC 피어링 연결을 생성하고 관리합니다.

• CreateVpcPeeringAuthorization – 사용자의 한 VPC에 피어링 연결에 대한 권한을 부여합니다.• DescribeVpcPeeringAuthorizations – 유효한 피어링 연결 권한 부여를 검색합니다.• DeleteVpcPeeringAuthorization – 피어링 연결 권한 부여를 삭제합니다.• CreateVpcPeeringConnection – GameLift 플릿에 대한 VPC와 사용자의 한 VPC 사이에 피어링 연결을 설

정합니다.• DescribeVpcPeeringConnections – GameLift 플릿과의 활성 또는 보류 중인 VPC 피어링 연결에 대한 정보

를 검색합니다.• DeleteVpcPeeringConnection – GameLift 플릿과의 VPC 피어링 연결을 삭제합니다.

FlexMatch 매치메이킹 작업관리형 GameLift 솔루션을 사용하는 경우, 이러한 작업을 사용하여 게임에 대한 사용자 지정 매치메이킹을설정하고 플레이어에 대해 매치메이킹을 요청합니다. 사용자 지정 게임 빌드 또는 Realtime 서버를 사용하여게임에 FlexMatch를 추가할 수 있습니다.

매치메이킹 규칙 및 프로세스 설정FlexMatch 매치메이커를 구성하고 매치 및 팀을 만들기 위한 일련의 규칙을 정의합니다.

매치메이킹 구성

• CreateMatchmakingConfiguration – 플레이어 그룹을 빌드하고 새 게임 세션에 배치하기 위한 명령을 사용하여 매치메이킹 구성을 만듭니다.

• DescribeMatchmakingConfigurations – GameLift 리전에 정의된 매치메이킹 구성을 검색합니다.• UpdateMatchmakingConfiguration – 매치메이킹 구성에 대한 설정을 변경합니다.• DeleteMatchmakingConfiguration – 리전에서 매치메이킹 구성을 제거합니다.

매치메이킹 규칙 세트

• CreateMatchmakingRuleSet – 플레이어 매치를 검색할 때 사용할 규칙 집합을 만듭니다.• DescribeMatchmakingRuleSets – GameLift 리전에 정의된 매치메이킹 규칙 집합을 검색합니다.• ValidateMatchmakingRuleSet – 매치메이킹 규칙 집합에 대한 구문을 확인합니다.

버전226

Amazon GameLift 개발자 안내서GameLift FleetIQ 작업

• DeleteMatchmakingRuleSet – 리전에서 매치메이킹 규칙 집합을 제거합니다.

매치메이킹 요청게임 클라이언트 서비스에서 이러한 작업을 호출하여 플레이어 매치메이킹 요청을 관리합니다. 성공적인 매치는 자동으로 새 게임 세션에 배치됩니다.

• StartMatchmaking – 함께 플레이하고자 하는 플레이어 한 명 또는 그룹에 대해 매치메이킹을 요청합니다.• DescribeMatchmaking – 상태를 포함하여 매치메이킹 요청에 대한 세부 정보를 가져옵니다.• AcceptMatch – 플레이어의 수락이 필요한 매치인 경우, 플레이어가 제안된 매치를 수락할 때 등록합니다.• StopMatchmaking – 매치메이킹 요청을 취소합니다.• StartMatchBackfill - 기존 게임 세션의 빈 슬롯을 채우기 위해 추가적인 플레이어 매치를 요청합니다.

GameLift FleetIQ 작업독립 실행형 GameLift FleetIQ 솔루션을 사용하는 경우, 이러한 작업을 사용하여 Auto Scaling 그룹과 함께Amazon EC2 리소스를 통해 호스팅되는 게임 서버 그룹 및 게임 서버를 관리합니다.

게임 서버 그룹

• CreateGameServerGroup – 새 게임 서버 그룹 및 해당 Auto Scaling 그룹을 생성하고 게임 서버를 호스팅하는 인스턴스 실행을 시작합니다.

• ListGameServerGroups – GameLift 리전에 있는 모든 게임 서버 그룹의 목록을 가져옵니다.• DescribeGameServerGroup – 게임 서버 그룹에 대한 메타데이터를 검색합니다.• UpdateGameServerGroup – 게임 서버 그룹 메타데이터를 변경합니다.• DeleteGameServerGroup – 게임 서버 그룹을 영구적으로 제거하고 연결된 호스팅 리소스에 대한 FleetIQ

활동을 종료합니다.• ResumeGameServerGroup – 게임 서버 그룹의 일시 중지된 FleetIQ 활동을 복원합니다.• SuspendGameServerGroup – 게임 서버 그룹의 FleetIQ 활동을 일시적으로 중지합니다.

게임 서버

• RegisterGameServer – 새 게임 서버에서 호출하여 해당 게임 서버가 게임 플레이를 호스팅할 준비가 되었음을 GameLift FleetIQ에 알립니다.

• ListGameServers – 게임 클라이언트 서비스에서 호출하여 현재 게임 서버 그룹에서 실행 중인 모든 게임서버 목록을 가져옵니다.

• ClaimGameServer – 게임 클라이언트 서비스에서 호출하여 새 게임 세션을 호스팅할 게임 서버를 찾고 예약합니다.

• DescribeGameServer – 게임 서버에 대한 메타데이터를 검색합니다.• UpdateGameServer – 게임 서버 메타데이터, 상태 또는 사용률 상태를 변경합니다.• DeregisterGameServer – 종료 게임 서버에서 호출하여 게임 서버 그룹에서 게임 서버를 제거할지 묻는 메

시지를 GameLift FleetIQ에 표시합니다.

사용 가능한 프로그래밍 언어AWS SDK Amazon GameLift는 다음 언어로 제공됩니다. 개발 환경 지원에 대한 자세한 내용은 각 언어로 된설명서를 참조하십시오.

• C++(SDK docs)(Amazon GameLift)

버전227

Amazon GameLift 개발자 안내서Realtime 서버 참조

• Java(SDK docs)(Amazon GameLift)• .NET(SDK docs)(Amazon GameLift)• Go(SDK docs)(Amazon GameLift)• Python(SDK docs)(Amazon GameLift)• Ruby(SDK docs)(Amazon GameLift)• PHP(SDK docs)(Amazon GameLift)• JavaScript/Node.js(SDK docs)(Amazon GameLift)

Amazon GameLift Realtime 서버 참조이 단원에는 Amazon GameLift Realtime 서버 SDK에 대한 참조 문서가 나와 있습니다. Realtime Client API및 Realtime 서버 스크립트 구성을 위한 지침을 제공합니다.

주제• Realtime 서버 Client API(C#) 참조 (p. 228)• Amazon GameLiftRealtime 서버 스크립트 참조 (p. 238)

Realtime 서버 Client API(C#) 참조Realtime Client API 참조를 사용하여 Amazon GameLift Realtime 서버에서 사용할 멀티플레이어 게임 클라이언트를 준비합니다. 통합 프로세스에 대한 자세한 내용은 Realtime 서버 시작하기 (p. 32) 단원을 참조하십시오. 클라이언트 API에는 게임 클라이언트가 Realtime 서버에 연결하고 서버를 통해 메시지 및 데이터를 다른 게임 클라이언트와 교환하기 위해 사용할 수 있는 비동기 API 호출 및 비동기 콜백이 포함됩니다.

이 API는 다음 라이브러리에서 정의합니다.

Client.cs

• 동기식 작업 (p. 228)• 비동기 콜백 (p. 232)• 데이터 형식 (p. 234)

Realtime 클라이언트 API를 설정하려면

1. Amazon GameLift Realtime Client SDK를 다운로드합니다.2. C# SDK 라이브러리를 빌드합니다. 솔루션 파일 GameScaleLightweightClientSdkNet45.sln을

찾습니다. README.md 최소 요구 사항과 추가 빌드 옵션은 C# Server SDK의 파일을 참조하십시오. IDE에서 솔루션 파일을 로드합니다. SDK 라이브러리를 생성하려면 NuGet 패키지를 복원하고 솔루션을 빌드합니다.

3. Realtime Client 라이브러리를 게임 클라이언트 프로젝트에 추가합니다.

Realtime 서버 Client API(C#) 참조: 작업이 C# Realtime Client API 참조는 Amazon GameLift 플릿에 배포된 Realtime 서버에서 사용할 멀티플레이어 게임을 준비하는 데 도움이 될 수 있습니다. 통합 프로세스에 대한 자세한 내용은 Realtime 서버 시작하기 (p. 32) 단원을 참조하십시오.

• 동기식 작업• 비동기 콜백 (p. 232)

버전228

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

• 데이터 형식 (p. 234)

Client()

새로운 클라이언트를 초기화하여 Realtime 서버와 통신하고 사용할 연결 유형을 식별합니다.

구문

public Client(ClientConfiguration configuration)

파라미터

clientConfiguration

클라이언트/서버 연결 유형을 지정하는 구성 세부 정보입니다. 이 파라미터 없이 Client()를 호출하도록선택할 수 있습니다. 하지만 이 접근 방식을 선택하면 기본적으로 비보안 연결이 설정됩니다.

유형: ClientConfiguration (p. 235)

필수 항목 여부: 아니요

반환 값

Realtime 서버와 통신하는 데 사용하기 위한 Realtime 클라이언트의 인스턴스를 반환합니다

Connect()

게임 세션을 호스팅하고 있는 서버 프로세스에 연결을 요청합니다.

구문

public ConnectionStatus Connect(string endpoint, int remoteTcpPort, int listenPort, ConnectionToken token)

파라미터

endpoint

연결할 게임 세션의 DNS 이름 또는 IP 주소입니다. 엔드포인트는 GameSession 객체에서 지정되며, 이객체는 AWS SDK Amazon GameLift API 작업 StartGameSessionPlacement, CreateGameSession 또는 DescribeGameSessions에 대한 클라이언트 호출에 응답하여 반환됩니다.

Note

TLS 인증서를 사용하는 플릿에서 Realtime 서버를 실행하는 경우 DNS 이름을 사용해야 합니다.

형식: 문자열

필수 여부: 예remoteTcpPort

게임 세션에 할당된 TCP 연결의 포트 번호입니다. 이 정보는 GameSession 객체에서 지정되며 이 객체는 StartGameSessionPlacement CreateGameSession 또는 DescribeGameSession 요청에 응답하여 반환됩니다.

유형: 정수

버전229

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

유효한 값: 1900 ~ 2000.

필수 여부: 예listenPort

게임 클라이언트가 UDP 채널을 사용하여 전송된 메시지를 수신 대기하는 포트 번호입니다.

유형: 정수

유효한 값: 33400 ~ 33500.

필수 여부: 예토큰

서버 프로세스에 요청하는 게임 클라이언트를 식별하는 선택적 정보입니다.

형식: ConnectionToken (p. 235)

필수 항목 여부: 예

반환 값

클라이언트의 연결 상태를 나타내는 ConnectionStatus (p. 237) 열거형 값을 반환합니다.

Disconnect()

게임 세션에 연결된 경우 게임 세션에서 게임 클라이언트의 연결을 해제합니다.

구문

public void Disconnect()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

이 메서드는 아무것도 반환하지 않습니다.

NewMessage()

지정된 작업 코드를 사용하여 새 메시지 객체를 생성합니다. 메시지 객체가 반환되면 대상을 지정하고 전송방법을 업데이트한 다음 필요에 따라 데이터 페이로드를 추가하여 메시지 콘텐츠를 완료합니다. 완료되면SendMessage()를 사용하여 메시지를 전송합니다.

구문

public RTMessage NewMessage(int opCode)

파라미터

opCode

플레이어 움직임 또는 서버 알림과 같은 게임 이벤트 또는 작업을 식별하는 개발자 정의 작업 코드입니다.

버전230

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

유형: 정수

필수 항목 여부: 예

반환 값

지정된 작업 코드와 기본 전송 방법을 포함한 RTMessage (p. 235) 객체를 반환합니다. 전송 의도 파라미터는 기본적으로 FAST로 설정됩니다.

SendMessage()

지정된 전송 방법을 사용하여 플레이어 또는 그룹에 메시지를 전송합니다.

구문

public void SendMessage(RTMessage message)

파라미터

message

대상 수신자, 전송 방법 및 메시지 콘텐츠를 지정하는 메시지 객체입니다.

형식: RTMessage (p. 235)

필수 항목 여부: 예

반환 값

이 메서드는 아무것도 반환하지 않습니다.

JoinGroup()

지정된 그룹의 멤버십에 플레이어를 추가합니다. 그룹에는 게임에 연결된 플레이어가 몇 명이든 포함될 수있습니다. 참가하면 플레이어는 그룹에 전송된 모든 향후 메시지를 수신하며 전체 그룹에 메시지를 전송할수 있습니다.

구문

public void JoinGroup(int targetGroup)

파라미터

targetGroup

플레이어를 추가할 그룹을 식별하는 고유 ID입니다. 그룹 ID는 개발자가 정의합니다.

유형: 정수

필수 항목 여부: 예

반환 값

이 메서드는 아무것도 반환하지 않습니다. 이 요청은 안정적인(TCP) 전송 방법을 사용하여 전송되기 때문에실패한 요청은 OnError() (p. 233) 콜백을 트리거합니다.

버전231

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

LeaveGroup()지정된 그룹의 멤버십에서 플레이어를 제거합니다. 그룹에 더 이상 속하지 않으면 플레이어는 그룹에 전송된메시지를 수신하지 않으며 전체 그룹에 메시지를 전송할 수 없습니다.

구문

public void LeaveGroup(int targetGroup)

파라미터

targetGroup

플레이어를 제거할 그룹을 식별하는 고유 ID입니다. 그룹 ID는 개발자가 정의합니다.

유형: 정수

필수 항목 여부: 예

반환 값

이 메서드는 아무것도 반환하지 않습니다. 이 요청은 안정적인(TCP) 전송 방법을 사용하여 전송되기 때문에실패한 요청은 OnError() (p. 233) 콜백을 트리거합니다.

RequestGroupMembership()지정된 그룹의 플레이어 목록을 게임 클라이언트에 전송하도록 요청합니다. 플레이어가 그룹의 멤버인지 여부와 상관없이 모든 플레이어가 이 정보를 요청할 수 있습니다. 이 요청에 응답하여 멤버십 목록이OnGroupMembershipUpdated() (p. 234) 콜백을 통해 클라이언트에 전송됩니다.

구문

public void RequestGroupMembership(int targetGroup)

파라미터

targetGroup

멤버십 정보를 가져올 그룹을 식별하는 고유 ID입니다. 그룹 ID는 개발자가 정의합니다.

유형: 정수

필수 항목 여부: 예

반환 값

이 메서드는 아무것도 반환하지 않습니다.

Realtime 서버 Client API(C#) 참조: 비동기 콜백이 C# Realtime Client API 참조를 사용하여 Amazon GameLift 플릿에 배포된 Realtime 서버에서 사용할 멀티플레이어 게임을 준비합니다. 통합 프로세스에 대한 자세한 내용은 Realtime 서버 시작하기 (p. 32) 단원을참조하십시오.

• 동기식 작업 (p. 228)• 비동기 콜백

버전232

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

• 데이터 형식 (p. 234)

게임 클라이언트는 이러한 콜백 메서드를 구현하여 이벤트에 응답해야 합니다. Realtime 서버는 이러한 콜백을 호출하여 게임 관련 정보를 게임 클라이언트에 전송합니다. Realtime 서버 스크립트에서 사용자 지정 게임 로직을 사용하여 동일한 이벤트에 대한 콜백을 구현할 수도 있습니다. Realtime 서버에 대한 스크립트 콜백 (p. 238) 단원을 참조하십시오.

콜백 메서드는 ClientEvents.cs에 정의되어 있습니다.

OnOpen()서버 프로세스가 게임 클라이언트의 연결 요청을 수락하고 연결을 열 때 호출됩니다.

구문

public void OnOpen()

파라미터

이 메서드에는 파라미터가 없습니다.

반환 값

이 메서드는 아무것도 반환하지 않습니다.

OnClose()게임 세션이 종료된 후와 같이 서버 프로세스가 게임 클라이언트와 연결을 종료할 때 호출됩니다.

구문

public void OnClose()

파라미터

이 메서드에는 파라미터가 없습니다.

반환 값

이 메서드는 아무것도 반환하지 않습니다.

OnError()Realtime Client API 요청에 대한 오류가 발생할 때 호출됩니다. 이 콜백을 사용자 지정하여 다양한 콜백 오류를 처리할 수 있습니다.

구문

private void OnError(byte[] args)

파라미터

이 메서드에는 파라미터가 없습니다.

반환 값

이 메서드는 아무것도 반환하지 않습니다.

버전233

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

OnDataReceived()

게임 클라이언트가 Realtime 서버로부터 메시지를 수신할 때 호출됩니다. 이 메서드는 메시지와 알림이 게임클라이언트에 수신되는 기본 메서드입니다.

구문

public void OnDataReceived(DataReceivedEventArgs dataReceivedEventArgs)

파라미터

dataReceivedEventArgs

메시지 활동과 관련된 정보입니다.

형식: DataReceivedEventArgs (p. 236)

필수 항목 여부: 예

반환 값

이 메서드는 아무것도 반환하지 않습니다.

OnGroupMembershipUpdated()

플레이어가 속한 그룹의 멤버십이 업데이트된 후에 호출됩니다. 이 콜백은 클라이언트가RequestGroupMembership를 호출할 때도 호출됩니다.

구문

public void OnGroupMembershipUpdated(GroupMembershipEventArgs groupMembershipEventArgs)

파라미터

groupMembershipEventArgs

그룹 멤버십 활동과 관련된 정보입니다.

형식: GroupMembershipEventArgs (p. 237)

필수 항목 여부: 예

반환 값

이 메서드는 아무것도 반환하지 않습니다.

Realtime 서버 Client API(C#) 참조: 데이터 형식이 C# Realtime Client API 참조는 Amazon GameLift 플릿에 배포된 Realtime 서버에서 사용할 멀티플레이어 게임을 준비하는 데 도움이 될 수 있습니다. 통합 프로세스에 대한 자세한 내용은 Realtime 서버 시작하기 (p. 32) 단원을 참조하십시오.

• 동기식 작업 (p. 228)• 비동기 콜백 (p. 232)• 데이터 형식

버전234

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

ClientConfiguration

게임 클라이언트가 Realtime 서버에 연결하는 방법에 대한 정보입니다.

목차

ConnectionType

사용할 클라이언트/서버 연결 유형입니다. 보안 또는 비보안을 선택할 수 있습니다. 연결 유형을 지정하지 않는 경우 기본값은 비보안입니다.

Note

TLS 인증서를 사용하는 보안 플릿에서 Realtime 서버에 연결하는 경우RT_OVER_WSS_DTLS_TLS12 값을 사용해야 합니다.

형식: ConnectionType 열거형 (p. 237) 값.

필수 여부: 아니요

ConnectionToken

Realtime 서버와 연결을 요청하는 게임 클라이언트 및/또는 플레이어에 대한 정보입니다.

목차

playerSessionId

새로운 플레이어 세션이 생성되었을 때 GameLift가 발행한 고유 ID입니다. 플레이어 세션 ID는 PlayerSession 객체에서 지정되며, 이 객체는 AWS SDK Amazon GameLift API 작업 StartGameSessionPlacement, CreateGameSession, DescribeGameSessionPlacement 또는 DescribePlayerSessions는 대한 클라이언트 호출에 응답하여 반환됩니다.

형식: 문자열

필수 여부: 아니요payload

연결 시 Realtime서버에 전달할 개발자 정의 정보입니다. 이 정보에는 사용자 지정 로그인 메커니즘에사용할 수 있는 임의 데이터가 포함됩니다. 예를 들어, 페이로드는 클라이언트가 연결하도록 허용하기전에 Realtime 서버 스크립트에서 처리할 인증 정보를 제공합니다.

형식: 바이트 배열

필수 여부: 아니요

RTMessage

메시지의 콘텐츠 및 전송 정보입니다. 메시지는 대상 플레이어 또는 대상 그룹을 지정해야 합니다.

목차

opCode

플레이어 움직임 또는 서버 알림과 같은 게임 이벤트 또는 작업을 식별하는 개발자 정의 작업 코드입니다. 메시지의 Op 코드는 제공되는 데이터 페이로드에 컨텍스트를 제공합니다. NewMessage()를 사용하여 생성된 메시지에는 작업 코드가 이미 설정되지 있지만, 언제든지 변경할 수 있습니다.

버전235

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

유형: 정수

필수 여부: 예targetPlayer

전송되는 메시지의 의도된 수신자인 플레이어를 식별하는 고유 ID입니다. 대상은 서버 자체(서버 ID 사용) 또는 다른 플레이어(플레이어 ID 사용)일 수 있습니다.

유형: 정수

필수 여부: 아니요targetGroup

전송되는 메시지의 의도된 수신자인 그룹을 식별하는 고유 ID입니다. 그룹 ID는 개발자가 정의합니다.

유형: 정수

필수 여부: 아니요deliveryIntent

안정적인 TCP 연결 또는 빠른 UDP 채널 중 어떤 방법을 사용하여 메시지를 전송할지를 나타냅니다.NewMessage() (p. 230)를 사용하여 생성된 메시지입니다.

형식: DeliveryIntent enum

유효한 값: FAST | RELIABLE

필수 여부: 예payload

메시지 콘텐츠입니다. 이 정보는 수반되는 작업 코드를 기반으로 게임 클라이언트에서 처리할 수 있도록필요에 따라 구조화됩니다. 이 정보에는 게임 상태 데이터 또는 게임 클라이언트 간 또는 게임 클라이언트와 Realtime 서버 간에 통신해야 하는 기타 정보가 포함될 수 있습니다.

형식: 바이트 배열

필수 여부: 아니요

DataReceivedEventArgs

OnDataReceived() (p. 234) 콜백을 통해 제공되는 데이터입니다.

목차

sender

메시지를 시작한 엔터티(플레이어 ID 또는 서버 ID)를 식별하는 고유 ID입니다.

유형: 정수

필수 여부: 예opCode

플레이어 움직임 또는 서버 알림과 같은 게임 이벤트 또는 작업을 식별하는 개발자 정의 작업 코드입니다. 메시지의 Op 코드는 제공되는 데이터 페이로드에 컨텍스트를 제공합니다.

유형: 정수

버전236

Amazon GameLift 개발자 안내서Realtime Client API(C#) 참조

필수 여부: 예데이터

메시지 콘텐츠입니다. 이 정보는 수반되는 작업 코드를 기반으로 게임 클라이언트에서 처리할 수 있도록필요에 따라 구조화됩니다. 이 정보에는 게임 상태 데이터 또는 게임 클라이언트 간 또는 게임 클라이언트와 Realtime 서버 간에 통신해야 하는 기타 정보가 포함될 수 있습니다.

형식: 바이트 배열

필수 여부: 아니요

GroupMembershipEventArgs

OnGroupMembershipUpdated() (p. 234) 콜백을 통해 제공되는 데이터입니다.

목차

sender

그룹 멤버십 업데이트를 요청한 플레이어를 식별하는 고유 ID입니다.

유형: 정수

필수 여부: 예opCode

게임 이벤트 또는 작업을 식별하는 개발자 정의 작업 코드입니다.

유형: 정수

필수 여부: 예groupId

전송되는 메시지의 의도된 수신자인 그룹을 식별하는 고유 ID입니다. 그룹 ID는 개발자가 정의합니다.

유형: 정수

필수 여부: 예playerId

지정된 그룹의 현재 멤버인 플레이어 ID의 목록입니다.

형식: 정수 배열

필수 여부: 예

열거형

Realtime Client SDK에 대해 정의된 열거형은 다음과 같이 정의됩니다.

ConnectionStatus• CONNECTED – TCP 연결만 사용하여 게임 클라이언트가 Realtime 서버에 연결됩니다. 전송 의도와

상관없이 모든 메시지가 TCP를 통해 전송됩니다.• CONNECTED_SEND_FAST – TCP 및 UDP 연결을 사용하여 게임 클라이언트가 Realtime 서버에 연

결됩니다. 하지만 UDP를 통해 메시지를 수신하는 기능은 아직 확인되지 않으므로, 결과적으로 게임클라이언트에 전송되는 모든 메시지는 TCP를 사용합니다.

버전237

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 참조

• CONNECTED_SEND_AND_RECEIVE_FAST – TCP 및 UDP 연결을 사용하여 게임 클라이언트가Realtime 서버에 연결됩니다. TCP 또는 UDP를 사용하여 게임 클라이언트가 메시지를 전송하고 수신할 수 있습니다.

• CONNECTING 게임 클라이언트가 연결 요청을 전송했으며 Realtime 서버가 요청을 처리하는 중입니다.

• DISCONNECTED_CLIENT_CALL – 게임 클라이언트의 Disconnect() (p. 230) 요청에 응답하여Realtime 서버에서 게임 클라이언트의 연결이 해제되었습니다.

• DISCONNECTED – 클라이언트 연결 해제 호출 이외의 다른 이유로 Realtime 서버에서 게임 클라이언트의 연결이 해제되었습니다.

ConnectionType• RT_OVER_WSS_DTLS_TLS12 – 보안 연결 유형입니다.

TLS 인증서가 생성된 GameLift 플릿에서 실행 중인 Realtime 서버에 사용됩니다. 보안 연결을 사용하는 경우 TCP 트래픽은 TLS 1.2를 사용하여 암호화되고 UDP 트래픽은 DTLS 1.2를 사용하여 암호화됩니다.

• RT_OVER_WS_UDP_UNSECURED – 비보안 연결 유형입니다.• RT_OVER_WEBSOCKET – 비보안 연결 유형입니다. 이 값은 더 이상 선호되지 않습니다.

DeliveryIntent• FAST – UDP 채널을 사용하여 전송됩니다.• RELIABLE – TCP 연결을 사용하여 전송됩니다.

Amazon GameLiftRealtime 서버 스크립트 참조이러한 리소스를 사용하여 Realtime 스크립트에 사용자 지정 로직을 확장 구축합니다.

주제• Realtime 서버에 대한 스크립트 콜백 (p. 238)• Realtime 서버 인터페이스 (p. 240)

Realtime 서버에 대한 스크립트 콜백Realtime 스크립트에서 다음 콜백을 구현하여 이벤트에 응답하기 위한 사용자 지정 로직을 제공할 수 있습니다.

init

Realtime 서버를 초기화하고 Realtime 서버 인터페이스를 수신합니다.

구문

init(rtsession)

onMessage

수신한 메시지를 서버로 전송할 때 호출됩니다.

구문

onMessage(gameMessage)

버전238

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 참조

onHealthCheck게임 세션 상태를 설정할 때 호출됩니다. 기본적인 상태는 정상(또는 true)입니다. 이 콜백을 구현하여 사용자 지정 상태를 확인하고 상태를 반환할 수 있습니다.

구문

onHealthCheck()

onStartGameSession게임 세션 객체가 전달되고 새 게임 세션이 시작될 때 호출됩니다.

구문

onStartGameSession(session)

onProcessTerminateAmazon GameLift 서비스에 의해 서버 프로세스가 종료될 때 호출됩니다. 이것이 게임 세션에서 명확하게 종료하는 트리거 역할을 할 수 있습니다. processEnding().를 호출할 필요가 없습니다.

구문

onProcessTerminate()

onPlayerConnect플레이어가 연결을 요청하고 초기 확인을 통과한 경우 호출됩니다.

구문

onPlayerConnect(connectMessage)

onPlayerAccepted플레이어 연결을 수락할 때 호출됩니다.

구문

onPlayerAccepted(player)

onPlayerDisconnect연결 해제 요청을 전송하거나 기타 방법을 통해 플레이어가 게임 세션의 연결을 해제할 때 호출됩니다.

구문

onPlayerDisconnect(peerId)

onProcessStarted서버 프로세스를 시작할 때 호출됩니다. 스크립트는 이 콜백을 사용하여 게임 세션을 호스팅하려고 준비하는데 필요한 사용자 지정 작업을 수행할 수 있습니다.

버전239

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 참조

구문

onProcessStarted(args)

onSendToPlayer

서버에서 다른 플레이어에게 전송할 메시지를 한 플레이어로부터 수신할 때 호출됩니다. 이 프로세스는 메시지를 전송하기 전에 실행됩니다.

구문

onSendToPlayer(gameMessage)

onSendToGroup

서버에서 그룹에 전송할 메시지를 한 플레이어로부터 수신할 때 호출됩니다. 이 프로세스는 메시지를 전송하기 전에 실행됩니다.

구문

onSendToGroup(gameMessage))

onPlayerJoinGroup

플레이어가 그룹에 가입하기 위해 요청을 전송할 때 호출됩니다.

구문

onPlayerJoinGroup(groupId, peerId)

onPlayerLeaveGroup

플레이어가 그룹에서 나가기 위해 요청을 전송할 때 호출됩니다.

구문

onPlayerLeaveGroup(groupId, peerId)

Realtime 서버 인터페이스Realtime 스크립트가 초기화되면 Realtime 서버 인터페이스가 반환됩니다. 이 주제는 인터페이스를 통해 사용할 수 있는 속성과 메서드를 설명합니다. Realtime 스크립트 작성에 대해 자세히 알아보고 Realtime 스크립트 만들기 (p. 62)에서 자세한 스크립트 예제를 살펴봅니다.

Realtime 인터페이스를 통해 다음과 같은 객체에 액세스합니다.

• session• player• gameMessage

Realtime 세션 객체

버전240

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 참조

이러한 메서드를 사용하여 서버 관련 정보에 액세스하고 서버 관련 작업을 실시합니다.

getPlayers()

현재 게임 세션에 연결되어 있는 플레이어의 피어 ID 목록을 검색합니다. 플레이어 객체의 배열을 반환합니다.

구문

rtSession.getPlayers()

broadcastGroupMembershipUpdate()

업데이트된 그룹 구성원 자격 목록을 플레이어 그룹으로 전송합니다. 브로드캐스트할 구성원 자격(groupIdToBroadcast)과 업데이트를 수신할 그룹(targetGroupId)을 지정합니다.

구문

rtSession.broadcastGroupMembershipUpdate(groupIdToBroadcast, targetGroupId)

getServerId()

메시지를 서버로 라우팅할 때 사용되는 서버의 고유한 피어 ID 식별자를 검색합니다.

구문

rtSession.getServerId()

getAllPlayersGroupId()

현재 게임 세션에 연결되어 있는 모든 플레이어가 속한 기본 그룹의 그룹 ID를 검색합니다.

구문

rtSession.getAllPlayersGroupId()

processEnding()

Realtime 서버가 게임 서버를 종료하게 합니다. 이 기능은 게임 세션에서 명확하게 종료하도록 Realtime 스크립트에서 호출해야 합니다.

구문

rtSession.processEnding()

GetGameSessionId()

현재 실행 중인 게임 세션의 고유한 ID를 검색합니다.

구문

rtSession.getGameSessionId()

버전241

Amazon GameLift 개발자 안내서Realtime 서버 스크립트 참조

getLogger()

로깅할 인터페이스를 검색합니다. 이것을 사용하여 게임 세션 로그에 캡처될 문을 기록합니다. 로거는 “정보”, “경고” 및 “오류” 문 사용을 지원합니다. 예: logger.info("<string>").

구문

rtSession.getLogger()

SendMessage()

Realtime 서버에서 newTextGameMessage 또는 newBinaryGameMessage를 사용하여 생성된 메시지를UDP 채널을 사용하는 플레이어 수신자에게 전송합니다. 플레이어의 피어 ID를 사용하여 수신자를 식별합니다.

구문

rtSession.sendMessage(gameMessage, targetPlayer)

sendGroupMessage()

Realtime 서버에서 newTextGameMessage 또는 newBinaryGameMessage를 사용하여 생성된 메시지를UDP 채널을 사용하는 모든 플레이어 그룹에게 전송합니다. 그룹 ID를 사용하는 수신자를 식별합니다.

구문

rtSession.sendGroupMessage(gameMessage, targetGroup)

sendReliableMessage()

Realtime 서버에서 newTextGameMessage 또는 newBinaryGameMessage를 사용하여 생성된 메시지를TCP 채널을 사용하는 플레이어 수신자에게 전송합니다. 플레이어의 피어 ID를 사용하여 수신자를 식별합니다.

구문

rtSession.sendReliableMessage(gameMessage, targetPlayer)

sendReliableGroupMessage()

Realtime 서버에서 newTextGameMessage 또는 newBinaryGameMessage를 사용하여 생성된 메시지를TCP 채널을 사용하는 모든 플레이어 그룹에게 전송합니다. 그룹 ID를 사용하는 수신자를 식별합니다.

구문

rtSession.sendReliableGroupMessage(gameMessage, targetGroup)

newTextGameMessage()

SendMessage 기능을 사용하는 플레이어 수신자에게 서버에서 전송할 텍스트가 포함된 새로운 메시지를 생성합니다. 메시지 형식은 Realtime Client SDK에서 사용되는 형식과 비슷합니다(RTMessage (p. 235) 참조). gameMessage 객체를 반환합니다.

버전242

Amazon GameLift 개발자 안내서Server SDK 참조

구문

rtSession.newTextGameMessage(opcode, sender, payload)

newBinaryGameMessage()

SendMessage 기능을 사용하는 플레이어 수신자에게 서버에서 전송할 이진 데이터가 포함된 새로운 메시지를 생성합니다. 메시지 형식은 Realtime Client SDK에서 사용되는 형식과 비슷합니다(RTMessage (p. 235)참조). gameMessage 객체를 반환합니다.

구문

rtSession.newBinaryGameMessage(opcode, sender, binaryPayload)

플레이어 객체

플레이어 관련 정보에 액세스합니다.

player.peerId

Realtime 서버에 연결할 때 게임 클라이언트에 할당되어 게임 세션에 참가하는 고유한 ID입니다.

player.playerSessionId

Realtime 서버에 연결되고 게임 세션에 참가할 때 게임 클라이언트가 참조한 플레이어 세션 ID입니다.

게임 메시지 객체

이러한 메서드를 사용하여 Realtime 서버가 수신하는 메시지에 액세스합니다. 게임 클라이언트에서 수신되는 메시지는 RTMessage (p. 235) 구조를 갖습니다.

gameMessage.opcode

메시지에 포함된 작업 코드입니다.

gameMessage.payload

메시지에 포함된 페이로드입니다. 텍스트 또는 이진일 수 있습니다.

gameMessage.sender

메시지를 전송한 게임 클라이언트의 피어 ID입니다.

gameMessage.reliable

메시지를 TCP(true) 또는 UDP(false)를 통해 전송했는지 여부를 나타내는 부울입니다.

Amazon GameLift Server SDK 참조이 단원에는 Amazon GameLift Server SDK에 대한 참조 문서가 나와 있습니다. Server SDK를 사용하여 사용자 지정 게임 서버를 Amazon GameLift 서비스와 통합함으로써 필요에 따라 게임 서버를 시작하고 관리합니다.

버전243

Amazon GameLift 개발자 안내서C++용 Server API reference

주제• C++용 GameLift Server API reference (p. 244)• Amazon GameLiftServer API(C#) Reference (p. 259)• Amazon GameLiftUnreal Engine용 Server API Reference (p. 273)

C++용 GameLift Server API reference이 GameLift C++ Server API reference는 GameLift를 통한 멀티플레이어 게임 개발을 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerAPI.h, LogParameters.h 및 ProcessParameters.h에 정의되어 있습니다.

• 작업 (p. 244)• 데이터 형식 (p. 255)

C++용 GameLift Server API reference: 작업이 GameLift C++ Server API reference는 GameLift를 통한 멀티플레이어 게임 개발을 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerAPI.h, LogParameters.h 및 ProcessParameters.h에 정의되어 있습니다.

• Actions• 데이터 형식 (p. 255)

AcceptPlayerSession()

지정된 플레이어 세션 ID를 가진 플레이어가 서버 프로세스에 연결되어 있으며 유효성 검사가 필요함을GameLift 서비스에 알립니다. GameLift는 플레이어 세션 ID가 유효한지 확인합니다. 즉, 플레이어 세션 ID가 게임 세션에서 플레이어 슬롯을 예약했는지 확인합니다. 검증되면 GameLift가 플레이어 슬롯의 상태를RESERVED에서 ACTIVE로 변경합니다.

구문

GenericOutcome AcceptPlayerSession(const std::string& playerSessionId);

파라미터

playerSessionId

AWS SDK Amazon GameLift API 작업 CreatePlayerSession 호출에 대한 응답으로 Amazon GameLift서비스가 발급한 고유 ID입니다. 게임 클라이언트가 서버 프로세스에 연결할 때 이 ID를 참조합니다.

형식: std::string

필수 여부: 아니요

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

버전244

Amazon GameLift 개발자 안내서C++용 Server API reference

이 예는 잘못된 플레이어 세션 ID 검증 및 거부를 비롯해 연결 요청을 처리하기 위한 함수를 보여줍니다.

void ReceiveConnectingPlayerSessionID (Connection& connection, const std::string& playerSessionId){ Aws::GameLift::GenericOutcome connectOutcome = Aws::GameLift::Server::AcceptPlayerSession(playerSessionId); if(connectOutcome.IsSuccess()) { connectionToSessionMap.emplace(connection, playerSessionId); connection.Accept(); } else { connection.Reject(connectOutcome.GetError().GetMessage(); } }

ActivateGameSession()

GameLift 서비스에 서버 프로세스가 게임 세션을 시작했으며 이제 플레이어 연결을 수신할 준비가 되었음을알립니다. 이 작업은 모든 게임 세션 초기화가 완료된 후 onStartGameSession() 콜백 함수의 일부로 호출되어야 합니다.

구문

GenericOutcome ActivateGameSession();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예에서는 onStartGameSession() 콜백 함수의 일부로 ActivateGameSession()이 호출되는 것을보여줍니다.

void onStartGameSession(Aws::GameLift::Model::GameSession myGameSession){ // game-specific tasks when starting a new game session, such as loading map GenericOutcome outcome = Aws::GameLift::Server::ActivateGameSession();}

DescribePlayerSessions()

설정, 세션 메타데이터 및 플레이어 데이터 등의 플레이어 세션 데이터를 가져옵니다. 이 작업을 사용하면 단일 플레이어 세션 정보, 게임 세션에 있는 모든 플레이어 세션 정보 또는 단일 플레이어 ID와 관련된 모든 플레이어 세션 정보를 가져올 수 있습니다.

구문

DescribePlayerSessionsOutcome DescribePlayerSessions (

버전245

Amazon GameLift 개발자 안내서C++용 Server API reference

const Aws::GameLift::Server::Model::DescribePlayerSessionsRequest &describePlayerSessionsRequest);

파라미터

describePlayerSessionsRequest

검색할 플레이어 세션을 설명하는 DescribePlayerSessionsRequest (p. 255) 객체입니다.

필수 항목 여부: 예

반환 값

성공하는 경우, 요청 파라미터에 적합한 플레이어 세션 객체 집합이 들어 있는DescribePlayerSessionsOutcome 객체를 반환합니다. 플레이어 세션 객체 구조는 AWS SDK GameLiftAPI PlayerSession 데이터 유형과 동일합니다.

다음은 지정된 게임 세션에 활성 상태로 연결되어 있는 모든 플레이어 세션을 검색하는 요청을 보여주는 예입니다. NextToken을 생략하고 Limit 값을 10으로 설정하면, GameLift가 요청과 일치하는 처음 10개의 플레이어 세션 레코드를 반환합니다.

// Set request parametersAws::GameLift::Server::Model::DescribePlayerSessionsRequest request;request.SetPlayerSessionStatusFilter(Aws::GameLift::Server::Model::PlayerSessionStatusMapper::GetNameForPlayerSessionStatus(Aws::GameLift::Server::Model::PlayerSessionStatus::Active));request.SetLimit(10);request.SetGameSessionId("the game session ID"); // can use GetGameSessionId()

// Call DescribePlayerSessionsAws::GameLift::DescribePlayerSessionsOutcome playerSessionsOutcome = Aws::GameLift::Server::DescribePlayerSessions(request);

GetGameSessionId()

서버 프로세스가 활성인 경우 현재 서버 프로세스에서 호스팅하고 있는 게임 세션의 고유 식별자를 가져옵니다. 식별자는 다음과 같은 ARN 형식으로 반환됩니다. arn:aws:gamelift:<region>::gamesession/fleet-<fleet ID>/<ID string>

구문

AwsStringOutcome GetGameSessionId();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 게임 세션 ID를 AwsStringOutcome 객체로 반환합니다. 실패하면 오류 메시지를 반환합니다.

Aws::GameLift::AwsStringOutcome sessionIdOutcome = Aws::GameLift::Server::GetGameSessionId();

버전246

Amazon GameLift 개발자 안내서C++용 Server API reference

GetInstanceCertificate()

플릿 및 플릿의 인스턴스와 연결된 pem 인코딩된 TLS 인증서의 파일 위치를 검색합니다. 이 인증서는 인증서 구성을 GENERATED로 설정한 상태에서 새 플릿을 만들 때 생성됩니다. 이 인증서를 사용하여 게임 클라이언트와 보안 연결을 설정하고 클라이언트/서버 통신을 암호화합니다

구문

GetInstanceCertificateOutcome GetInstanceCertificate();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 인스턴스에 저장된 플릿의 TLS 인증서 파일 위치를 포함한GetInstanceCertificateOutcome 객체를 반환합니다 실패하면 오류 메시지를 반환합니다.

Aws::GameLift::GetInstanceCertificateOutcome certificateOutcome = Aws::GameLift::Server::GetInstanceCertificate();

GetSdkVersion()

사용 중인 SDK의 현재 버전 번호를 반환합니다.

구문

AwsStringOutcome GetSdkVersion();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 현재 SDK 버전을 AwsStringOutcome 객체로 반환합니다. 반환된 문자열에는 버전 번호만(예:"3.1.5") 포함되어 있습니다. 실패하면 오류 메시지를 반환합니다.

Aws::GameLift::AwsStringOutcome SdkVersionOutcome = Aws::GameLift::Server::GetSdkVersion();

GetTerminationTime()

종료 시간을 사용할 수 있는 경우 서버 프로세스가 종료되도록 예약된 시간을 반환합니다. 서버 프로세스는 GameLift 서비스에서 onProcessTerminate() 콜백을 수신한 후 이 작업을 수행합니다. 서버 프로세스는 (1) 상태가 좋지 않을 때, (2) 축소 이벤트 중 인스턴스가 종료될 때, (3) 인스턴스가 스팟 인스턴스 중단 (p. 100)으로 인해 종료될 때 등의 이유로 인해 종료될 수 있습니다.

프로세스가 onProcessTerminate() 콜백을 수신할 때 반환되는 값은 예상 종료 시간(epoch 초)입니다.종료 시간을 사용할 수 없는 경우 반환되는 값은 -1이며 이는 서버 프로세스가 언제든지 종료될 수 있음을 나

버전247

Amazon GameLift 개발자 안내서C++용 Server API reference

타냅니다. 프로세스에서 onProcessTerminate() 콜백을 수신하지 못할 때 반환되는 값은 항상 -1입니다.서버 프로세스 종료 (p. 44)에 대해 자세히 알아보십시오.

구문

AwsLongOutcome GetTerminationTime();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 현재 SDK 버전을 AwsLongOutcome 객체로 반환합니다. 값은 종료 시간(epoch 초) 또는 값 -1입니다. 실패하면 오류 메시지를 반환합니다.

Aws::GameLift::AwsLongOutcome TermTimeOutcome = Aws::GameLift::Server::GetTerminationTime();

InitSDK()

GameLift SDK를 초기화합니다. 이 메서드는 다른 GameLift 관련 초기화가 진행되기 전, 시작 시 호출되어야합니다.

구문

InitSDKOutcome InitSDK();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하는 경우, 서버 프로세스가 ProcessReady() (p. 249)을(를) 호출할 준비가 되었음을 나타내는InitSdkOutcome 객체를 반환합니다.

Aws::GameLift::Server::InitSDKOutcome initOutcome = Aws::GameLift::Server::InitSDK();

ProcessEnding()

GameLift 서비스에 서버 프로세스를 중단할 준비가 되었음을 알립니다. 이 메서드는 종료 코드 0으로 종료해야 합니다. 0이 아닌 종료 코드를 사용하면 프로세스가 정상적으로 종료되지 않았다는 이벤트 메시지가 표시됩니다.

구문

GenericOutcome ProcessEnding();

버전248

Amazon GameLift 개발자 안내서C++용 Server API reference

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::ProcessEnding();

ProcessReady()GameLift 서비스에 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. 이 메서드는InitSDK() (p. 248)를 성공적으로 호출하고 서버 프로세스가 게임 세션을 호스트하기 전에 수행해야 하는설정 작업을 완료한 후에만 호출할 수 있습니다.

이 호출은 동기식입니다. 비동기식 호출을 수행하려면 ProcessReadyAsync() (p. 250)를 사용합니다. 자세한 내용은 서버 프로세스 준비 (p. 42) 단원을 참조하십시오.

구문

GenericOutcome ProcessReady( const Aws::GameLift::Server::ProcessParameters &processParameters);

파라미터

processParameters

다음 서버 프로세스 관련 정보를 전달하는 ProcessParameters (p. 257) 객체입니다.• 게임 서버 코드에 구현되어 있는 콜백 메서드의 이름으로, 서버 프로세스와 통신할 수 있도록

GameLift 서비스가 호출하는 메서드입니다.• 서버 프로세스가 수신하는 포트 번호입니다.• GameLift가 캡처 및 저장하도록 하려는 모든 게임 세션별 파일에 대한 경로입니다.

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예에서는 ProcessReady() (p. 249) 호출 및 콜백 함수 구현을 모두 보여줍니다.

// Set parameters and call ProcessReadystd::string serverLog("serverOut.log"); // Example of a log file written by the game serverstd::vector<std::string> logPaths;logPaths.push_back(serverLog);

int listenPort = 9339;

Aws::GameLift::Server::ProcessParameters processReadyParameter = Aws::GameLift::Server::ProcessParameters( std::bind(&Server::onStartGameSession, this, std::placeholders::_1), std::bind(&Server::onProcessTerminate, this),

버전249

Amazon GameLift 개발자 안내서C++용 Server API reference

std::bind(&Server::OnHealthCheck, this), std::bind(&Server::OnUpdateGameSession, this), listenPort, Aws::GameLift::Server::LogParameters(logPaths));

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::ProcessReady(processReadyParameter);

// Implement callback functionsvoid Server::onStartGameSession(Aws::GameLift::Model::GameSession myGameSession){ // game-specific tasks when starting a new game session, such as loading map GenericOutcome outcome = Aws::GameLift::Server::ActivateGameSession (maxPlayers);}

void Server::onProcessTerminate(){ // game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup GenericOutcome outcome = Aws::GameLift::Server::ProcessEnding();}

bool Server::onHealthCheck(){ bool health; // complete health evaluation within 60 seconds and set health return health;}

ProcessReadyAsync()

GameLift 서비스에 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. 이 메서드는 서버프로세스가 게임 세션을 호스팅할 준비가 된 후 호출되어야 합니다. 이 파라미터는 특정 상황에서 호출할GameLift 콜백 함수의 이름을 지정합니다. 게임 서버 코드는 이 함수를 구현해야 합니다.

이 호출은 비동기식입니다. 동기식 호출을 수행하려면 ProcessReady() (p. 249)를 사용합니다. 자세한 내용은 서버 프로세스 준비 (p. 42) 단원을 참조하십시오.

구문

GenericOutcomeCallable ProcessReadyAsync( const Aws::GameLift::Server::ProcessParameters &processParameters);

파라미터

processParameters

다음 서버 프로세스 관련 정보를 전달하는 ProcessParameters (p. 257) 객체입니다.• 게임 서버 코드에 구현되어 있는 콜백 메서드의 이름으로, 서버 프로세스와 통신할 수 있도록

GameLift 서비스가 호출하는 메서드입니다.• 서버 프로세스가 수신하는 포트 번호입니다.• GameLift가 캡처 및 저장하도록 하려는 모든 게임 세션별 파일에 대한 경로입니다.

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

버전250

Amazon GameLift 개발자 안내서C++용 Server API reference

// Set parameters and call ProcessReadystd::string serverLog("serverOut.log"); // This is an example of a log file written by the game serverstd::vector<std::string> logPaths;logPaths.push_back(serverLog);

int listenPort = 9339;

Aws::GameLift::Server::ProcessParameters processReadyParameter = Aws::GameLift::Server::ProcessParameters( std::bind(&Server::onStartGameSession, this, std::placeholders::_1), std::bind(&Server::onProcessTerminate, this), std::bind(&Server::OnHealthCheck, this), std::bind(&Server::OnUpdateGameSession, this), listenPort, Aws::GameLift::Server::LogParameters(logPaths));

Aws::GameLift::GenericOutcomeCallable outcome = Aws::GameLift::Server::ProcessReadyAsync(processReadyParameter);

// Implement callback functionsvoid onStartGameSession(Aws::GameLift::Model::GameSession myGameSession){ // game-specific tasks when starting a new game session, such as loading map GenericOutcome outcome = Aws::GameLift::Server::ActivateGameSession (maxPlayers);}

void onProcessTerminate(){ // game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup GenericOutcome outcome = Aws::GameLift::Server::ProcessEnding();}

bool onHealthCheck(){ // perform health evaluation and complete within 60 seconds return health;}

RemovePlayerSession()

GameLift 서비스에 지정된 플레이어 세션 ID의 플레이어가 서버 프로세스로부터 연결이 해제되었음을 알립니다. 이에 대한 응답으로, GameLift가 플레이어 슬롯을 새 플레이어에 할당할 수 있는 사용 가능 상태로 변경합니다.

구문

GenericOutcome RemovePlayerSession( const std::string& playerSessionId);

파라미터

playerSessionId

AWS SDK Amazon GameLift API 작업 CreatePlayerSession 호출에 대한 응답으로 Amazon GameLift서비스가 발급한 고유 ID입니다. 게임 클라이언트가 서버 프로세스에 연결할 때 이 ID를 참조합니다.

형식: std::string

버전251

Amazon GameLift 개발자 안내서C++용 Server API reference

필수 여부: 아니요

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

Aws::GameLift::GenericOutcome disconnectOutcome = Aws::GameLift::Server::RemovePlayerSession(playerSessionId);

StartMatchBackfill()

FlexMatch를 통해 생성된 게임 세션에서 열린 슬롯에 참여할 새로운 플레이어를 찾는 요청을 보냅니다.AWS SDK 작업 StartMatchBackfill()을 참조하십시오. 이 작업을 사용하면 게임 세션을 호스팅하는 게임 서버프로세스에서 매치 채우기 요청을 시작할 수 있습니다. FlexMatch에서 FlexMatch를 사용하여 기존 게임 채우기 (p. 75) 채우기 기능에 대해 자세히 알아보십시오.

이 작업은 비동기식입니다. 새로운 플레이어가 성공적으로 매치되면 GameLift 서비스는 콜백 함수OnUpdateGameSession()을 사용하여 업데이트된 매치메이커 데이터를 전달합니다.

서버 프로세스는 한 번에 하나의 활성 매치 채우기 요청만 할 수 있습니다. 새 요청을 보내려면 먼저StopMatchBackfill() (p. 253)을 호출하여 원본 요청을 취소해야 합니다.

구문

StartMatchBackfillOutcome StartMatchBackfill ( const Aws::GameLift::Server::Model::StartMatchBackfillRequest &startBackfillRequest);

파라미터

StartMatchBackfillRequest

다음 정보를 전달하는 StartMatchBackfillRequest (p. 258) 객체입니다.• 백필(backfill) 요청에 할당할 티켓 ID. 이 정보는 선택 사항입니다. ID를 제공하지 않으면 GameLift가

자동으로 ID를 생성합니다.• 요청을 보낼 매치메이커. 전체 구성 ARN이 필요합니다. 이 값은 게임 세션의 매치메이커 데이터에서

수집할 수 있습니다.• 백필(backfill) 중인 게임 세션의 ID.• 게임 세션의 현재 플레이어에 대해 사용 가능한 매치메이킹 데이터.

필수 항목 여부: 예

반환 값

매치 채우기 티켓과 함께 StartMatchBackfillOutcome 객체를 반환하거나 오류 메시지를 포함한 결함이 있는StartMatchBackfillOutcome 객체를 반환합니다. 티켓 상태는 AWS SDK 작업 DescribeMatchmaking()을 사용하여 추적할 수 있습니다.

// Build a backfill requeststd::vector<Player> players;

버전252

Amazon GameLift 개발자 안내서C++용 Server API reference

Aws::GameLift::Server::Model::StartMatchBackfillRequest startBackfillRequest;startBackfillRequest.SetTicketId("a ticket ID"); //optional, autogenerated if not providedstartBackfillRequest.SetMatchmakingConfigurationArn("the matchmaker configuration ARN"); //from the game session matchmaker datastartBackfillRequest.SetGameSessionArn("the game session ARN"); // can use GetGameSessionId()startBackfillRequest.SetPlayers(players); //from the game session matchmaker data

// Send backfill requestAws::GameLift::StartMatchBackfillOutcome backfillOutcome = Aws::GameLift::Server::StartMatchBackfill(startBackfillRequest);

// Implement callback function for backfillvoid Server::OnUpdateGameSession(Aws::GameLift::Server::Model::GameSession gameSession, Aws::GameLift::Server::Model::UpdateReason updateReason, std::string backfillTicketId){ // handle status messages // perform game-specific tasks to prep for newly matched players}

StopMatchBackfill()

StartMatchBackfill() (p. 252)을 통해 생성된 활성 매치 채우기 요청을 취소합니다. AWS SDK 작업StopMatchmaking()을 참조하십시오. FlexMatch에서 FlexMatch를 사용하여 기존 게임 채우기 (p. 75) 채우기기능에 대해 자세히 알아보십시오.

구문

GenericOutcome StopMatchBackfill ( const Aws::GameLift::Server::Model::StopMatchBackfillRequest &stopBackfillRequest);

파라미터

StopMatchBackfillRequest

취소할 매치메이킹 티켓을 식별하는 StopMatchBackfillRequest (p. 258) 객체입니다.• 취소 중인 채우기 요청에 할당한 티켓 ID• 채우기 요청을 보낸 매치메이커• 채우기 요청과 연결된 게임 세션

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

// Set backfill stop request parameters

Aws::GameLift::Server::Model::StopMatchBackfillRequest stopBackfillRequest;stopBackfillRequest.SetTicketId("the ticket ID");stopBackfillRequest.SetGameSessionArn("the game session ARN"); // can use GetGameSessionId()stopBackfillRequest.SetMatchmakingConfigurationArn("the matchmaker configuration ARN"); // from the game session matchmaker data

버전253

Amazon GameLift 개발자 안내서C++용 Server API reference

Aws::GameLift::GenericOutcome stopBackfillOutcome = Aws::GameLift::Server::StopMatchBackfillRequest(stopBackfillRequest);

TerminateGameSession()

GameLift 서비스에 서버 프로세스가 게임 세션을 종료했음을 알립니다. 각 서버 프로세스는 한 번에 한 게임세션만 호스팅하므로 세션을 지정할 필요가 없습니다. 이 작업은 게임 세션 종료 프로세스 마지막에 호출되어야 합니다. 이 작업을 호출한 후 서버 프로세스는 가용성을 알려주는 ProcessReady() (p. 249)를 호출할수 있습니다. 다른 방법으로는 ProcessEnding() (p. 248)을 호출하여 서버 프로세스를 종료하고 인스턴스를 종료할 수 있습니다.

구문

GenericOutcome TerminateGameSession();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예는 게임 세션을 마치는 서버 프로세스를 보여줍니다.

// game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::TerminateGameSession();Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::ProcessReady(onStartGameSession, onProcessTerminate);

UpdatePlayerSessionCreationPolicy()

현재 게임 세션의 새 플레이어 세션 수락 가능성을 업데이트합니다. 모든 새 플레이어 세션을 수락하거나 거부하도록 게임 세션을 설정할 수 있습니다. AWS SDK 작업 UpdateGameSession()을 참조하십시오.

구문

GenericOutcome UpdatePlayerSessionCreationPolicy( Aws::GameLift::Model::PlayerSessionCreationPolicy newPlayerSessionPolicy);

파라미터

newPlayerSessionPolicy

게임 세션이 새 플레이어를 수락하는지 여부를 나타내는 문자열 값입니다.

유형: Aws::GameLift::Model::PlayerSessionCreationPolicy 열거형. 유효한 값으로는 다음이 포함됩니다.• ACCEPT_ALL – 모든 새 플레이어 세션을 수락합니다.• DENY_ALL – 모든 새 플레이어 세션을 거부합니다.

버전254

Amazon GameLift 개발자 안내서C++용 Server API reference

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예는 모든 플레이어를 수락하도록 현재 게임 세션의 참여 정책을 설정합니다.

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::UpdatePlayerSessionCreationPolicy(Aws::GameLift::Model::PlayerSessionCreationPolicy::ACCEPT_ALL);

C++용 GameLift Server API reference: 데이터 유형이 GameLift C++ Server API reference는 GameLift를 통한 멀티플레이어 게임 개발을 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerAPI.h, LogParameters.h 및 ProcessParameters.h에 정의되어 있습니다.

• Actions (p. 244)• 데이터 형식

DescribePlayerSessionsRequest

이 데이터 형식은 검색할 플레이어 세션을 지정하는 데 사용됩니다. 다음과 같이 사용할 수 있습니다.

• 특정 플레이어 세션을 요청하려면 PlayerSessionId를 제공합니다.• 지정한 게임 세션의 모든 플레이어 세션을 요청하려면 GameSessionId를 제공합니다.• 지정한 플레이어의 모든 플레이어 세션을 요청하려면 PlayerId를 제공합니다.

플레이어 세션이 대량일 경우 페이지 매김 파라미터를 사용하여 결과를 순차 블록으로 검색합니다.

목차

GameSessionId

고유한 게임 세션 식별자입니다. 지정한 게임 세션의 모든 플레이어 세션을 요청하려면 이 파라미터를 사용합니다. 게임 세션 ID 형식은 다음과 같습니다.arn:aws:gamelift:<region>::gamesession/fleet-<fleet ID>/<ID string>. <ID string>값은 사용자 지정 ID 문자열(게임 세션을 만들 때 지정한 경우) 또는 생성 문자열입니다.

유형: 문자열

필수 항목 여부: 아니요한도

반환할 최대 결과 수입니다. 결과를 순차적인 일련의 페이지로 가져오려면 이 파라미터를 NextToken과함께 사용합니다. 플레이어 세션 ID가 지정된 경우 이 파라미터가 무시됩니다.

유형: 정수

필수 항목 여부: 아니요

버전255

Amazon GameLift 개발자 안내서C++용 Server API reference

NextToken

결과의 다음 순차 페이지의 시작을 나타내는 토큰입니다. 반환된 토큰을 이 작업에 대한 이전 호출과 함께 사용합니다. 결과 집합의 시작을 지정하려면 값을 지정하지 마십시오. 플레이어 세션 ID가 지정된 경우 이 파라미터가 무시됩니다.

유형: 문자열

필수 항목 여부: 아니요PlayerId

사용자의 고유 식별자입니다. 플레이어 ID는 개발자에 의해 정의됩니다. 플레이어 ID 생성 (p. 50) 단원을 참조하십시오.

유형: 문자열

필수 항목 여부: 아니요PlayerSessionId

플레이어 세션의 고유 식별자입니다.

유형: 문자열

필수 항목 여부: 아니요PlayerSessionStatusFilter

결과를 필터링하는 기준이 되는 플레이어 세션 상태입니다. 다음과 같은 플레이어 세션 상태가 가능합니다.• RESERVED - 플레이어 세션 요청이 수신되었지만, 플레이어가 서버 프로세스에 연결되지 않았거나

확인되지 않았습니다.• ACTIVE - 플레이어가 서버 프로세스에 의해 확인되고 현재 연결되어 있습니다.• COMPLETED - 플레이어 연결이 끊어졌습니다.• TIMEDOUT - 플레이어 세션 요청이 수신되었지만 플레이어가 제한 시간(60초) 이내에 연결하지 않았

거나 확인되지 않았습니다.

유형: 문자열

필수 항목 여부: 아니요

LogParameters이 데이터 유형은 게임 세션 중에 생성된 파일 가운데 게임 세션 종료 시 GameLift가 업로드 및 저장하도록하려는 파일을 식별합니다. 이 정보는 ProcessReady() (p. 249) 호출을 통해 GameLift 서비스에 전달됩니다.

목차

logPaths

GameLift가 향후 사용을 위해 저장하도록 하려는 게임 서버 로그 파일의 디렉터리 경로입니다. 이러한파일은 각 게임 세션 중에 생성됩니다. 파일 경로와 이름은 게임 서버에서 정의되고 루트 게임 빌드 디렉터리에 저장됩니다. 예를 들어, 게임 빌드가 MyGame\sessionlogs\와 같은 경로에 게임 세션 로그를저장할 경우 로그 경로는 c:\game\MyGame\sessionLogs(Windows 인스턴스) 또는 /local/game/MyGame/sessionLogs(Linux 인스턴스)가 됩니다.

형식: std:vector<std::string>

필수 항목 여부: 아니요

버전256

Amazon GameLift 개발자 안내서C++용 Server API reference

ProcessParameters

이 데이터 유형에는 ProcessReady() (p. 249) 호출을 통해 GameLift 서비스로 보낸 파라미터 집합이 포함됩니다.

목차

port

서버 프로세스가 새 플레이어 연결을 수신 대기하는 포트 번호입니다. 이 값은 이 게임 서버 빌드를 전개하는 플릿에 대해 구성된 포트 범위에 속해야 합니다. 이 포트 번호는 게임 세션 및 플레이어 세션 객체에 포함되며, 게임 세션이 서버 프로세스에 연결할 때 이 포트 번호를 사용합니다.

유형: 정수

필수 항목 여부: 예logParameters

게임 세션 로그 파일의 디렉터리 경로 목록을 포함하는 객체입니다.

유형: Aws::GameLift::Server::LogParameters (p. 256)

필수 항목 여부: 아니요onStartGameSession

GameLift 서비스가 새 게임 세션을 활성화하기 위해 호출하는 콜백 함수의 이름입니다. GameLift는 클라이언트 요청 CreateGameSession에 대한 응답으로 이 함수를 호출합니다. 콜백 함수는 GameSession객체를 전달합니다(GameLift Service API Reference에서 정의함).

Type: const std::function<void(Aws::GameLift::Model::GameSession)>onStartGameSession

필수 항목 여부: 예onProcessTerminate

GameLift 서비스가 서버 프로세스를 강제로 종료하기 위해 호출하는 콜백 함수의 이름입니다. 이 함수를 호출한 후 GameLift는 서버 프로세스가 종료될 때까지 5분을 기다렸다가 ProcessEnding() (p. 248)호출로 응답합니다. 응답이 수신되지 않으면 서버 프로세스를 종료합니다.

Type: std::function<void()> onProcessTerminate

필수 항목 여부: 아니요onHealthCheck

GameLift 서비스가 서버 프로세스에서 상태 보고서를 요청하기 위해 호출하는 콜백 함수의 이름입니다.GameLift는 60초 간격으로 이 기능을 호출합니다. 이 함수를 호출한 후 GameLift는 60초 동안 응답을 기다립니다. 아무 것도 수신되지 않으면 프로세스를 비정상으로 기록합니다.

Type: std::function<bool()> onHealthCheck

필수 항목 여부: 아니요onUpdateGameSession

GameLift 서비스가 업데이트된 게임 세션 객체를 제공하기 위해 호출하는 콜백 함수의 이름입니다. 매치 채우기 (p. 75) 요청이 처리되면 GameLift에서 이 함수를 호출합니다. GameSession 객체, 상태 업데이트(updateReason) 및 매치 채우기 티켓 ID를 전달합니다.

Type: std::function<void(Aws::GameLift::Server::Model::UpdateGameSession)>onUpdateGameSession

버전257

Amazon GameLift 개발자 안내서C++용 Server API reference

필수 항목 여부: 아니요

StartMatchBackfillRequest

이 데이터 형식은 매치메이킹 채우기 요청을 보내는 데 사용됩니다. 해당 정보는StartMatchBackfill() (p. 252) 호출을 통해 GameLift 서비스에 전달됩니다.

목차

GameSessionArn

고유한 게임 세션 식별자입니다. GetGameSessionId() (p. 246) API 작업은 ARN 형식의 식별자를 반환합니다.

유형: 문자열

필수 항목 여부: 예MatchmakingConfigurationArn

매치메이커가 이 요청에 사용할 ARN 형식의 고유 식별자입니다. 원본 게임 세션을 만드는 데 사용된 매치메이커를 찾으려면 게임 세션 객체에서 매치메이커 데이터 속성을 확인합니다. 매치메이커 데이터를사용하는 작업 (p. 74)에서 매치메이커 데이터에 대해 자세히 알아보십시오.

유형: 문자열

필수 항목 여부: 예플레이어

현재 게임 세션에 있는 모든 플레이어를 나타내는 데이터 세트입니다. 매치메이커는 이 정보를 사용하여현재 플레이어와 적절하게 일치하는 새로운 플레이어를 검색합니다. 플레이어 객체 형식에 대한 자세한내용은 Amazon GameLift API Reference 가이드를 참조하십시오. 플레이어 속성, ID 및 팀 배정을 찾으려면 매치메이커 데이터 속성에서 게임 세션 객체를 확인합니다. 매치메이커에서 지연 시간을 사용하는경우 현재 리전에 대한 업데이트 지연 시간을 수집하여 각 플레이어의 데이터에 포함합니다.

유형: std:vector<Player>

필수 항목 여부: 예TicketId

매치메이킹 또는 매치 채우기 요청 티켓의 고유 식별자입니다. 여기에 값이 제공되지 않으면 AmazonGameLift는 UUID 형식으로 값을 생성합니다. 이 식별자를 사용하여 매치 채우기 티켓 상태를 추적하거나 필요한 경우 요청을 취소합니다.

유형: 문자열

필수 항목 여부: 아니요

StopMatchBackfillRequest

이 데이터 형식은 매치메이킹 채우기 요청을 취소하는 데 사용됩니다. 해당 정보는StopMatchBackfill() (p. 253) 호출을 통해 GameLift 서비스에 전달됩니다.

목차

GameSessionArn

취소 중인 요청과 연결된 고유한 게임 세션 식별자입니다.

버전258

Amazon GameLift 개발자 안내서Server API(C#) Reference

유형: 문자열

필수 항목 여부: 예MatchmakingConfigurationArn

이 요청을 보낸 매치메이커의 고유 식별자입니다.

유형: 문자열

필수 항목 여부: 예TicketId

취소할 채우기 요청 티켓의 고유 식별자입니다.

유형: 문자열

필수 항목 여부: 예

Amazon GameLiftServer API(C#) Reference이 Amazon GameLift C# Server API Reference는 Amazon GameLift를 통한 멀티플레이어 게임 개발을 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerAPI.cs, LogParameters.cs 및 ProcessParameters.cs에 정의되어 있습니다.

• 작업 (p. 259)• 데이터 형식 (p. 269)

Amazon GameLift Server API (C#) Reference: 작업이 Amazon GameLift C# Server API Reference는 Amazon GameLift를 통한 멀티플레이어 게임 개발을 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerAPI.cs, LogParameters.cs 및 ProcessParameters.cs에 정의되어 있습니다.

• Actions• 데이터 형식 (p. 269)

AcceptPlayerSession()

지정된 플레이어 세션 ID를 가진 플레이어가 서버 프로세스에 연결되어 있고 유효성 검사가 필요함을Amazon GameLift서비스에 알립니다. Amazon GameLift 플레이어 세션 ID가 게임 세션에서 플레이어 슬롯을 예약했는지 여부—를 확인합니다. 검증되면 Amazon GameLift가 플레이어 슬롯의 상태를 RESERVED에서 ACTIVE로 변경합니다.

구문

GenericOutcome AcceptPlayerSession(String playerSessionId)

버전259

Amazon GameLift 개발자 안내서Server API(C#) Reference

파라미터

playerSessionId

새로운 플레이어 세션이 생성되었을 때 GameLift가 발행한 고유 ID입니다. 플레이어 세션 ID는 PlayerSession 객체에서 지정되며, 이 객체는 AWS SDK Amazon GameLift API 작업 StartGameSessionPlacement, CreateGameSession, DescribeGameSessionPlacement 또는 DescribePlayerSessions는 대한 클라이언트 호출에 응답하여 반환됩니다.

형식: 문자열

필수 여부: 아니요

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예는 잘못된 플레이어 세션 ID 검증 및 거부를 비롯해 연결 요청을 처리하기 위한 함수를 보여줍니다.

void ReceiveConnectingPlayerSessionID (Connection connection, String playerSessionId){ var acceptPlayerSessionOutcome = GameLiftServerAPI.AcceptPlayerSession(playerSessionId); if(acceptPlayerSessionOutcome.Success) { connectionToSessionMap.emplace(connection, playerSessionId); connection.Accept(); } else { connection.Reject(acceptPlayerSessionOutcome.Error.ErrorMessage); } }

ActivateGameSession()Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 활성화했으며 이제 플레이어 연결을 수신할 준비가 되었음을 알립니다. 이 작업은 모든 게임 세션 초기화가 완료된 후 onStartGameSession() 콜백 함수의 일부로 호출되어야 합니다.

구문

GenericOutcome ActivateGameSession()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예에서는 onStartGameSession() 위임 함수의 일부로 ActivateGameSession()이 호출되는 것을보여줍니다.

void OnStartGameSession(GameSession gameSession){

버전260

Amazon GameLift 개발자 안내서Server API(C#) Reference

// game-specific tasks when starting a new game session, such as loading map

// When ready to receive players var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession();}

DescribePlayerSessions()설정, 세션 메타데이터 및 플레이어 데이터 등의 플레이어 세션 데이터를 가져옵니다. 이 작업을 사용하면 단일 플레이어 세션 정보, 게임 세션에 있는 모든 플레이어 세션 정보 또는 단일 플레이어 ID와 관련된 모든 플레이어 세션 정보를 가져올 수 있습니다.

구문

DescribePlayerSessionsOutcome DescribePlayerSessions(DescribePlayerSessionsRequest describePlayerSessionsRequest)

파라미터

describePlayerSessionsRequest

검색할 플레이어 세션을 설명하는 DescribePlayerSessionsRequest (p. 269) 객체입니다.

필수 항목 여부: 예

반환 값

성공하는 경우, 요청 파라미터에 적합한 플레이어 세션 객체 집합이 들어 있는DescribePlayerSessionsOutcome 객체를 반환합니다. 플레이어 세션 객체 구조는 AWS SDK AmazonGameLift API 플레이어 세션 데이터 유형과 동일합니다.

다음은 지정된 게임 세션에 활성 상태로 연결되어 있는 모든 플레이어 세션을 검색하는 요청을 보여주는 예입니다. NextToken을 생략하고 Limit 값을 10으로 설정하면, Amazon GameLift가 요청과 일치하는 처음 10개의 플레이어 세션 레코드를 반환합니다.

// Set request parameters var describePlayerSessionsRequest = new Aws.GameLift.Server.Model.DescribePlayerSessionsRequest(){ GameSessionId = GameLiftServerAPI.GetGameSessionId().Result, //gets the ID for the current game session Limit = 10, PlayerSessionStatusFilter = PlayerSessionStatusMapper.GetNameForPlayerSessionStatus(PlayerSessionStatus.ACTIVE)}; // Call DescribePlayerSessionsAws::GameLift::DescribePlayerSessionsOutcome playerSessionsOutcome = Aws::GameLift::Server::Model::DescribePlayerSessions(describePlayerSessionRequest);

GetGameSessionId()서버 프로세스가 활성인 경우 현재 서버 프로세스에서 호스팅하고 있는 게임 세션의 ID를 가져옵니다.

구문

AwsStringOutcome GetGameSessionId()

버전261

Amazon GameLift 개발자 안내서Server API(C#) Reference

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 게임 세션 ID를 AwsStringOutcome 객체로 반환합니다. 실패하면 오류 메시지를 반환합니다.

var getGameSessionIdOutcome = GameLiftServerAPI.GetGameSessionId();

GetInstanceCertificate()

플릿 및 플릿의 인스턴스와 연결된 pem 인코딩된 TLS 인증서의 파일 위치를 검색합니다. 이 인증서는 인증서 구성을 GENERATED로 설정한 상태에서 새 플릿을 만들 때 생성됩니다. 이 인증서를 사용하여 게임 클라이언트와 보안 연결을 설정하고 클라이언트/서버 통신을 암호화합니다

구문

GetInstanceCertificateOutcome GetInstanceCertificate();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 인스턴스에 저장된 플릿의 TLS 인증서 파일 위치를 포함한GetInstanceCertificateOutcome 객체를 반환합니다 실패하면 오류 메시지를 반환합니다.

var getInstanceCertificateOutcome = GameLiftServerAPI.GetInstanceCertificate();

GetSdkVersion()

현재 서버 프로세스에 빌드된 SDK 버전 번호를 반환합니다.

구문

AwsStringOutcome GetSdkVersion()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 현재 SDK 버전을 AwsStringOutcome 객체로 반환합니다. 반환된 문자열에는 버전 번호만(예:"3.1.5") 포함되어 있습니다. 실패하면 오류 메시지를 반환합니다.

var getSdkVersionOutcome = GameLiftServerAPI.GetSdkVersion();

버전262

Amazon GameLift 개발자 안내서Server API(C#) Reference

GetTerminationTime()종료 시간을 사용할 수 있는 경우 서버 프로세스가 종료되도록 예약된 시간을 반환합니다. 서버 프로세스는Amazon GameLift 서비스에서 onProcessTerminate() 콜백을 수신한 후 이 작업을 수행합니다. 서버 프로세스는 (1) 상태가 좋지 않을 때, (2) 축소 이벤트 중 인스턴스가 종료될 때, (3) 인스턴스가 스팟 인스턴스중단 (p. 100)으로 인해 종료될 때 등의 이유로 인해 종료될 수 있습니다.

프로세스가 onProcessTerminate() 콜백을 수신할 때 반환되는 값은 예상 종료 시간(epoch 초)입니다.종료 시간을 사용할 수 없는 경우 반환되는 값은 -1이며 이는 서버 프로세스가 언제든지 종료될 수 있음을 나타냅니다. 프로세스에서 onProcessTerminate() 콜백을 수신하지 못할 때 반환되는 값은 항상 -1입니다.서버 프로세스 종료 (p. 44)에 대해 자세히 알아보십시오.

구문

AwsLongOutcome GetTerminationTime()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 현재 SDK 버전을 AwsLongOutcome 객체로 반환합니다. 값은 종료 시간(epoch 초) 또는 값 -1입니다. 실패하면 오류 메시지를 반환합니다.

var getTerminationTimeOutcome = GameLiftServerAPI.GetTerminationTime();

InitSDK()Amazon GameLift SDK를 초기화합니다. 이 메서드는 다른 Amazon GameLift 관련 초기화가 진행되기 전,시작 시 호출되어야 합니다.

구문

InitSDKOutcome InitSDK()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하는 경우, 서버 프로세스가 ProcessReady() (p. 264)을(를) 호출할 준비가 되었음을 나타내는InitSdkOutcome 객체를 반환합니다.

var initSDKOutcome = GameLiftServerAPI.InitSDK();

ProcessEnding()Amazon GameLift 서비스에 서버 프로세스를 중단할 준비가 되었음을 알립니다. 이 메서드는 종료 코드 0으로 종료해야 합니다. 0이 아닌 종료 코드를 사용하면 프로세스가 정상적으로 종료되지 않았다는 이벤트 메시지가 표시됩니다.

버전263

Amazon GameLift 개발자 안내서Server API(C#) Reference

구문

GenericOutcome ProcessEnding()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

var processEndingOutcome = GameLiftServerAPI.ProcessEnding();

ProcessReady()

Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. 이 메서드는InitSDK() (p. 263)을(를) 성공적으로 호출하고, 서버 프로세스가 게임 세션을 호스트하기 전에 수행해야 하는 설정 작업을 완료한 후에만 호출할 수 있습니다.

구문

GenericOutcome ProcessReady(ProcessParameters processParameters)

파라미터

processParameters

다음 서버 프로세스 관련 정보를 전달하는 ProcessParameters (p. 270) 객체입니다.• 게임 서버 코드에 구현되어 있는 콜백 메서드의 이름으로, 서버 프로세스와 통신할 수 있도록 Amazon

GameLift 서비스가 호출하는 메서드입니다.• 서버 프로세스가 수신하는 포트 번호입니다.• Amazon GameLift가 캡처 및 저장하도록 하려는 모든 게임 세션별 파일에 대한 경로입니다.

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예에서는 ProcessReady() (p. 264) 호출 및 위임 함수 구현을 모두 보여줍니다.

// Set parameters and call ProcessReadyvar processParams = new ProcessParameters( this.OnGameSession, this.OnProcessTerminate, this.OnHealthCheck, this.OnGameSessionUpdate, port, new LogParameters(new List<string>() // Examples of log and error files written by the game server {

버전264

Amazon GameLift 개발자 안내서Server API(C#) Reference

"C:\\game\\logs", "C:\\game\\error" }));

var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams);

// Implement callback functionsvoid OnGameSession(GameSession gameSession){ // game-specific tasks when starting a new game session, such as loading map // When ready to receive players var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession();}

void OnProcessTerminate(){ // game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup var ProcessEndingOutcome = GameLiftServerAPI.ProcessEnding(); GameLiftServerAPI.Destroy();}

bool OnHealthCheck(){ bool isHealthy; // complete health evaluation within 60 seconds and set health return isHealthy;}

RemovePlayerSession()

Amazon GameLift 서비스에 지정된 플레이어 세션 ID의 플레이어가 서버 프로세스로부터 연결이 해제되었음을 알립니다. 이에 대한 응답으로, Amazon GameLift가 플레이어 슬롯을 새 플레이어에 할당할 수 있는 사용 가능 상태로 변경합니다.

구문

GenericOutcome RemovePlayerSession(String playerSessionId)

파라미터

playerSessionId

새로운 플레이어 세션이 생성되었을 때 GameLift가 발행한 고유 ID입니다. 플레이어 세션 ID는 PlayerSession 객체에서 지정되며, 이 객체는 AWS SDK Amazon GameLift API 작업 StartGameSessionPlacement, CreateGameSession, DescribeGameSessionPlacement 또는 DescribePlayerSessions는 대한 클라이언트 호출에 응답하여 반환됩니다.

형식: 문자열

필수 여부: 아니요

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

Aws::GameLift::GenericOutcome disconnectOutcome =

버전265

Amazon GameLift 개발자 안내서Server API(C#) Reference

Aws::GameLift::Server::RemovePlayerSession(playerSessionId);

StartMatchBackfill()

FlexMatch를 통해 생성된 게임 세션에서 열린 슬롯에 참여할 새로운 플레이어를 찾는 요청을 보냅니다.AWS SDK 작업 StartMatchBackfill()을 참조하십시오. 이 작업을 사용하면 게임 세션을 호스팅하는 게임 서버프로세스에서 매치 채우기 요청을 시작할 수 있습니다. FlexMatch에서 FlexMatch를 사용하여 기존 게임 채우기 (p. 75) 채우기 기능에 대해 자세히 알아보십시오.

이 작업은 비동기식입니다. 새로운 플레이어가 성공적으로 매치되면 Amazon GameLift 서비스는 콜백 함수OnUpdateGameSession()을 사용하여 업데이트된 매치메이커 데이터를 전달합니다.

서버 프로세스는 한 번에 하나의 활성 매치 채우기 요청만 할 수 있습니다. 새 요청을 보내려면 먼저StopMatchBackfill() (p. 267)을 호출하여 원본 요청을 취소해야 합니다.

구문

StartMatchBackfillOutcome StartMatchBackfill (StartMatchBackfillRequest startBackfillRequest);

파라미터

StartMatchBackfillRequest

다음 정보를 전달하는 StartMatchBackfillRequest (p. 271) 객체입니다.• 백필(backfill) 요청에 할당할 티켓 ID. 이 정보를 선택 사항입니다. ID를 제공하지 않으면 Amazon

GameLift가 자동으로 ID를 생성합니다.• 요청을 보낼 매치메이커. 전체 구성 ARN이 필요합니다. 이 값은 게임 세션의 매치메이커 데이터에서

수집할 수 있습니다.• 백필(backfill) 중인 게임 세션의 ID.• 게임 세션의 현재 플레이어에 대해 사용 가능한 매치메이킹 데이터.

필수 항목 여부: 예

반환 값

매치 채우기 티켓 ID와 함께 StartMatchBackfillOutcome 객체를 반환하거나 오류 메시지를 포함한 결함이 있는 StartMatchBackfillOutcome 객체를 반환합니다.

// Build a backfill requestvar startBackfillRequest = new AWS.GameLift.Server.Model.StartMatchBackfillRequest(){ TicketId = "a ticket ID", //optional MatchmakingConfigurationArn = "the matchmaker configuration ARN", GameSessionId = GameLiftServerAPI.GetGameSessionId().Result, // gets ID for current game session //get player data for all currently connected players MatchmakerData matchmakerData = MatchmakerData.FromJson(gameSession.MatchmakerData); // gets matchmaker data for current players // get matchmakerData.Players // remove data for players who are no longer connected Players = ListOfPlayersRemainingInTheGame};

버전266

Amazon GameLift 개발자 안내서Server API(C#) Reference

// Send backfill requestvar startBackfillOutcome = GameLiftServerAPI.StartMatchBackfill(startBackfillRequest);

// Implement callback function for backfillvoid OnUpdateGameSession(GameSession myGameSession){ // game-specific tasks to prepare for the newly matched players and update matchmaker data as needed }

StopMatchBackfill()

StartMatchBackfill() (p. 266)을 통해 생성된 활성 매치 채우기 요청을 취소합니다. AWS SDK 작업StopMatchmaking()을 참조하십시오. FlexMatch에서 FlexMatch를 사용하여 기존 게임 채우기 (p. 75) 채우기기능에 대해 자세히 알아보십시오.

구문

GenericOutcome StopMatchBackfill (StopMatchBackfillRequest stopBackfillRequest);

파라미터

StopMatchBackfillRequest

취소할 매치메이킹 티켓을 식별하는 StopMatchBackfillRequest (p. 272) 객체입니다.• 취소 중인 채우기 요청에 할당한 티켓 ID• 채우기 요청을 보낸 매치메이커• 채우기 요청과 연결된 게임 세션

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

// Set backfill stop request parameters

var stopBackfillRequest = new AWS.GameLift.Server.Model.StopMatchBackfillRequest(){ TicketId = "a ticket ID", //optional, if not provided one is autogenerated MatchmakingConfigurationArn = "the matchmaker configuration ARN", //from the game session matchmaker data GameSessionId = GameLiftServerAPI.GetGameSessionId().Result //gets the ID for the current game session};

var stopBackfillOutcome = GameLiftServerAPI.StopMatchBackfillRequest(stopBackfillRequest);

TerminateGameSession()

Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 종료했음을 알립니다. (현재 각 서버 프로세스는 한 번에 한 게임 세션만 호스팅하므로 세션을 지정할 필요가 없습니다.) 이 작업은 게임 세션 종료 프로세스 마지막에 호출되어야 합니다. 이 작업을 호출한 후 서버 프로세스는 가용성을 알려주는ProcessReady() (p. 264)를 호출할 수 있습니다. ProcessEnding() (p. 263)을 호출하여 서버 프로세스를종료하고 인스턴스를 종료할 수 있습니다.

버전267

Amazon GameLift 개발자 안내서Server API(C#) Reference

구문

GenericOutcome TerminateGameSession()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예는 게임 세션을 마치는 서버 프로세스를 보여줍니다.

// game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup

var terminateGameSessionOutcome = GameLiftServerAPI.TerminateGameSession();var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams);

UpdatePlayerSessionCreationPolicy()

현재 게임 세션의 새 플레이어 세션 수락 가능성을 업데이트합니다. 모든 새 플레이어 세션을 수락하거나 거부하도록 게임 세션을 설정할 수 있습니다. (Amazon GameLift Service API Reference의UpdateGameSession() 작업 참조).

구문

GenericOutcome UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy playerSessionPolicy)

파라미터

newPlayerSessionPolicy

게임 세션이 새 플레이어를 수락하는지 여부를 나타내는 문자열 값입니다.

유형: PlayerSessionCreationPolicy 열거형. 유효한 값으로는 다음이 포함됩니다.• ACCEPT_ALL – 모든 새 플레이어 세션을 수락합니다.• DENY_ALL – 모든 새 플레이어 세션을 거부합니다.

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

이 예는 모든 플레이어를 수락하도록 현재 게임 세션의 참여 정책을 설정합니다.

var updatePlayerSessionCreationPolicyOutcomex = GameLiftServerAPI.UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy.ACCEPT_ALL);

버전268

Amazon GameLift 개발자 안내서Server API(C#) Reference

Amazon GameLift Server API (C#) Reference: 데이터 형식이 Amazon GameLift C# Server API Reference는 Amazon GameLift를 통한 멀티플레이어 게임 개발을 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerAPI.cs, LogParameters.cs 및 ProcessParameters.cs에 정의되어 있습니다.

• Actions (p. 259)• 데이터 형식

LogParameters이 데이터 형식은 게임 세션 도중 생성된 파일 가운데 게임 세션 종료 시 Amazon GameLift가 업로드 및 저장하도록 하려는 파일을 식별합니다. 이 정보는 ProcessReady() (p. 264) 호출을 통해 Amazon GameLift 서비스에 전달됩니다.

목차

logPaths

Amazon GameLift가 향후 사용을 위해 저장하도록 하려는 게임 서버 로그 파일의 디렉터리 경로의목록입니다. 이들 파일은 각 게임 세션 도중 서버 프로세스에 의해 생성됩니다. 파일 경로 및 이름은게임 서버에서 정의되고 루트 게임 빌드 디렉터리에 저장됩니다. 예를 들어, 게임 빌드가 MyGame\sessionlogs\와 같은 경로에 게임 세션 로그를 저장할 경우 로그 경로는 c:\game\MyGame\sessionLogs(Windows 인스턴스) 또는 /local/game/MyGame/sessionLogs(Linux 인스턴스)가됩니다.

유형: List<String>

필수 항목 여부: 아니요

DescribePlayerSessionsRequest이 데이터 형식은 검색할 플레이어 세션을 지정하는 데 사용됩니다. 이 형식은 다음과 같이 여러 방식으로 사용될 수 있습니다. (1) 특정 플레이어 세션을 요청하는 PlayerSessionId를 제공, (2) 지정한 게임 세션에서 모든 플레이어 세션을 요청하는 GameSessionId를 제공 또는 (3) 지정한 플레이어의 모든 플레이어 세션을 요청하는 PlayerId를 제공. 플레이어 세션이 대량일 경우 페이지 매김 파라미터를 사용하여 결과를 순차 페이지로 검색합니다.

목차

GameSessionId

고유한 게임 세션 식별자입니다. 지정한 게임 세션의 모든 플레이어 세션을 요청하려면 이 파라미터를 사용합니다. 게임 세션 ID 형식은 다음과 같습니다.arn:aws:gamelift:<region>::gamesession/fleet-<fleet ID>/<ID string>. <ID string>값은 사용자 지정 ID 문자열(게임 세션을 만들 때 지정한 경우) 또는 생성 문자열입니다.

유형: 문자열

필수 항목 여부: 아니요한도

반환할 최대 결과 수입니다. 결과를 순차적인 일련의 페이지로 가져오려면 이 파라미터를 NextToken과함께 사용합니다. 플레이어 세션 ID가 지정된 경우 이 파라미터가 무시됩니다.

버전269

Amazon GameLift 개발자 안내서Server API(C#) Reference

유형: 정수

필수 항목 여부: 아니요NextToken

결과의 다음 순차 페이지의 시작을 나타내는 토큰입니다. 반환된 토큰을 이 작업에 대한 이전 호출과 함께 사용합니다. 결과 집합의 시작을 지정하려면 값을 지정하지 마십시오. 플레이어 세션 ID가 지정된 경우 이 파라미터가 무시됩니다.

유형: 문자열

필수 항목 여부: 아니요PlayerId

사용자의 고유 식별자입니다. 플레이어 ID는 개발자에 의해 정의됩니다. 플레이어 ID 생성 (p. 50) 단원을 참조하십시오.

유형: 문자열

필수 항목 여부: 아니요PlayerSessionId

플레이어 세션의 고유 식별자입니다.

유형: 문자열

필수 항목 여부: 아니요PlayerSessionStatusFilter

결과를 필터링하는 기준이 되는 플레이어 세션 상태입니다. 다음과 같은 플레이어 세션 상태가 가능합니다.• RESERVED - 플레이어 세션 요청이 수신되었지만, 플레이어가 서버 프로세스에 연결되지 않았거나

확인되지 않았습니다.• ACTIVE - 플레이어가 서버 프로세스에 의해 확인되고 현재 연결되어 있습니다.• COMPLETED - 플레이어 연결이 끊어졌습니다.• TIMEDOUT - 플레이어 세션 요청이 수신되었지만 플레이어가 제한 시간(60초) 이내에 연결하지 않았

거나 확인되지 않았습니다.

유형: 문자열

필수 항목 여부: 아니요

ProcessParameters

이 데이터 유형에는 ProcessReady() (p. 264) 호출을 통해 Amazon GameLift 서비스로 보낸 파라미터 집합이 포함됩니다.

목차

port

서버 프로세스가 새 플레이어 연결을 수신 대기하는 포트 번호입니다. 이 값은 이 게임 서버 빌드를 전개하는 플릿에 대해 구성된 포트 범위에 속해야 합니다. 이 포트 번호는 게임 세션 및 플레이어 세션 객체에 포함되며, 게임 세션이 서버 프로세스에 연결할 때 이 포트 번호를 사용합니다.

유형: 정수

버전270

Amazon GameLift 개발자 안내서Server API(C#) Reference

필수 항목 여부: 예logParameters

게임 세션 로그 파일의 디렉터리 경로 목록을 포함하는 객체입니다.

Type: Aws::GameLift::Server::LogParameters (p. 269)

필수 항목 여부: 예onStartGameSession

콜백 함수의 이름입니다. Amazon GameLift 서비스가 새 게임 세션을 활성화하기 위해 호출하는 클라이언트 요청 CreateGameSession에 대한 응답으로 이 함수를 Amazon GameLift 호출합니다. 콜백 함수는GameSession 객체를 취합니다(Amazon GameLiftService API Reference에서 정의함).

Type: void OnStartGameSessionDelegate(GameSession gameSession)

필수 항목 여부: 예onProcessTerminate

Amazon GameLift 서비스가 서버 프로세스를 강제로 종료하기 위해 호출하는 콜백 함수의 이름입니다. 이 함수를 호출한 후 Amazon GameLift는 서버 프로세스가 종료될 때까지 5분을 기다렸다가ProcessEnding() (p. 263) 호출로 응답한 후 서버 프로세스를 종료합니다.

Type: void OnProcessTerminateDelegate()

필수 항목 여부: 예onHealthCheck

Amazon GameLift 서비스가 서버 프로세스에 상태 보고서를 요청하기 위해 호출하는 콜백 함수의 이름입니다. Amazon GameLift는 60초 간격으로 이 기능을 호출합니다. 이 함수를 호출한 후 AmazonGameLift는 60초 동안 응답을 기다립니다. 아무 것도 수신되지 않으면 프로세스를 이상 있음으로 기록합니다.

Type: bool OnHealthCheckDelegate()

필수 항목 여부: 예onUpdateGameSession

Amazon GameLift 서비스가 업데이트된 게임 세션 객체를 제공하기 위해 호출하는 콜백 함수의 이름입니다. 매치 채우기 요청이 처리되면 Amazon GameLift에서 이 함수를 호출합니다. GameSession 객체,상태 업데이트(updateReason) 및 매치 채우기 티켓 ID를 전달합니다.

Type: void OnUpdateGameSessionDelegate ( UpdateGameSessionupdateGameSession )

필수 항목 여부: 아니요

StartMatchBackfillRequest

이 데이터 형식은 매치메이킹 채우기 요청을 보내는 데 사용됩니다. 해당 정보는StartMatchBackfill() (p. 266) 호출을 통해 Amazon GameLift 서비스에 전달됩니다.

목차

GameSessionArn

고유한 게임 세션 식별자입니다. GetGameSessionId() (p. 261) API 작업은 ARN 형식의 식별자를 반환합니다.

버전271

Amazon GameLift 개발자 안내서Server API(C#) Reference

유형: 문자열

필수 항목 여부: 예MatchmakingConfigurationArn

매치메이커가 이 요청에 사용할 ARN 형식의 고유 식별자입니다. 원본 게임 세션을 만드는 데 사용된 매치메이커를 찾으려면 게임 세션 객체에서 매치메이커 데이터 속성을 확인합니다. 매치메이커 데이터를사용하는 작업 (p. 74)에서 매치메이커 데이터에 대해 자세히 알아보십시오.

유형: 문자열

필수 항목 여부: 예플레이어

현재 게임 세션에 있는 모든 플레이어를 나타내는 데이터 세트입니다. 매치메이커는 이 정보를 사용하여현재 플레이어와 적절하게 일치하는 새로운 플레이어를 검색합니다. 플레이어 객체 형식에 대한 자세한내용은 Amazon GameLift API Reference 가이드를 참조하십시오. 플레이어 속성, ID 및 팀 배정을 찾으려면 매치메이커 데이터 속성에서 게임 세션 객체를 확인합니다. 매치메이커에서 지연 시간을 사용하는경우 현재 리전에 대한 업데이트 지연 시간을 수집하여 각 플레이어의 데이터에 포함합니다.

유형: 플레이어[ ]

필수 항목 여부: 예TicketId

매치메이킹 또는 매치 채우기 요청 티켓의 고유 식별자입니다. 여기에 값이 제공되지 않으면 AmazonGameLift는 UUID 형식으로 값을 생성합니다. 이 식별자를 사용하여 매치 채우기 티켓 상태를 추적하거나 필요한 경우 요청을 취소합니다.

유형: 문자열

필수 항목 여부: 아니요

StopMatchBackfillRequest

이 데이터 형식은 매치메이킹 채우기 요청을 취소하는 데 사용됩니다. 해당 정보는StopMatchBackfill() (p. 267) 호출을 통해 Amazon GameLift 서비스에 전달됩니다.

목차

GameSessionArn

취소 중인 요청과 연결된 고유한 게임 세션 식별자입니다.

유형: 문자열

필수 항목 여부: 예MatchmakingConfigurationArn

이 요청을 보낸 매치메이커의 고유 식별자입니다.

유형: 문자열

필수 항목 여부: 예TicketId

취소할 채우기 요청 티켓의 고유 식별자입니다.

버전272

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

유형: 문자열

필수 항목 여부: 예

Amazon GameLiftUnreal Engine용 Server APIReference이 Amazon GameLift Server API Reference는 Amazon GameLift를 통한 Unreal Engine 게임 프로젝트를 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerSDK.h 및 GameLiftServerSDKModels.h에 정의되어 있습니다.

Unreal Engine 플러그인을 설치하려면 코드 샘플 Unreal Engine 게임 서버 프로젝트에 Amazon GameLift 추가 (p. 36) 단원을 참조하십시오.

• Actions (p. 273)• 데이터 형식 (p. 278)

Amazon GameLiftUnreal Engine용 Server API Reference: 작업이 Amazon GameLift Server API Reference는 Amazon GameLift를 통한 Unreal Engine 게임 프로젝트를 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerSDK.h 및 GameLiftServerSDKModels.h에 정의되어 있습니다.

Unreal Engine 플러그인을 설치하려면 코드 샘플 Unreal Engine 게임 서버 프로젝트에 Amazon GameLift 추가 (p. 36) 단원을 참조하십시오.

• Actions• 데이터 형식 (p. 278)

AcceptPlayerSession()지정된 플레이어 세션 ID를 가진 플레이어가 서버 프로세스에 연결되어 있고 유효성 검사가 필요함을Amazon GameLift서비스에 알립니다. Amazon GameLift 플레이어 세션 ID가 게임 세션에서 플레이어 슬롯을 예약했는지 여부—를 확인합니다. 검증되면 Amazon GameLift가 플레이어 슬롯의 상태를 RESERVED에서 ACTIVE로 변경합니다.

구문

FGameLiftGenericOutcome AcceptPlayerSession(const FString& playerSessionId)

파라미터

playerSessionId

AWS SDK Amazon GameLift API 작업 CreatePlayerSession 호출에 대한 응답으로 Amazon GameLift서비스가 발급한 고유 ID입니다. 게임 클라이언트가 서버 프로세스에 연결할 때 이 ID를 참조합니다.

형식: FString

필수 여부: 아니요

버전273

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

ActivateGameSession()

Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 활성화했으며 이제 플레이어 연결을 수신할 준비가 되었음을 알립니다. 이 작업은 모든 게임 세션 초기화가 완료된 후 onStartGameSession() 콜백 함수의 일부로 호출되어야 합니다.

구문

FGameLiftGenericOutcome ActivateGameSession()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

GetGameSessionId()

서버 프로세스가 활성인 경우 현재 서버 프로세스에서 호스팅하고 있는 게임 세션의 ID를 가져옵니다.

구문

FGameLiftStringOutcome GetGameSessionId()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 게임 세션 ID를 FGameLiftStringOutcome 객체로 반환합니다. 실패하면 오류 메시지를 반환합니다.

GetSdkVersion()

현재 서버 프로세스에 빌드된 SDK 버전 번호를 반환합니다.

구문

FGameLiftStringOutcome GetSdkVersion();

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공하면 현재 SDK 버전을 FGameLiftStringOutcome 객체로 반환합니다. 반환된 문자열에는 버전 번호만(예: "3.1.5") 포함되어 있습니다. 실패하면 오류 메시지를 반환합니다.

버전274

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

Aws::GameLift::AwsStringOutcome SdkVersionOutcome = Aws::GameLift::Server::GetSdkVersion();

InitSDK()

Amazon GameLift SDK를 초기화합니다. 이 메서드는 다른 Amazon GameLift 관련 초기화가 진행되기 전,시작 시 호출되어야 합니다.

구문

FGameLiftGenericOutcome InitSDK()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

ProcessEnding()

Amazon GameLift 서비스에 서버 프로세스를 중단할 준비가 되었음을 알립니다. 이 메서드는 모든 활성 게임세션의 종료 등, 다른 모든 정리 작업 이후에 호출되어야 합니다. 이 메서드는 종료 코드 0으로 종료해야 합니다. 0이 아닌 종료 코드를 사용하면 프로세스가 정상적으로 종료되지 않았다는 이벤트 메시지가 표시됩니다.

구문

FGameLiftGenericOutcome ProcessEnding()

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

ProcessReady()

Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 호스팅할 준비가 되었음을 알립니다. 이 메서드는InitSDK() (p. 275)을(를) 성공적으로 호출하고, 서버 프로세스가 게임 세션을 호스트하기 전에 수행해야 하는 설정 작업을 완료한 후에만 호출할 수 있습니다.

구문

FGameLiftGenericOutcome ProcessReady(FProcessParameters &processParameters)

파라미터

FProcessParameters

다음 서버 프로세스 관련 정보를 전달하는 FProcessParameters (p. 278) 객체입니다.

버전275

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

• 게임 서버 코드에 구현되어 있는 콜백 메서드의 이름으로, 서버 프로세스와 통신할 수 있도록 AmazonGameLift 서비스가 호출하는 메서드입니다.

• 서버 프로세스가 수신하는 포트 번호입니다.• Amazon GameLift가 캡처 및 저장하도록 하려는 모든 게임 세션별 파일에 대한 경로입니다.

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

Unreal Engine 플러그인 사용 (p. 38) 단원에 있는 샘플 코드를 참조하십시오.

RemovePlayerSession()

Amazon GameLift 서비스에 지정된 플레이어 세션 ID의 플레이어가 서버 프로세스로부터 연결이 해제되었음을 알립니다. 이에 대한 응답으로, Amazon GameLift가 플레이어 슬롯을 새 플레이어에 할당할 수 있는 사용 가능 상태로 변경합니다.

구문

FGameLiftGenericOutcome RemovePlayerSession(const FString& playerSessionId)

파라미터

playerSessionId

AWS SDK Amazon GameLift API 작업 CreatePlayerSession 호출에 대한 응답으로 Amazon GameLift서비스가 발급한 고유 ID입니다. 게임 클라이언트가 서버 프로세스에 연결할 때 이 ID를 참조합니다.

형식: FString

필수 여부: 아니요

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

StartMatchBackfill()

FlexMatch를 통해 생성된 게임 세션에서 열린 슬롯에 참여할 새로운 플레이어를 찾는 요청을 보냅니다.AWS SDK 작업 StartMatchBackfill()을 참조하십시오. 이 작업을 사용하면 게임 세션을 호스팅하는 게임 서버프로세스에서 매치 채우기 요청을 시작할 수 있습니다. FlexMatch에서 FlexMatch를 사용하여 기존 게임 채우기 (p. 75) 채우기 기능에 대해 자세히 알아보십시오.

서버 프로세스는 한 번에 하나의 활성 매치 채우기 요청만 할 수 있습니다. 새 요청을 보내려면 먼저StopMatchBackfill() (p. 277)을 호출하여 원본 요청을 취소해야 합니다.

구문

FGameLiftStringOutcome StartMatchBackfill (FStartMatchBackfillRequest &startBackfillRequest);

버전276

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

파라미터

FStartMatchBackfillRequest

다음 정보를 전달하는 FStartMatchBackfillRequest (p. 279) 객체입니다.• 백필(backfill) 요청에 할당할 티켓 ID. 이 정보를 선택 사항입니다. ID를 제공하지 않으면 Amazon

GameLift가 자동으로 ID를 생성합니다.• 요청을 보낼 매치메이커. 전체 구성 ARN이 필요합니다. 이 값은 게임 세션의 매치메이커 데이터에서

수집할 수 있습니다.• 백필(backfill) 중인 게임 세션의 ID.• 게임 세션의 현재 플레이어에 대해 사용 가능한 매치메이킹 데이터.

필수 항목 여부: 예

반환 값

성공하면 매치 채우기 티켓을 FGameLiftStringOutcome 객체로 반환합니다. 실패하면 오류 메시지를 반환합니다. 티켓 상태는 AWS SDK 작업 DescribeMatchmaking()을 사용하여 추적할 수 있습니다.

StopMatchBackfill()StartMatchBackfill() (p. 276)을 통해 생성된 활성 매치 채우기 요청을 취소합니다. AWS SDK 작업StopMatchmaking()을 참조하십시오. FlexMatch에서 FlexMatch를 사용하여 기존 게임 채우기 (p. 75) 채우기기능에 대해 자세히 알아보십시오.

구문

FGameLiftGenericOutcome StopMatchBackfill (FStopMatchBackfillRequest &stopBackfillRequest);

파라미터

StopMatchBackfillRequest

취소할 매치메이킹 티켓을 식별하는 FStopMatchBackfillRequest (p. 280) 객체입니다.• 취소 중인 채우기 요청에 할당한 티켓 ID• 채우기 요청을 보낸 매치메이커• 채우기 요청과 연결된 게임 세션

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

TerminateGameSession()Amazon GameLift 서비스에 서버 프로세스가 게임 세션을 종료했음을 알립니다. (현재 각 서버 프로세스는 한 번에 한 게임 세션만 호스팅하므로 세션을 지정할 필요가 없습니다.) 이 작업은 게임 세션 종료 프로세스 마지막에 호출되어야 합니다. 이 작업을 호출한 후 서버 프로세스는 가용성을 알려주는ProcessReady() (p. 275)를 호출할 수 있습니다. ProcessEnding() (p. 275)을 호출하여 서버 프로세스를종료하고 인스턴스를 종료할 수 있습니다.

구문

FGameLiftGenericOutcome TerminateGameSession()

버전277

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

파라미터

이 작업에는 파라미터가 없습니다.

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

UpdatePlayerSessionCreationPolicy()

현재 게임 세션의 새 플레이어 세션 수락 가능성을 업데이트합니다. 모든 새 플레이어 세션을 수락하거나 거부하도록 게임 세션을 설정할 수 있습니다. (Amazon GameLift Service API Reference의UpdateGameSession() 작업 참조).

구문

FGameLiftGenericOutcome UpdatePlayerSessionCreationPolicy(EPlayerSessionCreationPolicy policy)

파라미터

Policy

게임 세션이 새 플레이어를 수락하는지 여부를 나타내는 값입니다.

유형: EPlayerSessionCreationPolicy 열거형입니다. 유효한 값으로는 다음이 포함됩니다.• ACCEPT_ALL – 모든 새 플레이어 세션을 수락합니다.• DENY_ALL – 모든 새 플레이어 세션을 거부합니다.

필수 항목 여부: 예

반환 값

성공 또는 오류 메시지를 포함한 실패로 구성되는 일반 결과를 반환합니다.

Amazon GameLiftUnreal Engine용 Server API Reference: 데이터형식이 Amazon GameLift Server API Reference는 Amazon GameLift를 통한 Unreal Engine 게임 프로젝트를 준비하는 데 유용합니다. 통합 프로세스에 대한 자세한 내용은 게임 서버에 Amazon GameLift 추가 (p. 42) 단원을 참조하십시오.

이 API는 GameLiftServerSDK.h 및 GameLiftServerSDKModels.h에 정의되어 있습니다.

Unreal Engine 플러그인을 설치하려면 코드 샘플 Unreal Engine 게임 서버 프로젝트에 Amazon GameLift 추가 (p. 36) 단원을 참조하십시오.

• Actions (p. 273)• 데이터 형식

FProcessParameters

이 데이터 유형에는 ProcessReady() (p. 275) 호출을 통해 Amazon GameLift 서비스로 보낸 파라미터 집합이 포함됩니다.

버전278

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

목차

port

서버 프로세스가 새 플레이어 연결을 수신 대기하는 포트 번호입니다. 이 값은 이 게임 서버 빌드를 전개하는 플릿에 대해 구성된 포트 범위에 속해야 합니다. 이 포트 번호는 게임 세션 및 플레이어 세션 객체에 포함되며, 게임 세션이 서버 프로세스에 연결할 때 이 포트 번호를 사용합니다.

유형: 정수

필수 항목 여부: 예logParameters

게임 세션 로그 파일의 디렉터리 경로 목록을 포함하는 객체입니다.

유형: TArray <FString>

필수 항목 여부: 아니요onStartGameSession

콜백 함수의 이름입니다. Amazon GameLift 서비스가 새 게임 세션을 활성화하기 위해 호출하는 클라이언트 요청 CreateGameSession에 대한 응답으로 이 함수를 Amazon GameLift 호출합니다. 콜백 함수는GameSession 객체를 취합니다(Amazon GameLiftService API Reference에서 정의함).

형식: FOnStartGameSession

필수 항목 여부: 예onProcessTerminate

Amazon GameLift 서비스가 서버 프로세스를 강제로 종료하기 위해 호출하는 콜백 함수의 이름입니다. 이 함수를 호출한 후 Amazon GameLift는 서버 프로세스가 종료될 때까지 5분을 기다렸다가ProcessEnding() (p. 275) 호출로 응답한 후 서버 프로세스를 종료합니다.

형식: FSimpleDelegate

필수 항목 여부: 아니요onHealthCheck

Amazon GameLift 서비스가 서버 프로세스에 상태 보고서를 요청하기 위해 호출하는 콜백 함수의 이름입니다. Amazon GameLift는 60초 간격으로 이 기능을 호출합니다. 이 함수를 호출한 후 AmazonGameLift는 60초 동안 응답을 기다립니다. 아무 것도 수신되지 않으면 프로세스를 이상 있음으로 기록합니다.

형식: FOnHealthCheck

필수 항목 여부: 아니요

FStartMatchBackfillRequest

이 데이터 형식은 매치메이킹 채우기 요청을 보내는 데 사용됩니다. 해당 정보는StartMatchBackfill() (p. 276) 호출을 통해 Amazon GameLift 서비스에 전달됩니다.

목차

GameSessionArn

고유한 게임 세션 식별자입니다. GetGameSessionId() (p. 274) API 작업은 ARN 형식의 식별자를 반환합니다.

버전279

Amazon GameLift 개발자 안내서Server API(Unreal Engine) Reference

형식: FString

필수 항목 여부: 예MatchmakingConfigurationArn

매치메이커가 이 요청에 사용할 ARN 형식의 고유 식별자입니다. 원본 게임 세션을 만드는 데 사용된 매치메이커를 찾으려면 게임 세션 객체에서 매치메이커 데이터 속성을 확인합니다. 매치메이커 데이터를사용하는 작업 (p. 74)에서 매치메이커 데이터에 대해 자세히 알아보십시오.

형식: FString

필수 항목 여부: 예플레이어

현재 게임 세션에 있는 모든 플레이어를 나타내는 데이터 세트입니다. 매치메이커는 이 정보를 사용하여현재 플레이어와 적절하게 일치하는 새로운 플레이어를 검색합니다. 플레이어 객체 형식에 대한 자세한내용은 Amazon GameLift API Reference 가이드를 참조하십시오. 플레이어 속성, ID 및 팀 배정을 찾으려면 매치메이커 데이터 속성에서 게임 세션 객체를 확인합니다. 매치메이커에서 지연 시간을 사용하는경우 현재 리전에 대한 업데이트 지연 시간을 수집하여 각 플레이어의 데이터에 포함합니다.

유형: TArray<FPlayer>

필수 항목 여부: 예TicketId

매치메이킹 또는 매치 채우기 요청 티켓의 고유 식별자입니다. 여기에 값이 제공되지 않으면 AmazonGameLift는 UUID 형식으로 값을 생성합니다. 이 식별자를 사용하여 매치 채우기 티켓 상태를 추적하거나 필요한 경우 요청을 취소합니다.

형식: FString

필수 항목 여부: 아니요

FStopMatchBackfillRequest이 데이터 형식은 매치메이킹 채우기 요청을 취소하는 데 사용됩니다. 해당 정보는StopMatchBackfill() (p. 277) 호출을 통해 Amazon GameLift 서비스에 전달됩니다.

목차

GameSessionArn

취소 중인 요청과 연결된 고유한 게임 세션 식별자입니다.

형식: FString

필수 항목 여부: 예MatchmakingConfigurationArn

이 요청을 보낸 매치메이커의 고유 식별자입니다.

형식: FString

필수 항목 여부: 예TicketId

취소할 채우기 요청 티켓의 고유 식별자입니다.

형식: FString

버전280

Amazon GameLift 개발자 안내서FlexMatch 참조

필수 항목 여부: 예

Amazon GameLift FlexMatch 참조Amazon GameLift FlexMatch에 대한 참조 설명서를 참조하십시오.

주제• FlexMatch 규칙 세트 스키마 (p. 281)• FlexMatch 규칙 언어 (p. 287)• FlexMatch 매치메이킹 이벤트 (p. 291)

FlexMatch 규칙 세트 스키마이 주제에서는 스몰 매치 규칙 세트 및 라지 매치 규칙 세트에 대한 표준 스키마를 설명합니다.

FlexMatch 규칙 세트에 대한 규칙을 작성할 때 다음 속성 표현식 구문을 사용합니다.

FlexMatch 규칙 생성에 대해 자세히 알아보기

• FlexMatch 규칙 세트 빌드 (p. 136)

• 매치메이킹 규칙 세트 생성 (p. 141)• FlexMatch 규칙 세트 예제 (p. 143)규칙 유형FlexMatch에서 지원되는 규칙 유형은 다음과 같습니다. 각 규칙 시간에는 여기에 설명되어 있는속성 세트가 있습니다.

거리 규칙(distance)

거리 규칙은 스킬 레벨 간의 거리와 같이 두 숫자 값 간의 차이를 측정합니다. 예를 들어, 거리 규칙을 통해 모든 플레이어들이 서로 두 레벨 차이 내에 있어야 한다고 정할 수 있습니다.

거리 규칙 속성• measurements – 거리를 측정하기 위한 플레이어 속성 값으로 반드시 숫자 값이어야 합

니다.• referenceValue – 가능한 매치에 대한 거리를 측정하는 숫자 값입니다.• minDistance/maxDistance – 매치 성공을 위해 허용되는 최대 또는 최소 거리 값입니

다.• partyAggregation – 복수 플레이어(파티) 요청을 처리하는 방법입니다. 유효한 옵션은

요청 플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다.기본값은 avg.

비교 규칙(comparison)

비교 규칙은 또 다른 값과 플레이어 속성 값을 비교합니다. 다음과 같은 두 가지 유형의 비교 규칙이 있습니다. 첫 번째 유형은 참조 값과 속성 값을 비교합니다. 참조 값과 유효한 비교 작업을 지정합니다. 예를 들어, 매치된 플레이어들은 반드시 스킬 레벨이 24 이상이어야한다고 규칙에서 정할 수 있습니다. 두 번째 유형은 팀 또는 매치의 모든 플레이어들을 대상으로 속성 값을 비교합니다. 이 유형은 참조 값을 생략하고 같음(equals) 또는 같지 않음(not-equals)으로 지정합니다(모든 플레이어가 동일한 속성 값을 갖거나 어떤 플레이어도 동일한속성 값을 갖지 않도록 지정). 예를 들어, 모든 플레이어들은 반드시 동일한 게임 맵을 선택해야 한다고 규칙에서 정할 수 있습니다.

버전281

Amazon GameLift 개발자 안내서규칙 세트 스키마

비교 규칙 속성• measurements – 비교할 플레이어 속성 값입니다.• referenceValue – 가능한 매치에 대한 측정치를 평가하는 값입니다.• operation – 측정치를 평가하는 방법입니다. 유효한 연산에는 <, <=, =, !=, >,>=이 포함됩니다.

• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은요청 플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다.기본값은 avg.

수집 규칙(collection)

수집 규칙은 플레이어 속성 값 모음을 평가합니다. 속성 모음에는 여러 플레이어에 대한 속성 값들, 한 플레이어의 속성 값(문자열 목록), 또는 둘 모두가 포함될 수 있습니다. 예를 들어수집 규칙은 팀의 플레이어들이 선택한 캐릭터 모음을 살펴보고 특정 캐릭터가 하나 이상 포함되도록 정할 수 있습니다.

수집 규칙 속성• measurements – 평가할 플레이어 속성 값의 모음입니다. 속성 값은 반드시 문자열 목록

이어야 합니다.• referenceValue – 가능한 매치에 대한 측정치를 평가하기 위한 값 또는 값 모음입니다.• operation – 측정치 모음을 평가하는 방법입니다. 유효한 작업에는 다음이 포함됩니다.

• intersection은 모든 플레이어의 속성 모음에서 공통인 값의 수를 측정합니다. 예제4: 최선의 매치 검색을 위한 명시적 정렬 사용 (p. 148)의 MapOverlap 규칙을 참조하십시오.

• contains는 특정 참조 값을 포함하는 플레이어 속성 모음의 수를 측정합니다. 예제 3:팀 레벨 요구 사항 및 지연 시간 제한 설정 (p. 146)의 OverallMedicLimit 규칙을 참조하십시오.

• reference_intersection_count는 플레이어 속성 모음과 참조 값 모음 간의 교집합을 측정합니다. 측정 값의 각 플레이어 속성 모음(문자열 목록)은 참조 모음을 기준으로 개별적으로 평가됩니다. 이 작업은 서로 다른 플레이어 속성들을 평가하는 데 사용할수 있습니다. 예제 5: 복수 플레이어 속성 간의 교집합 찾기 (p. 150)의 OpponentMatch규칙을 참조하십시오.

• minCount/maxCount – 매치 성공을 위해 허용되는 최대 또는 최소 값입니다.• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은

요청 플레이어들에 대한 값의 union 또는 intersection을 사용하는 것입니다. 기본값은 union.

지연 규칙 (latency)

지연 시간 규칙은 수락 가능한 매치에 대한 플레이어 지연 시간 설정을 평가합니다. 예를 들어, 매치된 모든 플레이어들의 리전 지연 시간이 반드시 최대 한도 이내여야 한다고 규칙으로 정할 수 있습니다. 현재는 이것이 규칙 세트에서 라지 매치에 대해 사용할 수 있는 유일한규칙 유형이며 maxLatency 설정이 유일하게 사용 가능한 옵션입니다.

지연 시간 규칙 속성• maxLatency – 리전에 대한 최대 허용 지연 값입니다. 각 플레이어에 대해 이 지연 시간을

초과하는 리전은 모두 무시합니다.• maxDistance – 각 플레이어의 지연 시간과 거리 참조 값 간의 최대 차이입니다.• distanceReference – maxDistance와 함께 사용합니다. 성공적인 매치에 대한 거리

를 측정하는 숫자 값입니다. 지연 시간 값은 여러 사용자의 지연 시간 값을 집계한 것입니다. 유효한 옵션은 최소(min) 또는 평균(avg) 플레이어 지연 시간 값입니다 (속성 표현식단원 참조).

• partyAggregation – 복수 플레이어(파티) 매치 요청을 정렬하는 방법입니다. 유효한옵션은 요청 플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다. 기본값은 avg.

버전282

Amazon GameLift 개발자 안내서규칙 세트 스키마

거리 정렬 규칙(distanceSort)

거리 정렬은 매치메이커가 플레이어 속성을 바탕으로 매치메이킹 요청을 사전에 정렬하도록 지시하는 명시적 정렬 옵션입니다. 거리 정렬 규칙은 앵커 요청으로부터의 거리를 토대로매치메이킹 요청을 평가합니다.

거리 정렬 규칙 속성• sortDirection – 매치메이킹 요청을 정렬하는 방향입니다. 유효한 옵션은 ascending

또는 descending입니다.• sortAttribute – 플레이어 정렬 기준이 되는 플레이어 속성입니다.• mapKey – 플레이어 속성이 맵인 경우 이를 평가하는 방법입니다. 유효한 옵션은 다음과

같습니다.• minValue: 앵커 플레이어에 대해 값이 가장 낮은 키를 찾습니다.• maxValue: 앵커 플레이어에 대해 값이 가장 높은 키를 찾습니다.

• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은요청 플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다.기본값은 avg.

절대 정렬 규칙(absoluteSort)

절대 정렬은 매치메이커가 플레이어 속성을 바탕으로 매치메이킹 요청을 사전에 정렬하도록 지시하는 명시적 정렬 옵션입니다. 절대 정렬은 플레이어 속성이 앵커 요청의 속성과 일치하는지 여부를 바탕으로 매치메이킹 요청을 평가합니다.

절대 정렬 규칙 속성• sortDirection – 매치메이킹 요청을 정렬하는 방향입니다. 유효한 옵션은 ascending

또는 descending입니다.• sortAttribute – 플레이어 정렬 기준이 되는 플레이어 속성입니다.• mapKey – 플레이어 속성이 맵인 경우 이를 평가하는 방법입니다. 유효한 옵션은 다음과

같습니다.• minValue: 앵커 플레이어에 대해 값이 가장 낮은 키를 찾습니다.• maxValue: 앵커 플레이어에 대해 값이 가장 높은 키를 찾습니다.

• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은요청 플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다.기본값은 avg.

속성 표현식속성 표현식은 규칙 세트에서 매치메이킹과 관련된 특정 속성을 참조하는 데 사용합니다. 속성에는 매치메이킹 요청의 플레이어 속성 값이 포함될 수 있습니다. 예를 들어, 규칙은 평가할 플레이어 속성을 파악하는 데 속성 표현식을 사용할 수 있습니다.

일반적으로 다음 두 가지 형태 중 하나를 취합니다.

• 개별 플레이어 데이터

• 개별 플레이어 데이터의 컬렉션 형태를 취하는 계산된 팀 데이터유효한 속성 표현식은 단일 플레이어, 팀 또는 매치의 특정 값을 식별합니다. 다음의 부분 표현식이 팀 및 플레이어 식별 방식을 설명합니다.매치에서 특정 팀을식별하는 방법:

teams[red] 레드 팀 팀

버전283

Amazon GameLift 개발자 안내서규칙 세트 스키마

매치에서 모든 팀을식별하는 방법:

teams[*] 모든 팀 List<Team>

특정 팀에서 플레이어를 식별하는 방법:

team[red].players 레드 팀에 있는 플레이어

List<Player>

매치에서 플레이어를식별하는 방법:

team[*].players 매치에 속한 플레이어의 팀별 그룹화

List<List<Player>>

다음 표는 이전 예제를 바탕으로 구축되는 일부 유효한 속성 표현식을 나타낸 것입니다.teams[red].players[playerid] 레드 팀에 속한 모든 플레이어

의 플레이어 IDList<string>

teams[red].players.attributes[skill]레드 팀에 속한 모든 플레이어의 "스킬" 속성

List<number>

teams[*].players.attributes[skill] 매치에 속한 모든 플레이어(팀별 그룹화)의 "스킬" 속성

List<List<number>>

표현식 의미 결과 유형속성 표현식은 다음 함수 또는 함수 조합을 사용하여 팀 데이터를 집계하는 데 사용할 수 있습니다.min List<number> 목록에 있는 모든 수

의 최소값을 구합니다.

숫자

max List<number> 목록에 있는 모든 수의 최대값을 구합니다.

숫자

avg List<number> 목록에 있는 모든 수의 평균을 구합니다.

숫자

median List<number> 목록에 있는 모든 수의 중간값을 구합니다.

숫자

sum List<number> 목록에 있는 모든 수의 합계를 구합니다.

숫자

count List<?> 목록에 있는 원소의수를 구합니다.

숫자

stddev List<number> 목록에 있는 모든 수의 표준편차를 구합니다.

숫자

flatten List<List<?>> 중첩된 목록의 컬렉션을 모든 원소를 포함

List<?>

하는 단일 목록으로변환합니다.

버전284

Amazon GameLift 개발자 안내서규칙 세트 스키마

set_intersection List<List<string>> 모음에 있는 모든 문자열 목록에서 확인된

List<string>

문자열의 목록을 가져옵니다.

모두 해당 List<List<?>> 중첩된 목록 상의 모든 연산이 각 하위 목

List<?>

록에서 개별적으로 이루어져 결과 목록을산출합니다.

집계 입력 의미 결과다음 표는 집계 함수를 사용하는 일부 유효한 속성 표현식을 나타낸 것입니다.flatten(teams[*].players.attributes[skill]) 매치에 속한 모든 플

레이어(그룹화되지 않음)의 "스킬" 속성

List<number>

avg(teams[red].players.attributes[skill]) 레드 팀 플레이어의평균 스킬

숫자

avg(teams[*].players.attributes[skill] 매치에 속한 각 팀의평균 스킬

List<number>

avg(flatten(teams[*].players.attributes[skill])) 매치에 속한 모든 플레이어의 평균 스킬

숫자

레벨입니다. 이 표현식은 평면화된 플레이어 스킬 목록을 구한다음 평균합니다.

count(teams[red].players) 레드 팀에 있는 플레이어의 수

숫자

count (teams[*].players) 매치에 속한 각 팀의플레이어 수

List<number>

max(avg(teams[*].players.attributes[skill])) 매치에서 가장 높은팀 스킬 레벨

숫자

표현식 의미 결과 유형 (p. 287)에 자세히 나와 있는 규칙 언어를 사용하여 사용자 지정 값을 개발합니다.

스몰 매치에 대한 규칙 세트 스키마최대 40명의 플레이어로 이루어진 매치를 빌드하는 규칙 세트를 생성할 때 이 스키마를 사용합니다.

{ "name": <descriptive label, string>, "ruleLanguageVersion": <must be "1.0">, "playerAttributes":[{ "name": <unique name for player attribute to be used by matchmaker, string>, "type": <attribute data type, allowed values are "string", "number", "string_list", "string_number_map">,

버전285

Amazon GameLift 개발자 안내서규칙 세트 스키마

"default": <value to use when no player-specific value is provided> }], "teams": [{ "name": <unique label, string>, "maxPlayers": <max players allowed in team>, "minPlayers": <min players required in team>, "quantity": <number of teams to create with this definition> }], "rules": [{ "name": <unique label, string>, "description": <descriptive label, string>, "type": <rule type, string>, "<type-specific property>": <property expression> }], "expansions": [{ "target": <rule/team and property to adjust value for, example: "rules[<minSkill>].referenceValue">, "steps": [{ "waitTimeSeconds": <length of 1st wait period before relaxing rule>, "value": <new value> }, { "waitTimeSeconds": <length of 2nd wait period before further relaxing rule>, "value": <new value> }] }]}

라지 매치에 대한 규칙 세트 스키마40명을 초과하는 플레이어로 이루어진 매치를 빌드하는 규칙 세트를 생성할 때 이 스키마를 사용합니다. 규칙 세트에 정의된 모든 팀에 대한 maxPlayers 값이 40을 초과하면 GameLift에서 이 규칙 세트를 사용하는모든 요청을 라지 매치 지침에 따라 처리합니다.

{ "name": <descriptive label, string>, "ruleLanguageVersion": <must be "1.0">, "playerAttributes":[{ "name": <unique name for player attribute to be used by matchmaker, string>, "type": <attribute data type, allowed values are "string", "number", "string_list", "string_number_map">, "default": <value to use when no player-specific value is provided> }], "teams": [{ "name": <unique label, string>, "maxPlayers": <max players allowed in team>, "minPlayers": <min players required in team>, "quantity": <number of teams to create with this team definition> }], "algorithm": { "balancedAttribute": <name of player attribute, data type "number", to use when grouping players >, "strategy": <must be "balanced">, "batchingPreference": <choose between "largestPopulation" (default) or "fastestRegion"> }, "rules": [{ "name": <unique label, string>, "description": <descriptive label, string>, "type": <rule type, must be "latency">, "<type-specific property>": <property expression, must set value for "maxLatency"> }], "expansions": [{ "target": <rule/team and property to adjust value for, example: "rules[<rule name>].maxLatency">,

버전286

Amazon GameLift 개발자 안내서규칙 언어

"steps": [{ "waitTimeSeconds": <length of 1st wait period before relaxing rule>, "value": <new value> }, { "waitTimeSeconds": <length of 2nd wait period before further relaxing rule>, "value": <new value> }] }]}

FlexMatch 규칙 언어FlexMatch 규칙 세트에 대한 규칙을 작성할 때 다음 속성 표현식 구문을 사용합니다.

FlexMatch 규칙 생성에 대해 자세히 알아보기

• FlexMatch 규칙 세트 빌드 (p. 136)• 매치메이킹 규칙 세트 생성 (p. 141)• FlexMatch 규칙 세트 예제 (p. 143)

규칙 유형FlexMatch에서 지원되는 규칙 유형은 다음과 같습니다. 각 규칙 시간에는 여기에 설명되어 있는 속성 세트가있습니다.

거리 규칙(distance)

거리 규칙은 스킬 레벨 간의 거리와 같이 두 숫자 값 간의 차이를 측정합니다. 예를 들어, 거리 규칙을 통해 모든 플레이어들이 서로 두 레벨 차이 내에 있어야 한다고 정할 수 있습니다.

거리 규칙 속성• measurements – 거리를 측정하기 위한 플레이어 속성 값으로 반드시 숫자 값이어야 합니다.• referenceValue – 가능한 매치에 대한 거리를 측정하는 숫자 값입니다.• minDistance/maxDistance – 매치 성공을 위해 허용되는 최대 또는 최소 거리 값입니다.• partyAggregation – 복수 플레이어(파티) 요청을 처리하는 방법입니다. 유효한 옵션은 요청 플레

이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다. 기본값은 avg.비교 규칙(comparison)

비교 규칙은 또 다른 값과 플레이어 속성 값을 비교합니다. 다음과 같은 두 가지 유형의 비교 규칙이 있습니다. 첫 번째 유형은 참조 값과 속성 값을 비교합니다. 참조 값과 유효한 비교 작업을 지정합니다. 예를 들어, 매치된 플레이어들은 반드시 스킬 레벨이 24 이상이어야 한다고 규칙에서 정할 수 있습니다. 두번째 유형은 팀 또는 매치의 모든 플레이어들을 대상으로 속성 값을 비교합니다. 이 유형은 참조 값을 생략하고 같음(equals) 또는 같지 않음(not-equals)으로 지정합니다(모든 플레이어가 동일한 속성 값을 갖거나 어떤 플레이어도 동일한 속성 값을 갖지 않도록 지정). 예를 들어, 모든 플레이어들은 반드시 동일한 게임 맵을 선택해야 한다고 규칙에서 정할 수 있습니다.

비교 규칙 속성• measurements – 비교할 플레이어 속성 값입니다.• referenceValue – 가능한 매치에 대한 측정치를 평가하는 값입니다.• operation – 측정치를 평가하는 방법입니다. 유효한 연산에는 <, <=, =, !=, >, >=이 포함됩

니다.• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은 요청 플레

이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다. 기본값은 avg.

버전287

Amazon GameLift 개발자 안내서규칙 언어

수집 규칙(collection)

수집 규칙은 플레이어 속성 값 모음을 평가합니다. 속성 모음에는 여러 플레이어에 대한 속성 값들, 한플레이어의 속성 값(문자열 목록), 또는 둘 모두가 포함될 수 있습니다. 예를 들어 수집 규칙은 팀의 플레이어들이 선택한 캐릭터 모음을 살펴보고 특정 캐릭터가 하나 이상 포함되도록 정할 수 있습니다.

수집 규칙 속성• measurements – 평가할 플레이어 속성 값의 모음입니다. 속성 값은 반드시 문자열 목록이어야 합니

다.• referenceValue – 가능한 매치에 대한 측정치를 평가하기 위한 값 또는 값 모음입니다.• operation – 측정치 모음을 평가하는 방법입니다. 유효한 작업에는 다음이 포함됩니다.

• intersection은 모든 플레이어의 속성 모음에서 공통인 값의 수를 측정합니다. 예제 4: 최선의 매치 검색을 위한 명시적 정렬 사용 (p. 148)의 MapOverlap 규칙을 참조하십시오.

• contains는 특정 참조 값을 포함하는 플레이어 속성 모음의 수를 측정합니다. 예제 3: 팀 레벨 요구 사항 및 지연 시간 제한 설정 (p. 146)의 OverallMedicLimit 규칙을 참조하십시오.

• reference_intersection_count는 플레이어 속성 모음과 참조 값 모음 간의 교집합을 측정합니다. 측정 값의 각 플레이어 속성 모음(문자열 목록)은 참조 모음을 기준으로 개별적으로 평가됩니다. 이 작업은 서로 다른 플레이어 속성들을 평가하는 데 사용할 수 있습니다. 예제 5: 복수 플레이어속성 간의 교집합 찾기 (p. 150)의 OpponentMatch 규칙을 참조하십시오.

• minCount/maxCount – 매치 성공을 위해 허용되는 최대 또는 최소 값입니다.• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은 요청 플레

이어들에 대한 값의 union 또는 intersection을 사용하는 것입니다. 기본값은 union.지연 규칙 (latency)

지연 시간 규칙은 수락 가능한 매치에 대한 플레이어 지연 시간 설정을 평가합니다. 예를 들어, 매치된모든 플레이어들의 리전 지연 시간이 반드시 최대 한도 이내여야 한다고 규칙으로 정할 수 있습니다. 현재는 이것이 규칙 세트에서 라지 매치에 대해 사용할 수 있는 유일한 규칙 유형이며 maxLatency 설정이 유일하게 사용 가능한 옵션입니다.

지연 시간 규칙 속성• maxLatency – 리전에 대한 최대 허용 지연 값입니다. 각 플레이어에 대해 이 지연 시간을 초과하는

리전은 모두 무시합니다.• maxDistance – 각 플레이어의 지연 시간과 거리 참조 값 간의 최대 차이입니다.• distanceReference – maxDistance와 함께 사용합니다. 성공적인 매치에 대한 거리를 측정하는

숫자 값입니다. 지연 시간 값은 여러 사용자의 지연 시간 값을 집계한 것입니다. 유효한 옵션은 최소(min) 또는 평균(avg) 플레이어 지연 시간 값입니다 (속성 표현식 단원 참조).

• partyAggregation – 복수 플레이어(파티) 매치 요청을 정렬하는 방법입니다. 유효한 옵션은 요청플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다. 기본값은 avg.

거리 정렬 규칙(distanceSort)

거리 정렬은 매치메이커가 플레이어 속성을 바탕으로 매치메이킹 요청을 사전에 정렬하도록 지시하는명시적 정렬 옵션입니다. 거리 정렬 규칙은 앵커 요청으로부터의 거리를 토대로 매치메이킹 요청을 평가합니다.

거리 정렬 규칙 속성• sortDirection – 매치메이킹 요청을 정렬하는 방향입니다. 유효한 옵션은 ascending 또는descending입니다.

• sortAttribute – 플레이어 정렬 기준이 되는 플레이어 속성입니다.• mapKey – 플레이어 속성이 맵인 경우 이를 평가하는 방법입니다. 유효한 옵션은 다음과 같습니다.

• minValue: 앵커 플레이어에 대해 값이 가장 낮은 키를 찾습니다.• maxValue: 앵커 플레이어에 대해 값이 가장 높은 키를 찾습니다.

• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은 요청 플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다. 기본값은 avg.

버전288

Amazon GameLift 개발자 안내서규칙 언어

절대 정렬 규칙(absoluteSort)

절대 정렬은 매치메이커가 플레이어 속성을 바탕으로 매치메이킹 요청을 사전에 정렬하도록 지시하는명시적 정렬 옵션입니다. 절대 정렬은 플레이어 속성이 앵커 요청의 속성과 일치하는지 여부를 바탕으로매치메이킹 요청을 평가합니다.

절대 정렬 규칙 속성• sortDirection – 매치메이킹 요청을 정렬하는 방향입니다. 유효한 옵션은 ascending 또는descending입니다.

• sortAttribute – 플레이어 정렬 기준이 되는 플레이어 속성입니다.• mapKey – 플레이어 속성이 맵인 경우 이를 평가하는 방법입니다. 유효한 옵션은 다음과 같습니다.

• minValue: 앵커 플레이어에 대해 값이 가장 낮은 키를 찾습니다.• maxValue: 앵커 플레이어에 대해 값이 가장 높은 키를 찾습니다.

• partyAggregation – 복수 플레이어(파티) 요청을 정렬하는 방법입니다. 유효한 옵션은 요청 플레이어들에 대해 최소(min), 최대(max) 또는 평균(avg) 값을 사용하는 것입니다. 기본값은 avg.

속성 표현식속성 표현식은 규칙 세트에서 매치메이킹과 관련된 특정 속성을 참조하는 데 사용합니다. 속성에는 매치메이킹 요청의 플레이어 속성 값이 포함될 수 있습니다. 예를 들어, 규칙은 평가할 플레이어 속성을 파악하는 데속성 표현식을 사용할 수 있습니다.

일반적으로 다음 두 가지 형태 중 하나를 취합니다.

• 개별 플레이어 데이터• 개별 플레이어 데이터의 컬렉션 형태를 취하는 계산된 팀 데이터

유효한 속성 표현식은 단일 플레이어, 팀 또는 매치의 특정 값을 식별합니다. 다음의 부분 표현식이 팀 및 플레이어 식별 방식을 설명합니다.

매치에서 특정 팀을 식별하는 방법:

teams[red] 레드 팀 팀

매치에서 모든 팀을 식별하는 방법:

teams[*] 모든 팀 List<Team>

특정 팀에서 플레이어를식별하는 방법:

team[red].players 레드 팀에 있는 플레이어 List<Player>

매치에서 플레이어를 식별하는 방법:

team[*].players 매치에 속한 플레이어의팀별 그룹화

List<List<Player>>

다음 표는 이전 예제를 바탕으로 구축되는 일부 유효한 속성 표현식을 나타낸 것입니다.

표현식 의미 결과 유형

teams[red].players[playerid] 레드 팀에 속한 모든 플레이어의플레이어 ID

List<string>

teams[red].players.attributes[skill] 레드 팀에 속한 모든 플레이어의"스킬" 속성

List<number>

버전289

Amazon GameLift 개발자 안내서규칙 언어

표현식 의미 결과 유형

teams[*].players.attributes[skill] 매치에 속한 모든 플레이어(팀별그룹화)의 "스킬" 속성

List<List<number>>

속성 표현식은 다음 함수 또는 함수 조합을 사용하여 팀 데이터를 집계하는 데 사용할 수 있습니다.

집계 입력 의미 결과

min List<number> 목록에 있는 모든 수의최소값을 구합니다.

숫자

max List<number> 목록에 있는 모든 수의최대값을 구합니다.

숫자

avg List<number> 목록에 있는 모든 수의평균을 구합니다.

숫자

median List<number> 목록에 있는 모든 수의중간값을 구합니다.

숫자

sum List<number> 목록에 있는 모든 수의합계를 구합니다.

숫자

count List<?> 목록에 있는 원소의 수를구합니다.

숫자

stddev List<number> 목록에 있는 모든 수의표준편차를 구합니다.

숫자

flatten List<List<?>> 중첩된 목록의 컬렉션을모든 원소를 포함하는 단일 목록으로 변환합니다.

List<?>

set_intersection List<List<string>> 모음에 있는 모든 문자열목록에서 확인된 문자열의 목록을 가져옵니다.

List<string>

모두 해당 List<List<?>> 중첩된 목록 상의 모든연산이 각 하위 목록에서개별적으로 이루어져 결과 목록을 산출합니다.

List<?>

다음 표는 집계 함수를 사용하는 일부 유효한 속성 표현식을 나타낸 것입니다.

표현식 의미 결과 유형

flatten(teams[*].players.attributes[skill]) 매치에 속한 모든 플레이어(그룹화되지 않음)의"스킬" 속성

List<number>

avg(teams[red].players.attributes[skill]) 레드 팀 플레이어의 평균스킬

숫자

avg(teams[*].players.attributes[skill] 매치에 속한 각 팀의 평균 스킬

List<number>

버전290

Amazon GameLift 개발자 안내서매치메이킹 이벤트

표현식 의미 결과 유형

avg(flatten(teams[*].players.attributes[skill])) 매치에 속한 모든 플레이어의 평균 스킬 레벨입니다. 이 표현식은 평면화된 플레이어 스킬 목록을구한 다음 평균합니다.

숫자

count(teams[red].players) 레드 팀에 있는 플레이어의 수

숫자

count (teams[*].players) 매치에 속한 각 팀의 플레이어 수

List<number>

max(avg(teams[*].players.attributes[skill])) 매치에서 가장 높은 팀스킬 레벨

숫자

FlexMatch 매치메이킹 이벤트Amazon GameLift는 매치메이킹 티켓의 처리와 관련된 이벤트를 방출합니다. 여기에 열거된 모든 이벤트를 Amazon SNS 주제에 게시할 수 있습니다. 이러한 이벤트는 Amazon CloudWatch Events로도 방출됩니다. 매치메이킹 이벤트 작업에 대한 자세한 내용은 FlexMatch 이벤트 알림 설정 (p. 158) 단원을 참조하십시오. 매치메이킹 티켓 상태에 대한 자세한 내용은 Amazon GameLift Service API Reference의MatchmakingTicket을 참조하십시오.

MatchmakingSearching티켓이 매치메이킹에 입력되었습니다. 여기에는 신규 요청과 실패한 제안된 매치의 일부였던 요청이 포함됩니다.

리소스: ConfigurationArn

세부 정보: type, tickets, estimatedWaitMillis, gameSessionInfo

{ "version": "0", "id": "cc3d3ebe-1d90-48f8-b268-c96655b8f013", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-08T21:15:36.421Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-08T21:15:35.676Z", "players": [ { "playerId": "player-1" } ] }

버전291

Amazon GameLift 개발자 안내서매치메이킹 이벤트

], "estimatedWaitMillis": "NOT_AVAILABLE", "type": "MatchmakingSearching", "gameSessionInfo": { "players": [ { "playerId": "player-1" } ] } }}

PotentialMatchCreated잠재적 매치가 생성되었습니다. 이는 수락을 요구하는지 여부에 상관없이 모든 새로운 잠재적 매치에 대해방출됩니다.

리소스: ConfigurationArn

세부 정보: type, tickets, acceptanceTimeout, acceptanceRequired, ruleEvaluationMetrics,gameSessionInfo, matchId

{ "version": "0", "id": "fce8633f-aea3-45bc-aeba-99d639cad2d4", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-08T21:17:41.178Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-08T21:15:35.676Z", "players": [ { "playerId": "player-1", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-08T21:17:40.657Z", "players": [ { "playerId": "player-2", "team": "blue" } ] } ], "acceptanceTimeout": 600, "ruleEvaluationMetrics": [ {

버전292

Amazon GameLift 개발자 안내서매치메이킹 이벤트

"ruleName": "EvenSkill", "passedCount": 3, "failedCount": 0 }, { "ruleName": "EvenTeams", "passedCount": 3, "failedCount": 0 }, { "ruleName": "FastConnection", "passedCount": 3, "failedCount": 0 }, { "ruleName": "NoobSegregation", "passedCount": 3, "failedCount": 0 } ], "acceptanceRequired": true, "type": "PotentialMatchCreated", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" }, { "playerId": "player-2", "team": "blue" } ] }, "matchId": "3faf26ac-f06e-43e5-8d86-08feff26f692" }}

AcceptMatch플레이어가 잠재적 매치를 수락했습니다. 이 이벤트에는 매치에 속한 각 플레이어의 수락 상태가 표시됩니다. 데이터 누락은 해당 플레이어에 대해 AcceptMatch가 호출되지 않았음을 의미합니다.

리소스: ConfigurationArn

세부 정보: type, tickets, matchId, gameSessionInfo

{ "version": "0", "id": "b3f76d66-c8e5-416a-aa4c-aa1278153edc", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T20:04:42.660Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ {

버전293

Amazon GameLift 개발자 안내서매치메이킹 이벤트

"ticketId": "ticket-1", "startTime": "2017-08-09T20:01:35.305Z", "players": [ { "playerId": "player-1", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-09T20:04:16.637Z", "players": [ { "playerId": "player-2", "team": "blue", "accepted": false } ] } ], "type": "AcceptMatch", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" }, { "playerId": "player-2", "team": "blue", "accepted": false } ] }, "matchId": "848b5f1f-0460-488e-8631-2960934d13e5" }}

AcceptMatchCompleted플레이어 수락, 플레이어 거부 또는 수락 타임아웃으로 매치 수락이 완료됩니다.

리소스: ConfigurationArn

세부 정보: type, tickets, acceptance, matchId, gameSessionInfo

{ "version": "0", "id": "b1990d3d-f737-4d6c-b150-af5ace8c35d3", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-08T20:43:14.621Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ {

버전294

Amazon GameLift 개발자 안내서매치메이킹 이벤트

"ticketId": "ticket-1", "startTime": "2017-08-08T20:30:40.972Z", "players": [ { "playerId": "player-1", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-08T20:33:14.111Z", "players": [ { "playerId": "player-2", "team": "blue" } ] } ], "acceptance": "TimedOut", "type": "AcceptMatchCompleted", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" }, { "playerId": "player-2", "team": "blue" } ] }, "matchId": "a0d9bd24-4695-4f12-876f-ea6386dd6dce" }}

MatchmakingSucceeded매치메이킹이 성공적으로 완료되고 게임 세션이 생성되었습니다.

리소스: ConfigurationArn

세부 정보: type, tickets, matchId, gameSessionInfo

{ "version": "0", "id": "5ccb6523-0566-412d-b63c-1569e00d023d", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T19:59:09.159Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1",

버전295

Amazon GameLift 개발자 안내서매치메이킹 이벤트

"startTime": "2017-08-09T19:58:59.277Z", "players": [ { "playerId": "player-1", "playerSessionId": "psess-6e7c13cf-10d6-4756-a53f-db7de782ed67", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-09T19:59:08.663Z", "players": [ { "playerId": "player-2", "playerSessionId": "psess-786b342f-9c94-44eb-bb9e-c1de46c472ce", "team": "blue" } ] } ], "type": "MatchmakingSucceeded", "gameSessionInfo": { "gameSessionArn": "arn:aws:gamelift:us-west-2:123456789012:gamesession/836cf48d-bcb0-4a2c-bec1-9c456541352a", "ipAddress": "192.168.1.1", "port": 10777, "players": [ { "playerId": "player-1", "playerSessionId": "psess-6e7c13cf-10d6-4756-a53f-db7de782ed67", "team": "red" }, { "playerId": "player-2", "playerSessionId": "psess-786b342f-9c94-44eb-bb9e-c1de46c472ce", "team": "blue" } ] }, "matchId": "c0ec1a54-7fec-4b55-8583-76d67adb7754" }}

MatchmakingTimedOut매치메이킹 티켓이 시간 초과로 실패했습니다.

리소스: ConfigurationArn

세부 정보: type, tickets, ruleEvaluationMetrics, message, matchId, gameSessionInfo

{ "version": "0", "id": "fe528a7d-46ad-4bdc-96cb-b094b5f6bf56", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T20:11:35.598Z", "region": "us-west-2", "resources": [

버전296

Amazon GameLift 개발자 안내서매치메이킹 이벤트

"arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "reason": "TimedOut", "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-09T20:01:35.305Z", "players": [ { "playerId": "player-1", "team": "red" } ] } ], "ruleEvaluationMetrics": [ { "ruleName": "EvenSkill", "passedCount": 3, "failedCount": 0 }, { "ruleName": "EvenTeams", "passedCount": 3, "failedCount": 0 }, { "ruleName": "FastConnection", "passedCount": 3, "failedCount": 0 }, { "ruleName": "NoobSegregation", "passedCount": 3, "failedCount": 0 } ], "type": "MatchmakingTimedOut", "message": "Removed from matchmaking due to timing out.", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" } ] } }}

MatchmakingCancelled매치메이킹 티켓이 취소되었습니다.

리소스: ConfigurationArn

세부 정보: type, tickets, ruleEvaluationMetrics, message, matchId, gameSessionInfo

{ "version": "0",

버전297

Amazon GameLift 개발자 안내서매치메이킹 이벤트

"id": "8d6f84da-5e15-4741-8d5c-5ac99091c27f", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T20:00:07.843Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "reason": "Cancelled", "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-09T19:59:26.118Z", "players": [ { "playerId": "player-1" } ] } ], "ruleEvaluationMetrics": [ { "ruleName": "EvenSkill", "passedCount": 0, "failedCount": 0 }, { "ruleName": "EvenTeams", "passedCount": 0, "failedCount": 0 }, { "ruleName": "FastConnection", "passedCount": 0, "failedCount": 0 }, { "ruleName": "NoobSegregation", "passedCount": 0, "failedCount": 0 } ], "type": "MatchmakingCancelled", "message": "Cancelled by request.", "gameSessionInfo": { "players": [ { "playerId": "player-1" } ] } }}

MatchmakingFailed매치메이킹 티켓에 오류가 발생했습니다. 이는 액세스가 불가한 게임 세션 대기열 혹은 내부 오류 때문일 수있습니다.

리소스: ConfigurationArn

세부 정보: type, tickets, ruleEvaluationMetrics, message, matchId, gameSessionInfo

버전298

Amazon GameLift 개발자 안내서매치메이킹 이벤트

{ "version": "0", "id": "025b55a4-41ac-4cf4-89d1-f2b3c6fd8f9d", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-16T18:41:09.970Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-16T18:41:02.631Z", "players": [ { "playerId": "player-1", "team": "red" } ] } ], "customEventData": "foo", "type": "MatchmakingFailed", "reason": "UNEXPECTED_ERROR", "message": "An unexpected error was encountered during match placing.", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" } ] }, "matchId": "3ea83c13-218b-43a3-936e-135cc570cba7" }

버전299

Amazon GameLift 개발자 안내서SDK 버전

GameLift 릴리스 정보GameLift 릴리스 정보는 서비스와 관련된 새로운 기능, 업데이트, 수정 사항에 대한 세부 정보를 제공합니다.또한 다음 구성 요소에 대한 변경 사항이 포함될 수 있습니다.

• AWS SDK GameLift API 및 CLI 명령• 관리형 GameLift 및 사용자 지정 게임 서버에 사용할 GameLift Server SDK• Realtime 서버에 사용할 GameLift Client SDK• GameLift 콘솔

SDK 버전다음 탭에는 SDK 버전과 함께 모든 GameLift 릴리스가 나열되어 있습니다. 게임 서버 및 클라이언트 통합에대해 비교 가능한 SDK를 사용할 필요는 없지만 SDK의 이전 버전은 다른 SDK에서 최신 기능의 사용을 완전히 지원하지 않을 수 있습니다.

현재 버전

릴리스: AWS SDK 버전: Server SDK 버전: Realtime ClientSDK 버전:

GameLift Local

2020-04-16 (p. 301) 1.7.310 이상 4.0.0 1.1.0 1.0.0

이전 버전

릴리스: AWS SDK 버전: Server SDK 버전: Realtime ClientSDK 버전:

GameLift Local

2020년 4월 2일 (p. 301)

1.7.310 이상 3.4.0 1.1.0 1.0.0

2019년 12월 19일 1.7.249 이상 3.4.0 1.1.0 1.0.0

2019-11-15 1.7.210 이상 3.4.0 1.1.0 1.0.0

2019-10-24 1.7.210 이상 3.4.0 1.1.0 1.0.0

2019-09-03 1.7.175 이상 3.4.0 1.1.0 1.0.0

2019-07-09 1.7.140 이상 3.3.0 1.0.0 1.0.0

2019-04-25 1.7.91 이상 3.3.0 1.0.0 1.0.0

2019-03-07 1.7.65 이상 3.3.0   1.0.0

2019-02-07 1.7.45 이상 3.3.0   1.0.0

2018-12-14 1.6.20 이상 3.3.0   1.0.0

2018-09-27 1.6.20 이상 3.2.1   1.0.0

2018-06-14 1.4.47 이상 3.2.1   1.0.0

버전300

Amazon GameLift 개발자 안내서릴리스 정보

릴리스: AWS SDK 버전: Server SDK 버전: Realtime ClientSDK 버전:

GameLift Local

2018-05-10 1.4.47 이상 3.2.1   1.0.0

2018-02-15 1.3.58 이상 3.2.1   1.0.0

2018-02-08 1.3.52 이상 3.2.0   1.0.0

2017-09-03 1.1.43 이상 3.1.7   1.0.0

2017-08-16 1.1.31 이상 3.1.7   1.0.0

2017-05-16 1.0.122 이상 3.1.5   1.0.0

2017-04-11 1.0.103 이상 3.1.5   1.0.0

2017-02-21 1.0.72 이상 3.1.5    

2016-11-18 1.0.31 이상 3.1.0(C++만 해당)    

2016-10-13 1.0.17 이상 3.1.0(C++만 해당)    

2016-09-01 0.14.9 이상 3.1.0(C++만 해당)    

2016-08-04 0.12.16 이상 3.0.7(C++만 해당)    

릴리스 정보다음 릴리스 정보는 시간 순서로 나열되어 있으며 최신 업데이트가 먼저 나열됩니다. GameLift는 2016년에처음 릴리스되었습니다. 여기에 나열된 릴리스 정보보다 이전 릴리스 정보는 ??? (p. 300)에서 릴리스 날짜링크를 참조하십시오.

2020년 4월 16일: GameLift에서 Unity 및 Unreal Engine에 대한Server SDK를 업데이트함Amazon GameLift는 Unity 2019 및 Unreal Engine 4.24를 통한 게임 서버 개발을 지원하기 위해 업데이트된Server SDK를 릴리스했습니다.

릴리스 날짜: 2020년 4월 16일

업데이트된 SDK 버전: GameLift Server SDK 4.0.0

최신 버전의 GameLift Server SDK에는 다음과 같은 업데이트된 구성 요소가 포함되어 있습니다.

• Unity 2019에 대해 업데이트된 C# SDK 버전 4.0.0• Unreal Engine 4.22, 4.23 및 4.24에 대해 업데이트된 Unreal 플러그인 버전 3.3.1• C# 서버 SDK v 4.0.0을 사용하는 통합을 테스트하도록 업데이트된 GameLift Local 버전 1.0.5

최신 버전의 GameLift Server SDK는 Amazon GameLift 시작하기에서 다운로드합니다.

2020년 4월 2일: EC2에서 게임 호스팅에 GameLift FleetIQ 사용가능(공개 미리 보기)Amazon GameLift는 스팟 인스턴스 최적화를 위해 FleetIQ를 확장합니다.

버전301

Amazon GameLift 개발자 안내서Lumberyard 호환성

릴리스 날짜: 2020년 4월 2일

업데이트된 SDK 버전: GameLift Server SDK 3.4.0

GameLift FleetIQ 기능은 게임 호스팅에 사용할 수 있도록 저렴한 스팟 인스턴스의 실행 가능성을 최적화합니다. 이제 관리형 GameLift 서비스를 이용하지 않고 호스팅 리소스를 직접 관리하려는 고객을 위해 이 기능을 확장했습니다. 이 솔루션은 컨테이너 또는 다른 AWS 서비스(예: AWS Shield, Amazon Elastic ContainerService (Amazon ECS) 등)의 사용을 지원합니다.

새로운 GameLift FleetIQ 독립 실행형 솔루션에 대한 자세한 내용은 GameTech 블로그 게시물 및 GameLiftFleetIQ 가이드[공개 미리 보기] (p. 186) 단원을 참조하십시오.

Lumberyard 호환성Amazon Lumberyard 사용자의 경우 다음 표에는 Lumberyard 게임 엔진에 함께 제공되거나 호환되는GameLift SDK 버전이 나열되어 있습니다.

Amazon Lumberyard 버전: GameLift SDK 버전에 함께 제공됨:

1.4~1.5(베타) • Server SDK: 3.0.7• AWS SDK: 0.12.16

1.6~1.7(베타) • Server SDK: 3.1.0• AWS SDK: 0.14.9

1.8~1.14(베타) • Server SDK: 3.1.5• AWS SDK: 1.0.72~1.1.13

1.15 이상(베타) • Server SDK: 3.2.1• AWS SDK: 1.4.34 이상

버전302

Amazon GameLift 개발자 안내서

GameLift 문서 기록다음 표에서는 Amazon GameLift 설명서에서 변경된 중요 사항에 대해 설명합니다. 새로운 기능 및 업데이트된 기능 출시에 대한 자세한 내용은 GameLift 릴리스 정보 (p. 300) 단원을 참조하십시오.

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2020년 4월16일

업데이트

• 새로운 Server SDK 버전 – 업데이트된 ServerSDK가 이제 최신 Unity 및Unreal 엔진과 호환됩니다.

개발자 안내서:

• Unity (p. 40) 및 Unreal (p. 36) 게임에서Server SDK 빌드 및 사용관련 문서를 업데이트했습니다.

Server SDK 4.0.0

2020년 4월2일

새로운 기능

• 독립 실행형 솔루션으로서의 FleetIQ(공개 미리 보기) – 고객은 기존 클라우드 기반 게임 호스팅을 통해 EC2 스팟 인스턴스의사용을 최적화하거나 현재 온프레미스 호스팅 아키텍처를 확장 또는 마이그레이션하는 데 GameLiftFleetIQ를 사용할 수 있습니다.

개발자 안내서:

• 새 가이드:• GameLift FleetIQ 가

이드[공개 미리 보기] (p. 186)

Service APIReference(AWS SDK):

• 새 FleetIQ 작업: 다음 목록참조• TagResource• UntagResource• ListTagsForResource

AWS SDK: 2020-04-02

2019년 12월12일

업데이트

• AWS 리소스 관리 지원 –주요 GameLift 리소스는이제 ARN 값을 포함하고있으며 태그 지정을 지원합니다.

Service APIReference(AWS SDK):

• 새로운 태그 지정 작업:• TagResource• UntagResource• ListTagsForResource

• 이러한 GameLift 리소스의새로운 태그 및 ARN 파라미터: 빌드, 스크립트, 플릿, 게임 세션 대기열, 매치메이킹 구성, 매치메이킹규칙 세트

AWS SDK: 2019-12-12

2019년 11월15일

업데이트

• GameLift에 대한CloudFormation 템플릿 지원 확장 – Build 및 Fleet에대한 기존 CloudFormation템플릿이 업데이트되었으며 Script, Queue,

개발자 안내서:

• 새로운 주제:• AWS CloudFormation

을 사용하여 리소스 생성 (p. 82)

 

버전303

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨MatchmakingConfiguration및 MatchmakingRuleSet등의 새로운 템플릿이 있습니다.

2019년 10월24일

업데이트

• Amazon Linux 2 및 Series5 인스턴스 유형에 대한지원 – 새로운 C5/M5/R5 인스턴스 유형을 사용하여 게임을 호스팅합니다. 이제 게임 서버는Amazon Linux 2에서 실행할 수 있습니다. 이제 모든Realtime 서버는 AmazonLinux 2에서 실행됩니다.

개발자 안내서 및 API 참조문서는 추가 옵션을 반영하도록 업데이트되었습니다.

업데이트는 2019년10월 24일에 글로벌 리전에서 릴리스되었으며, 2019년11월 15일에 Sinnet이 운영하는 중국(베이징) 리전에서 릴리스되었습니다.

AWS SDK: 2019-10-24

2019년 9월3일

새로운 기능

• TLS 인증서 생성 – 이제GameLift는 사용자 지정서버 및 Realtime 서버에대한 서버 인증과 데이터패킷 암호화를 지원하기위해 플릿 수준 TLS 인증서를 생성할 수 있습니다.

개발자 안내서:

• 다음 주제는 TLS 인증서에대한 정보로 업데이트됩니다.• 게임 서버 호스팅 (p. 4)• Realtime 클라이언트와

서버가 상호 작용하는방식 (p. 9)

• TLS 인증서 검색 (p. 44)• Realtime 서버에 대해

게임 클라이언트 통합 (p. 58)

SDK 및 API 참조:

• GameLift ServiceAPI, 새로운CreateFleet() 파라미터CertificateConfiguration

• GameLift ServerSDK, 새로운 작업GetInstanceCertificate() C++ (p. 247) 및 C# (p. 262)

• Realtime Client SDK,새로운 파라미터 thesection called “데이터 형식” (p. 234)

AWS SDK: 2019-09-03

Server SDK 3.4.0

Realtime Client SDK 1.1.0

버전304

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2019년 7월9일

새로운 기능

• 라지 매치에 대한FlexMatch 지원 – 더 빨라진 새 알고리즘으로 매치당 200명의 플레이어를 지원하도록 확장된 매치메이킹입니다. 매치 채우기가이제 자동 모드로 수행됩니다.

개발자 안내서:

• 라지 매치 작업에 대한 정보를 포함하도록 업데이트되거나 확장된 FlexMatch주제:• Amazon

GameLiftFlexMatch의작동 방식 (p. 12)

• FlexMatch 규칙 세트 설계 (p. 137)

• FlexMatch 규칙 세트 스키마 (p. 281)

• FlexMatch 규칙 세트 예제 (p. 143)

• FlexMatch를 사용하여 기존 게임 채우기 (p. 75)

• FlexMatch 매치메이커설계 (p. 133)

Service APIReference(AWS SDK):

• 자동 채우기를 지원하도록업데이트된 매치메이킹 구성 API 작업:• CreateMatchmakingConfiguration• UpdateMatchmakingConfiguration• StopMatchmaking

AWS SDK: 2019-07-09

버전305

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2019년 4월25일

새로운 기능

• Realtime 서버 – 기본 게임서버 아키텍처가 내장되어 있는 Realtime 서버를사용하여 게임을 배포합니다. 필요에 따라 사용자 지정 게임 서버 로직을 추가합니다.

개발자 안내서:

• Realtime 서버에 대한 새로운 주제:• Realtime 서버의 작동

방식 (p. 7)• 게임에 Amazon

GameLiftRealtime 서버통합 (p. 58)

• Realtime 서버 ClientAPI(C#) 참조 (p. 228)

Service APIReference(AWS SDK):

• Realtime 서버 스크립트를 관리하는 새 API작업: CreateScript,DescribeScript,UpdateScript,DeleteScript, ListScripts

• 스크립트를 사용하여Realtime 서버 배포를 활성화하도록 업데이트된 플릿 API 작업

AWS SDK: 2019-04-25

Realtime Client SDK 1.0.0

2019년 3월7일

새로운 기능

• AWS 리소스에 대한 보안액세스 – GameLift 인스턴스에서 실행 중인 애플리케이션이 본인 소유의AWS 리소스와 통신할 수있습니다.

개발자 안내서:

• 보안 액세스 옵션에 대한 새로운 주제 플릿에서 AWS 리소스에 액세스 (p. 45)

Service APIReference(AWS SDK):

• CreateFleet 및FleetAttributes –InstanceRoleArn이 추가되었습니다.

AWS SDK: 2019-03-07

2019년 2월7일

새로운 기능

• 매치메이킹 규칙 세트 삭제

개발자 안내서:

• 매치메이킹 규칙 세트 생성 (p. 141)에서 매치메이킹 규칙 세트 삭제 내용이업데이트되었습니다.

Service APIReference(AWS SDK):

• DeleteMatchmakingRuleSet(신규)

AWS SDK: 2019-02-07

버전306

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2018년 12월14일

업데이트

• 새로운 Server SDK 버전 – 업데이트된 ServerSDK가 이제 최신 Unity 및Unreal 엔진과 호환되며Visual Studio 15 2017에서 사용할 수 있습니다.

• FlexMatch 백필(Backfill)에서 Unreal 엔진 게임 지원

개발자 안내서:

• Unity (p. 40) 및 Unreal (p. 36) 게임에서Server SDK 빌드 및 사용관련 문서를 업데이트했습니다.

• Lumberyard 호환성 (p. 302) 항목이 업데이트되었습니다.

Server SDK:

• StartMatchBackfill(Unreal) (p. 276)(신규)

• StopMatchBackfill(Unreal) (p. 277)(신규)

Server SDK 3.3.0

2018년 9월27일

새로운 기능

• 중국의 GameLift – 이제Sinnet에서 운영하는 AWS중국(베이징) 리전에서GameLift 서비스를 사용할수 있습니다.

개발자 안내서:

• 새로운 Amazon GameLift에서 표현식 사용 (p. 29)주제에서는 중국에서AWS를 사용하는 방법을안내하는 링크를 제공합니다.

AWS SDK: 2018-09-27

2018년 6월14일

새로운 기능

• 의 대기열 지표 FleetIQ –지표를 FleetIQ 사용하여대기열 성능을 추적합니다.

개발자 안내서:

• 대기열에 대한 GameLift지표 (p. 176)에 추가된 새로운 5가지 대기열 지표.

• 새로운 주제 대기열 지표평가 (p. 128)를 통해 대기열 성능 최적화

 

버전307

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2018년 5월10일

새로운 기능

• 대상 추적을 이용한 Auto-scaling – 이러한 새 조정방법을 사용하여 플레이어요구에 맞는 플릿 용량을찾습니다.

• }Auto-scaling 활성화/비활성화 – 조정 정책을 제거하지 않고 auto-scaling과 수동 조정을 번갈아 이용합니다.

개발자 안내서:

• 새 섹션인 GameLift 플릿용량 조정 (p. 115)에서auto-scaling을 포함해 조정과 관련된 모든 주제를다루고 있습니다.

• "GameLift 작동 방식" 주제에 있는 플릿 용량 조정 (p. 5)의 섹션을 업데이트했습니다.

Service APIReference(AWS SDK):

• PutScalingPolicy(새로운예제로 업데이트됨)

• StopFleetActions 및StartFleetActions(신규)

AWS SDK: 2018-05-10

버전308

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2018년 2월15일

새로운 기능

• 스팟 인스턴스 및 FleetIQ– 스팟 집합이 있는 새로운FleetIQ 기능을 사용하여호스팅 비용을 상당히 절감할 수 있습니다.

개발자 안내서:

• GameLift에 스팟 인스턴스사용 (p. 100) – 스팟 플릿사용에 대한 새로운 단계별 안내서

• 게임 세션 대기열 설계 (p. 124) – 스팟 플릿을포함하여 대기열 생성 및사용에 대한 새로운 디자인 도움말

• 업데이트된 주제:

컴퓨팅 리소스 선택 (p. 97)

사용자 지정 게임 빌드용 GameLift 플릿 배포 (p. 101)

서버 프로세스 종료 (p. 44)

Service APIReference(AWS SDK):

• 스팟 플릿을 활성화하기 위해 추가되는 새로운FleetType 파라미터:• CreateFleet• FleetAttributes• 이벤트

Server SDK:

• GetTerminationTime(C++) (p. 247)(신규)

GetTerminationTime(C#) (p. 263)(신규)

AWS SDK: 2018-02-15

Server SDK 3.2.1

버전309

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2018년 2월8일

새로운 기능

• FlexMatch 채우기 –를 사용하여 FlexMatch 진행 중인 해당 게임 세션에 새로운 플레이어를 투입할 수있습니다.

• 게임 세션 검색 – 사용자지정 게임 속성을 사용합니다.

개발자 안내서:

• 매치메이킹 프로세스 (p. 14) – 업데이트된FlexMatch 기능 개요

• FlexMatch를 사용하여 기존 게임 채우기 (p. 75) –새로운 방법 가이드

• 게임 세션 가져오기 (p. 48) – 사용자 지정게임 속성 업데이트

Service APIReference(AWS SDK):

• StartMatchBackfill(신규)• SearchGameSessions(신

규)• GameSession(신규)

Server SDK:

• StartMatchBackfill(C++) (p. 252)(신규)

StartMatchBackfill(C#) (p. 266)(신규)

StopMatchBackfill(C++) (p. 253)(신규)

StopMatchBackfill(C#) (p. 267)(신규)

AWS SDK: 2018-02-08

Server SDK 3.2.0

버전310

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2017년 9월3일

새로운 기능:

Amazon GameLift 플릿에 대한 VPC 피어링 – 이제 VPC피어링을 사용하여 AmazonGameLift 게임 서버와 AWS의 다른 리소스 간에 직접 프라이빗 연결을 설정할 수 있습니다.

개발자 안내서:

• AWS 리소스와의 네트워킹 (p. 7) – VPC 피어링과GameLift에서 VPC 피어링을 사용하는 방법에 대한 자세한 내용을 확인합니다.

• GameLift에 대한 VPC 피어링 (p. 160) – VPC 피어링을 설정하는 방법을 자세히 알아봅니다.

Service API Reference:

• VPC 피어링을 위한 새로운 API:• CreateVpcPeeringAuthorization• DescribeVpcPeeringAuthorizations• DeleteVpcPeeringAuthorization• CreateVpcPeeringConnection• DescribeVpcPeeringConnections• DeleteVpcPeeringConnection

• MatchmakingTicket– EndTime 및EstimatedWaitTime이추가되었습니다.

• DescribeMatchmaking 설명서가 수정되었습니다.이 작업을 사용하여 최대10개의 매치메이킹 티켓을검색할 수 있습니다.

AWS SDK: 2017-09-01

버전311

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2017년 8월16일

새로운 기능

GameLift FlexMatch – 이러한 사용자 지정 매치메이킹서비스를 사용하여 매치메이킹을 게임에 추가합니다.FlexMatch를 사용하면 팀 형식 및 플레이어 특성을 바탕으로 게임에 가장 적합한 규칙 세트를 만들 수 있습니다.

개발자 안내서:

• AmazonGameLiftFlexMatch의 작동 방식 (p. 12) – 의 주요기능 및 작동 방식에 관한FlexMatch 자세한 정보를확인합니다.

• FlexMatch 매치메이킹 추가 (p. 68) – 를 설정하고게임에 맞춤화하는 방법에관해 FlexMatch 자세히 알아봅니다.

Server SDK:

• GameLift Server API –FlexMatch 리소스를 관리하고 매치메이킹으로 새게임을 시작할 수 있는 새로운 API입니다.

AWS SDK: 2017-08-16

Server SDK 3.1.7

버전312

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2017년 5월16일

새로운 기능

• GameLiftMetrics가 이제Amazon CloudWatch에서지원됩니다. 여기에는 플릿 그룹에 대해 집계된 측정치로 작업하는 기능이포함됩니다.

• 플릿의 인스턴스 상에서게임 세션 활성화를 제한합니다.

업데이트:

• 자동 조정을 위한 추가 측정치를 활용합니다.

• 새 콘솔 UI를 사용하여 플릿 조정을 설정합니다.

개발자 안내서:

• Amazon GameLift 모니터링 (p. 172) – GameLift 콘솔 및 Cloudwatch에서 사용 가능한 지표 목록을 포함한 새로운 모니터링 섹션입니다.

• 사용자 지정 게임 빌드용 GameLift 플릿 배포 (p. 101) 및 GameLift 플릿 관리 (p. 108) – 플릿 구성 생성 및 업데이트에 관한 수정된 지침입니다.

• GameLift를 통해 플릿 용량 Auto-Scale (p. 119)– 플릿의 수동 및 auto-scaling에 관한 업데이트된지침입니다.

Service API Reference:

• 집계된 측정치를 활성화하기 위해 추가되는 새로운MetricGroups 파라미터:• CreateFleet• UpdateFleetAttributes• FleetAttributes

• RuntimeConfiguration –게임 세션 활성화 제한이추가되었습니다.

AWS SDK: 2017-05-16

버전313

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2017년 11월4일

새로운 기능:

• Amazon GameLift Local –로컬 수준에서 게임 통합을 테스트합니다.

• 게임 세션 대기열 – 지연시간, 비용 및 복원력을 고려하여 사용 가능한 최상의 호스팅 리소스와 함께게임 세션을 배치하기 위해 다중 플릿, 다중 리전 대기열을 만듭니다.

업데이트:

• Amazon GameLift ServiceAPI(AWS SDK의 일부)를변경하여 활용도를 높입니다.

개발자 안내서:

• 통합 테스트 (p. 53) –Amazon GameLift Local설정 및 사용에 대한 새로운 주제입니다.

• 대기열 생성 (p. 129) – 대기열 생성에 대한 업데이트된 주제 및 플레이어 지연 시간 정책에 대한 새로운 정보.

Service API Reference:

• PlayerLatencyPolicy(새 데이터 유형)

• PlacedPlayerSession(새데이터 유형)

• GameSessionPlacement– GameSessionId,IpAddress, Port,PlacedPlayerSessions가추가되었습니다.

• CreateGameSession –IdempotencyToken이GameSessionId를 대체합니다.

• GameSessionQueue –GameSessionQueueArn이추가되었습니다.

AWS SDK: 2017-04-11

GameLiftLocal 1.0.0

2017년 21월2일

새로운 기능

• Unreal Engine, Unity 및사용자 지정 C++ 및 C# 게임 엔진을 포함한 여러 게임 엔진 지원

• Server SDK에 대한 언어지원이 C#을 포함하도록확장됨

• 게임 세션 배치 및 교차 리전 대기열을 사용하여 새게임 세션 생성

• 게임 서버로의 직접 전달기능으로 사용자 지정 플레이어 데이터 지원

개발자 안내서:

• 관리형 GameLift를 사용한 게임 아키텍처 (p. 15)– 아키텍처 다이어그램.

• 게임 엔진 및 AmazonGameLift (p. 34) – 다양한게임 엔진에서 GameLift사용 도움말 및 UnrealEngine 및 Unity용 플러그인 설치 지침입니다.

• 다중 리전 대기열 사용 (p. 124) – 대기열에 대한 측정치 생성, 관리 및 추적에 대한 도움말입니다.

AWS SDK: 2017-02-21

Server SDK 3.1.5

버전314

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2016년 11월18일

새로운 기능

• 원격으로 GameLift 집합인스턴스에 액세스

개발자 안내서:

• 새로운 주제:• GameLift 플릿 인스

턴스에 원격으로 액세스 (p. 113) – GameLift인스턴스에 대한 액세스를 얻고 원격으로 연결하는 방법.

• GameLift 플릿 문제 디버깅 (p. 110) – 활성화에 실패한 새 집합의 문제 해결 팁.

Service API Reference:

• 원격 액세스:• GetInstanceAccess(신

규)• InstanceAccess(신규)• InstanceCredentials(신

규)

AWS SDK: 2016-11-18

버전315

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2016년 10월13일

새로운 기능

• 리소스 생성 보호• 인스턴스 데이터에 액세스

업데이트 및 수정

• Linux에 대한 추가 도움말.

개발자 안내서:

• 개정된 주제:• Amazon GameLift 작동

방식 (p. 3) – 리소스 보호에 대한 추가 설명과용량 취급에 대한 수정된 설명.

• Linux 관련 추가 도움말:

게임 빌드 파일 패키징하기 (p. 90) – Linux용스크립트를 설치합니다.

GameLift에 사용자지정 서버 빌드 업로드 (p. 89) – 새로운Linux 예제.

사용자 지정 게임 빌드용 GameLift 플릿 배포 (p. 101) – Linux에 대한 새로운 실행 경로 예제.

Service API Reference:

• CreateFleet 및UpdateFleetAttributes– 새로운ResourceCreationLimitPolicy파라미터

• ResourceCreationLimitPolicy(신규)

• CreateGameSession –CreatorId가 추가되었습니다.

• DescribeInstances(신규)

AWS SDK: 2016-10-13

버전316

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2016년 9월1일

새로운 기능

• Linux에서 게임 서버 실행가능

개발자 안내서:

• 새로운 주제:• Amazon GameLift

SDK (p. 23) – 지원 언어및 운영 체제를 포함하여 모든 GameLift SDK를 설명하는 참조 주제.

Service API Reference:

• 다음 항목에 새로운 OS 파라미터가 추가되었습니다.• upload-build (p. 89)(CLI

전용)• CreateBuild()• 빌드• FleetAttributes

AWS SDK: 2016-09-01

C++용 Server SDK: 3.1.0

버전317

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2016년 8월4일

새로운 기능

• 게임 세션 찾기• 사용자 지정 상태 확인

업데이트:

• 용량 할당에 대한 지원 확대(플릿 인스턴스당 여러프로세스)

• C++용 GameLift ServerSDK 다운로드 가능

• 게임 클라이언트 통합을 위한 모든 API가 이제AWS SDK에 포함되어 있습니다.

개발자 안내서:

• 새로운 주제:• C++용 GameLift Server

API reference (p. 244) –모든 참조 문서.

• GameLift 플릿에서 여러프로세스 실행 (p. 98) –용량 할당 및 여러 프로세스를 실행하도록 플릿을 구성하는 방법에 대한 기술 개요.

• 도구 및 리소스 (p. 27) –SDK 버전 호환성을 포함한 도구 및 리소스 종합 목록.

• 개정된 주제:• 플레이어의 게임 연결

방법 (p. 11) – 추가된 주제에서는 새로운 검색기능을 비롯해 게임 세션과 관련된 기능을 설명합니다.

• 게임 서버에 AmazonGameLift 추가 (p. 42)– 통합 단계를 C++용Server SDK 버전 3.0.7에 적용할 수 있도록 개정했습니다.

• 게임 클라이언트에Amazon GameLift 추가 (p. 47) – 통합 단계를C++용 AWS SDK에 적용할 수 있도록 개정했습니다.

Service API Reference:

• SearchGameSessions()(신규)

AWS SDK: 2016-08-04

C++용 Server SDK: 3.0.7

버전318

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2016년 6월28일

업데이트

• 새로운 서버 프로세스 상태 측정치

• 플릿 용량 할당 및 게임 서버 시작 설정을 위한 프로세스 개정

• 빌드 패키징 지침 개정

개발자 안내서:

• 개정된 주제:• 게임 빌드 파일 패키

징하기 (p. 90) – 게임빌드에서 GameLift가install.bat 파일을취급하는 방식을 반영하도록 설명을 수정했습니다.

• 사용자 지정 게임 빌드용 GameLift 플릿 배포 (p. 101) 및 – 플릿 생성 지침에서 실행 시간구성을 통한 용량 할당에 대해 다룹니다.

• 플릿 세부 정보 보기 (p. 166) 및 게임과 플레이어 세션에 대한 데이터 보기 (p. 169) – 콘솔 페이지 설명에 현재측정치 및 조정 탭을 반영했습니다.

• Amazon GameLift와게임 클라이언트/서버 상호 작용 (p. 51) –샘플의 콜백 함수 이름을 사용하고, 콜백은 게임 세션이 아닌게임 서버를 종료한다는 점을 분명히 하기위해 설명과 다이어그램 (p. 52)onProcessTerminate()을수정했습니다.

Service API Reference:

• 새로운 용량 할당:• CreateFleet() – 실

행 시간 구성이 추가되었습니다.

• DescribeRuntimeConfiguration(new)

• UpdateRuntimeConfiguration(new)

• 게임 서버 시작 프로세스:• GameSession – 포트

번호가 추가되었습니다.PlayerSession – 포트 번호가 추가되었습니다.

• 상태 측정치:

AWS SDK: 2016-06-28

버전319

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨• FleetUtilization

– 활성 서버 프로세스에새로운 숫자가 추가되었습니다.

버전320

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨

2016년 3월10일

새로운 기능

• Auto Scaling• 게임 세션 보호• 플릿 용량 제한

개발자 안내서:

• 새로운 주제:• GameLift를 통해

플릿 용량 Auto-Scale (p. 119) – Auto-scaling 정책을 설정하고관리하는 방법.

• GameLift 플릿에서 수동으로 용량 설정 (p. 118)– 집합에서 인스턴스 수를 변경하고 제한을 설정하는 방법.

• Amazon GameLift 작동방식 (p. 3) – GameLift가 가상 리소스 기반의게임 배포를 관리하는방법에 관한 기술 개요.

• 개정된 주제:• 사용자 지정 게임 빌드

용 GameLift 플릿 배포 (p. 101) – 게임 세션보호 및 안전 조정의 설정을 포함하도록 개정했습니다.

• 기타 변경사항:• Lumberyard-GameLift

자습서를 GameDevTutorials 리포지토리로이동했습니다.

Service API Reference:

• Auto-scaling:• PutScalingPolicy• DescribeScalingPolicies• DeleteScalingPolicy

• 게임 세션 보호:• DescribeGameSessionDetails• CreateFleet(개정됨)• UpdateFleetAttributes(개

정됨)• DescribeFleetAttributes(개

정됨)• UpdateGameSession(개

정됨)• 플릿 용량 제한:

• UpdateFleetCapacity(개정됨)

AWS SDK 2016-03-10

버전321

Amazon GameLift 개발자 안내서

날짜 변경 사항 설명서 업데이트 API 버전 업데이트됨• DescribeFleetCapacity(개

정됨)

2016년 2월9일

검색 시작 GameLift 서비스에 관한 개발자 안내서와 APIReference가 AWS에 게시되었습니다.

AWS SDK 2016-02-09

버전322

Amazon GameLift 개발자 안내서

AWS GlossaryFor the latest AWS terminology, see the AWS Glossary in the AWS General Reference.

버전323