View a markdown version of this page

컨테이너 플릿 배포 검증 및 문제 해결 - Amazon GameLift Servers

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

컨테이너 플릿 배포 검증 및 문제 해결

이 주제에서 배포라고 하는 플릿 배포는 Amazon GameLift Servers를 사용하여 컨테이너 플릿 인스턴스의 컨테이너를 새 컨테이너 그룹 정의 버전과 같은 플릿의 새 설정을 사용하는 컨테이너로 대체하는 프로세스입니다. 실행 중인 모든 컨테이너를 한 번에 교체하는 대신 배포는 먼저 새 컨테이너가 게임 세션을 호스팅할 수 있는지 확인한 다음 나머지를 점진적으로 교체하여 전체 플릿에 배포하기 전에 잘못된 변경 사항을 포착합니다. 컨테이너 플릿은 다음 세 가지 상황에서 배포를 시작합니다.

  • 컨테이너 그룹 정의로 플릿을 생성하는 경우. CreateContainerFleet 요청에 게임 서버 컨테이너 그룹 정의가 포함된 경우 플릿 생성은 플릿의 새 인스턴스에 컨테이너를 설치하는 배포를 시작합니다. 컨테이너 그룹 정의 없이 플릿을 생성하는 경우 게임 서버 컨테이너 그룹 정의를 추가할 때까지 인스턴스가 배포되지 않고 플릿에 배포가 없습니다.

  • 플릿의 컨테이너 그룹 정의 또는 기타 컨테이너 설정을 업데이트하는 경우. 예를 들어 새 게임 서버 컨테이너 그룹 정의 버전을 지정하는 경우 업데이트가 플릿이 실행하는 컨테이너를 변경하면가 배포를 UpdateContainerFleet 시작합니다. 이러한 설정을 변경하지 않는 업데이트는 배포를 시작하지 않습니다. 배포를 시작하는 설정에 대한 자세한 내용은 섹션을 참조하세요Amazon GameLift Servers 관리형 컨테이너 플릿 업데이트.

  • 활성 플릿에 위치를 추가하면 는 플릿의 구성된 컨테이너 그룹 정의를 사용하여 새 위치에서 배포를 Amazon GameLift Servers 시작합니다. 기존 위치는 재배포되지 않습니다. 다른 배포가 진행되는 동안에는 위치를 추가할 수 없습니다.

배포의 세부 정보를 보려면 FleetDeployment 객체를 반환DescribeFleetDeployment하는를 호출합니다. 여기에는 배포 중인 컨테이너 그룹 정의 버전 및 롤백 버전과 함께 배포 ID, 상태 및 구성이 포함됩니다. 플릿의 DeploymentDetails.LatestDeploymentId 속성은 가장 최근 배포를 식별합니다.

참고

배포는 관리형 컨테이너 플릿에만 적용됩니다.

배포 구성

배포의 DeploymentConfiguration는 플릿에서 배포가 진행되는 방식과 실패할 경우 발생하는 상황을 제어하는 규칙 세트입니다. 각 설정의 값과 기본값에 대한 자세한 내용은 Amazon GameLift Servers API 참조DeploymentConfiguration의 섹션을 참조하세요.

콘솔에서 플릿을 호출UpdateContainerFleet하거나 편집할 때 배포 구성을 설정합니다. CreateContainerFleet는 배포 구성을 수락하지 않으므로 플릿의 첫 번째 배포는 항상 기본값을 사용합니다.

가 배포를 Amazon GameLift Servers 검증하는 방법

배포가 시작되면는 Amazon GameLift Servers 먼저 각 플릿의 위치에서 게임 서버 컨테이너 그룹을 검증합니다. 플릿의 기존 용량의 작은 부분에서 새 컨테이너를 실행하고 정상인지 확인합니다. 새 게임 서버 컨테이너 그룹은 게임 서버 컨테이너가를 호출ProcessReady()하여 게임 세션을 호스팅할 준비가 되었다고 보고할 때 정상입니다.

