Amazon GameLift 플릿 문제 디버깅 - 아마존 GameLift

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon GameLift 플릿 문제 디버깅

이 주제에서는 Amazon GameLift 관리형 호스팅 솔루션의 플릿 구성 문제에 대한 지침을 제공합니다. 추가적인 문제 해결을 위해 플릿이 활성화되면 플릿 인스턴스에 원격으로 액세스할 수 있습니다. Amazon GameLift 플릿 인스턴스에 원격으로 연결 섹션을 참조하세요.

플릿 생성 문제

플릿이 생성되면 Amazon GameLift 서비스는 각 플릿 위치에 새 인스턴스를 배포하고 게임 서버를 실행할 수 있도록 준비하는 워크플로를 시작합니다. 자세한 설명은 Amazon GameLift 플릿 생성 작동 방식 섹션을 참조하세요. 플릿은 활성 상태에 도달할 때까지 게임 세션과 플레이어를 호스팅할 수 없습니다. 이 섹션에서는 플릿이 활성화되지 못하게 하는 가장 일반적인 문제에 대해 설명합니다.

다운로드 및 검증

이 단계에서는 추출된 빌드 파일에 문제가 있거나 설치 스크립트가 실행되지 않거나 혹은 런타임 구성에 지정된 실행 파일이 빌드 파일에 포함되지 않아 플릿 생성이 실패할 수 있습니다. Amazon GameLift는 이러한 각각의 문제와 관련된 로그를 제공합니다.

만약 로그가 이 문제를 발견하지 못한다면 문제는 내부 서비스 오류일 가능성이 있습니다. 이 경우, 플릿을 다시 생성해보십시오. 문제가 지속된다면 (파일이 손상되었을 수도 있으니) 게임 빌드의 업로드를 다시 고려하십시오. Amazon GameLift 지원에 문의하거나 포럼에 질문을 게시해도 됩니다.

빌드

빌드 단계 동안의 실패 문제는 대부분 게임 빌드 파일 및/혹은 설치 스크립트 문제입니다. Amazon GameLift에 업로드할 때 게임 빌드 파일을 적절한 운영 체제가 실행 중인 시스템에 설치할 수 있는지 확인하십시오. 기존 개발 환경이 아닌 건전한 OS 설치를 사용했는지 확인하십시오.

활성화하는 중

대부분의 일반 플릿 생성 문제는 활성화 중 단계 동안 발생합니다. 이 단계에서는 게임 서버 실행 가능성, 런타임 구성 설정, Server SDK를 사용하여 Amazon GameLift 서비스와 상호 작용하는 게임 서버 기능을 비롯해 여러 요소에 대한 테스트가 진행됩니다. 플릿 활성화 단계에서 발생하는 공통적인 문제는 다음과 같습니다.

서버 프로세스를 시작하지 못합니다.

먼저, 플릿의 런타임 구성에서 실행 경로와 선택적 시작 파라미터를 올바르게 설정했는지 확인합니다. 플릿 세부 정보 페이지의 세부 정보 섹션을 사용하거나 AWS CLI 명령 describe-runtime-configuration을 호출하여 플릿의 현재 런타임 구성을 확인할 수 있습니다. 런타임 구성이 올바르게 보인다면 게임 빌드 파일 및/또는 설치 스크립트 문제를 확인합니다.

서버 프로세스가 시작되지만 플릿을 활성화할 수 없습니다.

서버 프로세스가 시작되고 계속 성공적으로 실행되지만 플릿이 활성 상태로 변경되지 않는 경우, 서버 프로세스가 Amazon GameLift에 게임 세션을 호스팅할 준비가 되었음을 알리는 데 실패했기 때문일 가능성이 높습니다. 게임 서버가 Server API 작업 ProcessReady()를 올바르게 호출하고 있는지 확인합니다(서버 프로세스 초기화 참조).

VPC 피어링 연결 요청 실패

VPC 피어링 연결로 생성되는 플릿은(새 플릿으로 VPC 피어링을 설정하려면 참조) 이 활성화 단계에서 VPC 피어링이 실행됩니다. 어떤 이유로든 VPC 피어링에 실패할 경우 새 플릿이 활성 상태로 바뀌지 못합니다. describe-vpc-peering-connections를 호출하여 피어링 요청이 성공했는지 여부를 추적할 수 있습니다. 유효한 VPC 피어링 권한 부여가 존재하는지 확인해야 합니다(describe-vpc-peering-authorizations). 권한 부여는 24시간 동안만 유효하기 때문입니다.

서버 프로세스 문제

서버 프로세스가 시작되었지만 곧 실패했거나 상태 불량을 보고합니다.

