View a markdown version of this page

컨테이너 플릿에서 컨테이너 검색 - Amazon GameLift Servers

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

컨테이너 플릿에서 컨테이너 검색

Amazon GameLift Servers 컨테이너 플릿에서 각 인스턴스는 여러 컨테이너를 실행할 수 있습니다. 예를 들어 게임 서버 컨테이너 그룹의 여러 복제본을 실행할 수 있습니다. 인스턴스 전체의 공유 서비스를 제공하는 인스턴스당 컨테이너 그룹을 실행할 수도 있습니다.

컨테이너 검색 서버를 사용하면 게임 서버 프로세스가 동일한 인스턴스에서 실행되는 다른 컨테이너를 검색할 수 있습니다. 그런 다음 컨테이너는 인스턴스의 로컬 네트워크를 통해 컨테이너 그룹 정의 간에 서로 통신할 수 있습니다.

검색 서버는 경량 HTTP 서비스입니다.는 모든 컨테이너 플릿 인스턴스에서 로컬로 이를 Amazon GameLift Servers 실행합니다. 서비스는 해당 인스턴스에서 실행되는 각 컨테이너에 대해 다음과 같은 네트워크 정보를 제공합니다.

  • 컨테이너 그룹 정의에서 정의하는 컨테이너 이름입니다.

  • 컨테이너의 고유 식별자입니다.

  • 인스턴스에 있는 컨테이너의 로컬 IP 주소입니다.

  • 컨테이너 그룹 유형으로, GAME_SERVER (게임 서버 컨테이너 그룹의 복제본) 또는 PER_INSTANCE (인스턴스별 컨테이너 그룹)입니다.

참고

컨테이너 검색 서버는 관리형 컨테이너 플릿에서만 사용할 수 있습니다.

컨테이너 네트워크 정보 검색

컨테이너 네트워크 정보는 서버 Amazon GameLift Servers SDK를 사용하는 게임 서버 프로세스에서 검색하거나 HTTP를 통해 직접 검색 서버를 호출하여 컨테이너에서 검색할 수 있습니다.

서버 SDK를 사용하여 컨테이너 정보 검색

게임 서버 프로세스에서 Amazon GameLift Servers 서버 SDK를 사용하는 경우 ListContainersNetworkInfo() 작업을 호출하여 컨테이너 네트워크 정보를 검색합니다. 서버 SDK는 검색 서버를 찾아 자동으로 요청합니다. 작업은 동일한 인스턴스에서 실행되는 모든 컨테이너에 대한 네트워크 정보를 반환합니다. 다른 컴퓨팅 유형에서 작업은 지원되지 않는 컴퓨팅 유형 오류를 반환합니다.

ListContainersNetworkInfo()는 다음 언어에 대해 서버 SDK 버전 5.5 이상에서 사용할 수 있습니다.

이 작업은 Unreal Engine 및 Unity용 Amazon GameLift Servers 플러그인에서도 사용할 수 있습니다.

검색 서버를 직접 호출하여 컨테이너 정보 검색

인스턴스당 컨테이너와 같은 일부 컨테이너는 서버 SDK를 사용하지 않습니다. 이러한 컨테이너는 HTTP를 통해 직접 검색 서버를 호출합니다.는 이러한 컨테이너에서 GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1 환경 변수를 Amazon GameLift Servers 미리 설정합니다. 이 변수는 API 버전 경로를 포함하여 검색 서버의 주소를 보유하며 게임 서버 및 인스턴스별 컨테이너 그룹 정의 모두에 설정됩니다.

컨테이너 네트워크 정보를 검색하려면이 엔드포인트에 HTTP GET 요청을 보냅니다. 다음 예에는 curl가 사용됩니다.

curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"

검색 서버는 인스턴스에서 실행되는 각 컨테이너에 대해 하나의 항목이 있는 JSON 배열을 반환합니다.

[ { "containerName": "game-server", "ipAddress": "172.17.0.3", "containerId": "b896159563df43736e5e93ad0547a24fa572648d55b70c70747642afca398b18", "containerGroupType": "GAME_SERVER" }, { "containerName": "per-instance", "ipAddress": "172.17.0.4", "containerId": "3c239ae037aec28bb42212ffa2b9e02524c0c4c361db9bc31dd4c5aecc0b7943", "containerGroupType": "PER_INSTANCE" } ]

요청 속도 제한

검색 서버는 인스턴스의 각 컨테이너를 초당 10개의 요청으로 제한합니다. 이 제한을 초과하는 요청을 제한하고 오류를 반환합니다. 이 한도를 유지하려면 시작 시 검색 서버를 한 번 쿼리합니다. 또는 인스턴스 보기를 새로 고쳐야 하는 경우에만 쿼리합니다. 검색 서버를 반복적으로 쿼리하는 대신 결과를 컨테이너에 캐시하고 캐시된 값을 재사용합니다.

캐시를 정기적으로 새로 고쳐 최신 상태로 유지합니다. 컨테이너가 충돌하거나 종료되면(예: 게임 세션이 종료될 때) 컨테이너의 로컬 IP 주소가 변경될 수 있습니다.

예: 게임 서버 컨테이너에서 지표 수집

검색 서버의 일반적인 용도는 인스턴스의 로컬 네트워크를 벗어나지 않고 동일한 인스턴스의 컨테이너 간에 원격 측정을 전송하는 것입니다. 여러 게임 서버 컨테이너(GAME_SERVER)와 인스턴스당 단일 컨테이너()를 실행하는 플릿을 생각해 보세요PER_INSTANCE. 인스턴스별 컨테이너는 인스턴스의 모든 게임 서버가 공유하는 지표 수집기를 실행합니다.

푸시 모델 또는 풀 모델을 사용하여 지표 수집을 구현할 수 있습니다.

  • 푸시(지표 방출) - 시작 시 각 게임 서버 컨테이너가를 호출합니다ListContainersNetworkInfo(). 컨테이너는 PER_INSTANCE 컨테이너 그룹 유형의 항목을 찾습니다. 그런 다음 해당 항목에서 로컬 IP 주소를 읽습니다. 게임 서버는 인스턴스의 로컬 네트워크를 통해 인스턴스당 수집기로 지표를 직접 전송합니다.

  • 풀(지표 스크레이핑) - 역방향 접근 방식도 작동합니다. 인스턴스당 컨테이너는 서버 SDK를 사용하지 않으므로 검색 서버 엔드포인트를 직접 호출합니다. 인스턴스에 있는 모든 GAME_SERVER 컨테이너의 IP 주소를 찾습니다. 그런 다음 각 게임 서버 컨테이너가 로컬 네트워크를 통해 노출하는 지표 엔드포인트를 스크레이프합니다.

두 경우 모두 통신은 인스턴스의 로컬 네트워크에 유지됩니다. 각 컨테이너는 반복적으로가 아니라 가끔씩만 검색 서버를 쿼리합니다.