이 초기 검증은 게임 서버 컨테이너 그룹을 확인합니다. 플릿이 인스턴스별 컨테이너 그룹 정의도 사용하는 경우는 게임 서버 그룹을 업데이트한 후 해당 그룹을 Amazon GameLift Servers 업데이트합니다.는 배포가 완료되기 전에 인스턴스별 그룹을 별도로 Amazon GameLift Servers 검사하며 게임 서버의 ProcessReady() 검사는 사용하지 않습니다.

가 대기를 Amazon GameLift Servers 중지하기 전에 새 게임 서버 컨테이너 그룹이 정상 상태가 되지 않으면 검증이 실패합니다. 일반적인 이유와 조사 방법에 대한 자세한 내용은 섹션을 참조하세요손상된 배포 디버깅.

검증에 실패하면는 배포의를 Amazon GameLift Servers 적용ImpairmentStrategy하고 배포 상태를 IMPAIRED (의 경우) 또는 ROLLBACK_IN_PROGRESS (의 경우MAINTAIN)로 설정합니다ROLLBACK. 위치에서 검증에 성공한 후에만 게임 서버를 실행하는 나머지 컨테이너가 Amazon GameLift Servers 대체됩니다.

검증 소요 시간

가 검증에 Amazon GameLift Servers 사용하는 용량이 보호된 게임 세션을 호스팅하는 경우 검증이 더 오래 걸립니다. 플릿의는 새 게임 세션에 대한 기본 보호를 NewGameSessionProtectionPolicy 결정합니다. 유효 값은 NoProtection 및 FullProtection입니다. 배포의는 배포가 해당 보호를 준수하는지 여부를 ProtectionStrategy 결정합니다. 유효 값은 WITH_PROTECTION 및 IGNORE_PROTECTION입니다.

플릿이 로 NewGameSessionProtectionPolicy 설정FullProtection되고 배포가 로 ProtectionStrategy 설정된 경우 WITH_PROTECTION는 보호된 게임 세션이 종료되도록 더 긴 검증 제한 시간을 Amazon GameLift Servers 허용합니다. 다른 조합에서는 더 짧은 제한 시간을 사용합니다.

중요

새 컨테이너가 정상 상태가 되지 않고 플릿이 WITH_PROTECTION 배포와 FullProtection 함께를 사용하는 경우 장애가 보고되기 전에 보호된 게임 세션이 종료될 때까지 배포 IN_PROGRESS 상태를 유지할 수 있습니다. 더 빠른 신호를 받으려면 새 컨테이너 이미지를 테스트하는 IGNORE_PROTECTION 동안를 사용하여 배포하거나 직접 배포를 취소합니다. 배포 취소에 대한 지침은 섹션을 참조하세요새 배포를 시작하여 배포 취소.

NewGameSessionProtectionPolicy가 인 플릿UpdateGameSession에서를 사용하여 개별 게임 세션을 보호하는 경우 NoProtectionAmazon GameLift Servers는 해당 세션에 대한 대기 시간을 연장하지 않습니다. 이러한 게임 세션이 제시간에 종료되지 않으면 새 구성이 작동하더라도 검증에 실패할 수 있습니다.

배포 상태 추적

Amazon GameLift Servers 콘솔에서 배포를 추적하려면 플릿을 열고 배포 탭을 선택합니다. AWS Command Line Interface (AWS CLI)로 추적하려면 list-fleet-deployments를 사용하여 배포 ID를 찾은 다음를 사용하여 단일 배포의 describe-fleet-deployment 세부 정보를 확인합니다.

배포 상태 값과 각 값의 의미DeploymentStatus에 대한 자세한 내용은 Amazon GameLift Servers API 참조의 섹션을 참조하세요.

손상된 배포 디버깅