게임 빌드와 관련된 문제 외에, 인스턴스에서 동시에 너무 많은 서버 프로세스를 실행하려고 할 경우에도 이런 결과가 발생할 수 있습니다. 동시에 실행 가능한 최적 프로세스 수는 인스턴스 유형과 게임 서버의 리소스 요구 사항에 따라 다릅니다. 성능이 개선되는지 보려면 플릿의 런타임 구성에 설정되어 있는 동시 프로세스 수를 줄여보십시오. Amazon GameLift 콘솔(플릿의 용량 할당 설정 편집)을 사용하거나 AWS CLI 명령 update-runtime-configuration을 호출하여 플릿의 런타임 구성을 변경할 수 있습니다.

플릿 삭제 문제

최대 인스턴스 카운트 때문에 플릿을 종료할 수 없습니다.

이 오류 메시지는 삭제되어 허용되면 안 되는 플릿의 인스턴스가 여전히 활성 상태임을 나타냅니다. 먼저 플릿의 활성 인스턴스를 0으로 축소해야 합니다. 플릿의 인스턴스 카운트를 “0”으로 직접 설정한 후 스케일 다운이 적용될 때까지 기다립니다. 수동 설정에 방해가 되므로 자동 조정(auto-scaling) 기능을 해제해야 합니다.

VPC 작업이 허용되지 않습니다.

이 문제는 특히 VPC 피어링 연결을 생성한 플릿에만 적용됩니다(Amazon GameLift용 VPC 피어링 참조). 이 시나리오는 플릿 삭제 프로세스에 플릿의 VPC 및 모든 VPC 피어링 연결 삭제도 포함되기 때문에 발생합니다. 먼저 Amazon GameLift Service API CreateVpcPeeringAuthorization()를 호출하거나 AWS CLI 명령 create-vpc-peering-authorization을 사용하여 승인을 받아야 합니다. 권한을 받은 후에 플릿을 삭제할 수 있습니다.

Realtime 서버 플릿 문제

좀비 게임 세션: 게임을 시작하고 실행하지만 절대로 끝나지 않습니다.

이 문제가 다음 시나리오 중 하나처럼 관찰될 수 있습니다.

  • 플릿의 Realtime 서버에서 스크립트 업데이트를 픽업하지 않습니다.

  • 플릿이 최대 용량에 빠르게 도달하고, 플레이어 활동(예: 새로운 게임 세션 요청)이 감소해도 축소되지 않습니다.

대개 Realtime 스크립트에서 processEnding 호출에 실패한 것이 원인입니다. 플릿이 활성화되고 게임 세션이 시작되더라도 이를 중지할 방법이 없습니다. 따라서 게임 세션을 실행 중인 Realtime 서버가 비워지지 않아 새로운 세션을 시작하지 못하고 새로운 Realtime 서버가 확보될 때만 새로운 게임 세션이 시작될 수 있습니다. 그리고 Realtime 스크립트 업데이트는 이미 실행 중인 게임 세션에 영향을 주지 않습니다.

이를 방지하기 위해서는 processEnding 호출을 시작하는 메커니즘이 스크립트에 있어야 합니다. Realtime 서버 스크립트 예제에서 설명한 것처럼 한 가지 방법은 일정 시간 동안 플레이어가 연결되지 않을 경우 스크립트에서 현재 게임 세션을 종료하도록 유휴 세션 제한 시간을 프로그래밍하는 것입니다.

그러나 이 시나리오가 발생할 경우 Realtime 서버의 중단을 막는 두 가지 차선책이 있습니다. 그 방법은 Realtime 서버 프로세스 또는 기본 플릿 인스턴스를 다시 시작하게 하는 것입니다. 이 경우 GameLift가 게임 세션을 자동으로 종료합니다. Realtime 서버가 비워지면 실시간 스크립트 최신 버전을 사용하여 새로운 게임 세션을 시작할 수 있습니다.

이 문제의 정도에 따라 두 가지 방법으로 해결할 수 있습니다.

  • 전체 플릿을 축소합니다. 이 방법은 간단하면서 광범위한 영향을 줍니다. 플릿을 제로 인스턴스로 숙소하고, 플릿이 완전히 축소될 때까지 기다렸다가 다시 확장합니다. 그러면 기존 게임 세션이 모두 지워져 가장 최근에 업데이트된 Realtime 스크립트로 새로 시작할 수 있습니다.

  • 인스턴스에 원격으로 액세스하여 프로세스를 다시 시작합니다. 이 방법은 해결할 프로세스가 적을 경우에 좋습니다. 이미 인스턴스에 로그인한 경우에는(예: 테일 로그 또는 디버깅을 위해) 이 방법이 가장 빠른 방법일 수 있습니다. Amazon GameLift 플릿 인스턴스에 원격으로 연결 섹션을 참조하세요.

Realtime 스크립트에서 processEnding을 호출하는 방법을 포함시키지 않을 경우 플릿이 활성화되어 게임 세션이 시작되어도 두 가지 어려운 상황이 발생할 수 있습니다. 첫째, 실행 중인 게임 세션이 끝나지 않습니다. 따라서 이 게임 세션을 실행 중인 서버 스포세스가 결코 비워지지 않아 새 게임 세션을 시작하지 못합니다. 둘째, Realtime 서버가 스크립트 업데이트를 픽업하지 않습니다.