언리얼 엔진 - 게임 프로젝트/AWS GameLift를 활용한 데디케이트 FPS 프로젝트

Game Sessions - 3) 플릿 ID 상세정보 순회 + GameSession 상세 정보 조회

monstro 2026. 5. 22. 11:37
728x90
반응형

- 개요

이전에 생성한 FindOrCreateGameSession 람다를 수정한다

우선, 반환된 플릿 ID들의 상세정보순회할 수 있도록 코드 구조를 변경한다

또, DescribeGameSessionsCommand 명령어를 추가하여

현재 활성화되어 있거나 과거에 생성GameSession의 상세 정보를 조회하는 기능을 추가한다

 

- 절차

FindOrCreateGameSession 람다에 대한 정책 수정

 

FindOrCreateGameSession 람다에 적용한 정책을 위와 같이 수정한다

GameLift Servers 서비스의 DescribeGameSessions API를 사용할 수 있도록 추가한다

 

import {GameLiftClient, ListFleetsCommand, DescribeFleetAttributesCommand, DescribeGameSessionsCommand} from "@aws-sdk/client-gamelift";

export const handler = async (event) => {
  const gameLiftClient = new GameLiftClient({region : process.env.REGION});

  try {
    const listFleetsInput = {
      Limit: 10
    };
    const listFleetsCommand = new ListFleetsCommand(listFleetsInput);
    const listFleetsResponse = await gameLiftClient.send(listFleetsCommand);
    const fleetIds = listFleetsResponse.FleetIds;

    const describeFleetAttributesInput = {
      FleetIds : fleetIds,
      Limit: 10
    };

    const describeFleetAttributesCommand = new DescribeFleetAttributesCommand(describeFleetAttributesInput);
    const describeFleetAttributesResponse = await gameLiftClient.send(describeFleetAttributesCommand);

    const fleetAttributes = describeFleetAttributesResponse.FleetAttributes;

    let fleetId;
    for (const fleetAttribute of fleetAttributes){
      if(fleetAttribute.Status === "ACTIVE"){
        fleetId = fleetAttribute.FleetId;
        break;
      }
    }

    const describeGameSessionsInput = {
      FleetId : fleetId,
      Limit : 10,
      Location : "custom-Home-LocalPC",  // 테스트용 Anywhere 로케이션(추후 EC2 Managed 로케이션으로 수정)
      StatusFilter : "ACTIVE"
    };

    const describeGameSessionsCommand = new DescribeGameSessionsCommand(describeGameSessionsInput);
    const describeGameSessionsResponse = await gameLiftClient.send(describeGameSessionsCommand);

    return describeGameSessionsResponse;

  } catch(error){
    return error;
  }

  
};

 

이후 람다의 코드를 위와 같이 수정한다

수정 사항은 다음과 같다

  • DescribeFleetAttributes API 실행 결과에서 플릿들의 상세 속성 정보가 담긴 배열fleetAttributes 변수로 저장
  • 플릿들의 상세 정보를 순회하면서 "ACTIVE" 상태의 플릿 IDfleetId 변수에 저장
  • fleetId 변수 + 특정 로케이션 +"ACTIVE" 상태 필터를 사용해 현재 진행 중인 게임 세션 목록을 최대 10개 조회
  • DescribeGameSessionsCommand API를 사용하여 조회된 게임 세션 목록 정보를 반환

 

- 실행

# 1) 토큰 발급
aws gamelift get-compute-auth-token ^
--fleet-id "플릿 ID" ^
--compute-name "컴퓨팅 자원 이름" ^
--region "사용중인 리전" ^
--profile "프로필 이름" // 해당 옵션은 필요한 경우 사용

# 2) 발급된 토큰을 사용하여 서버 exe 파일 실행
"경로\Build\Build_1\운영체제Server\프로젝트Server.exe" -log -glAnywhere ^
-glAnywhereAuthToken="발급된토큰" ^
-glAnywhereHostId="컴퓨팅 자원 이름" ^
-glAnywhereFleetId="플릿 ID" ^
-glAnywhereWebSocketUrl="리전에 따른 소켓 URL" ^
-port=7777 // 기본 포트번호

# 3) GameSession 생성(Anywhere)
aws gamelift create-game-session ^
--fleet-id "플릿 ID" ^
--name "생성할 게임세션 이름" ^
--maximum-player-session-count "최대 플레이어 수" ^
--region "해당 플릿의 리전" ^
--location "컴퓨팅 자원 이름" ^
--profile "프로필 이름" // 해당 옵션은 필요한 경우 사용

 

위와 같이 AWS CLI에 입력하여 Anywhere GameSession을 실행한다

 

 

람다의 실행 결과는 위와 같다

728x90
반응형