손상된 배포는 검증 중에 새 컨테이너가 정상 상태가 되지 않았음을 의미합니다. 컨테이너가 종료되거나 시작에 실패했기 때문에 대기를 Amazon GameLift Servers 중지하기 ProcessReady() 전에 라는 게임 서버 컨테이너가 호출되지 않았습니다. 원인은 일반적으로 컨테이너 이미지 또는 게임 서버에서 발생합니다. 컨테이너가 종료된 이유 또는 게임 서버가 준비 상태를 보고하지 않은 이유를 알아봅니다.

플릿 이벤트 로그 검토

플릿 이벤트 로그는 배포 중에 Amazon GameLift Servers 관찰된 내용을 기록합니다. 콘솔의 플릿 이벤트 탭에서 보거나를 호출합니다describe-fleet-events. 다음 이벤트 코드는 실패한 배포와 관련이 있습니다.

  • GAME_SERVER_CONTAINER_GROUP_CRASHED 및 PER_INSTANCE_CONTAINER_GROUP_CRASHED - 컨테이너 그룹이 종료되었거나 시작에 실패했습니다. Amazon GameLift Servers에 컨테이너의 종료 코드가 있는 경우 이벤트 메시지에 코드가 포함됩니다.

  • GAME_SERVER_CONTAINER_GROUP_REPLACED_UNHEALTHY 및 INSTANCE_REPLACED_UNHEALTHY - 컨테이너 그룹 또는 정상이 아닌 인스턴스를 Amazon GameLift Servers 대체했습니다. 배포에 실패하는 동안 플릿의 위치에서 반복될 수 있습니다.

  • SERVER_PROCESS_MISCONFIGURED_CONTAINER_PORT - 게임 서버 컨테이너가 컨테이너 그룹 정의에 선언된 포트와 일치하지 않는 포트를 사용했습니다.

  • LOCATION_STATE_UPDATING 및 LOCATION_STATE_ACTIVE - 각 위치의 배포를 괄호로 묶어서 다른 이벤트를 생성한 배포와 정렬하는 데 도움이 됩니다.

  • COMPUTE_LOG_UPLOAD_FAILED - 컨테이너에 대한 로그 수집이 작동 중지되었으므로 해당 컨테이너의 로그가 불완전하거나 누락되었을 수 있습니다.

컨테이너 로그 읽기

가 각 컨테이너의 표준 출력인 CLOUDWATCH (기본값), S3또는를 Amazon GameLift Servers 전송하는 컨테이너 플릿의 LogConfiguration 세트입니다NONE. 배포에 실패할 때 컨테이너 출력을 사용할 수 S3 있도록 CLOUDWATCH 또는 로 설정합니다. 예를 들어 컨테이너의 진입점이 이미지에 없는 파일을 참조하기 때문에 게임 서버가 실행되기 전에 컨테이너가 실패하면이 출력이 실패의 유일한 레코드입니다. 컨테이너 로깅에 대한 자세한 내용은 섹션을 참조하세요로깅 차이: 관리형 EC2 플릿 대 컨테이너 플릿 비교.

손상된 컨테이너에 연결

MAINTAIN 장애 전략을 사용하여를 배포한 경우가 Amazon GameLift Servers 보관한 컨테이너에 연결하고 직접 검사할 수 있습니다. 이를 사용하여 파일 권한을 확인하고, 이미지에 실제로 포함된 파일을 확인하고, 게임 서버 실행 파일을 수동으로 실행하여 보고하는 내용을 확인할 수 있습니다. 컨테이너에 연결하는 방법에 대한 지침은 섹션을 참조하세요컨테이너에 연결.

일반적인 배포 문제

다음은 일반적인 원인과 함께 실패한 배포 또는 느린 배포에서 흔히 나타나는 증상입니다.

컨테이너가 반복적으로 즉시 시작되고 종료됩니다.

컨테이너의 진입점을 실행할 수 없는 경우 다음을 확인합니다.

  • 시작 스크립트와 게임 서버 실행 파일이 이미지에 실행 파일로 표시되어 있는지 확인합니다.

  • 실행 파일의 CPU 아키텍처가 플릿의 인스턴스 유형과 일치하는지 확인합니다.

  • 이미지에 실행 파일에 필요한 인터프리터와 공유 라이브러리가 포함되어 있는지 확인합니다.

실행할 Amazon GameLift Servers 수 있는 이미지 빌드에 대한 자세한 내용은 섹션을 참조하세요Amazon GameLift Servers용 컨테이너 이미지 빌드.

배포 속도가 느리지만 아무것도 실패하지 않습니다.

WITH_PROTECTION 배포는 검증 중과 플릿의 컨테이너를 교체할 때 보호된 게임 세션이 종료될 때까지 기다립니다. 긴 배포를 실패로 처리하기 전에 플릿의 활성 게임 세션을 확인합니다. 검증 대기 시간에 대한 자세한 내용은 섹션을 참조하세요검증 소요 시간.

새 배포를 시작하여 배포 취소

배포를 취소하고 플릿을 이전 구성으로 되돌리려면 콘솔에서를 호출UpdateContainerFleet하거나 플릿을 편집하여 변경 사항을 되돌리는 새 배포를 시작합니다. 가장 일반적인 경우는 새 컨테이너 그룹 정의 버전으로, 다음 절차가 되돌립니다.는 진행 중인 배포에서 마지막으로 활성 상태였을 때 플릿이 사용한 버전을 RollbackGameServerBinaryArn 및 로 Amazon GameLift Servers 기록RollbackPerInstanceBinaryArn하므로 어떤 버전으로 돌아갈지 결정할 필요가 없습니다. 배포에서 로그 구성 또는 연결 포트 범위와 같은 다른 설정도 변경한 경우 동일한 UpdateContainerFleet 요청에서 다시 설정합니다.

시작하기 전에 계정에 AWS CLI 대한를 구성하고 플릿의 홈을 식별합니다 AWS 리전. 이 절차를 수행하려면 진행 중인 배포와 복원할 이전 컨테이너 그룹 정의 버전이 필요합니다. list-fleet-deployments를 사용하여 배포 ID를 찾습니다. 지침은 배포 상태 추적 섹션을 참조하세요.

명령에서 fleet-id를 플릿 ID로, deployment-id를 진행 중인 배포 ID로, fleet-home-region을 플릿 홈으로 바꿉니다 AWS 리전.

진행 중인 배포를 이전 컨테이너 버전으로 바꾸려면(AWS CLI)
  1. 다음 AWS CLI 명령을 사용하여 반환할 버전을 가져옵니다.

    aws gamelift describe-fleet-deployment \ --fleet-id fleet-id \ --deployment-id deployment-id \ --region fleet-home-region

    응답에서는 플릿이 마지막으로 활성화되었을 때 사용한 게임 서버 컨테이너 그룹 정의 버전을 RollbackGameServerBinaryArn 보유합니다. 플릿에 인스턴스별 컨테이너 그룹이 있는 경우는 해당 버전을 RollbackPerInstanceBinaryArn 보유합니다.

  2. 다음 AWS CLI 명령을 사용하여 해당 버전으로 새 배포를 시작합니다. rollback-game-server-cgd-arn을 1단계의 RollbackGameServerBinaryArn 값으로 바꿉니다. 플릿에 인스턴스별 컨테이너 그룹이 있는 경우 도 RollbackPerInstanceBinaryArn 값과 --per-instance-container-group-definition-name 함께 전달합니다.

    aws gamelift update-container-fleet \ --fleet-id fleet-id \ --game-server-container-group-definition-name rollback-game-server-cgd-arn \ --region fleet-home-region
  3. 이전 배포가 CANCELLED 상태를 보고하고 완료 COMPLETE 시 새 배포가 보고되는지 확인합니다.

참고

이러한 방식으로 배포를 취소하는 것은 즉시 중지되지 않습니다. 새 배포는 검증을 포함하여 다른 배포와 동일한 단계를 거치므로 플릿을 해결하는 데 다소 시간이 걸립니다. 플릿이 이전에 성공적으로 실행된 버전은 일반적으로 빠르게 검증됩니다.

자세한 내용은 다음 항목을 참조하세요.