Amazon GameLift 플릿 인스턴스 원격 액세스 - Amazon GameLift

Amazon GameLift 플릿 인스턴스 원격 액세스

활성 Amazon GameLift 관리형 EC2 플릿의 모든 인스턴스에 연결할 수 있습니다. 인스턴스에 원격으로 액세스하는 일반적인 이유는 다음과 같습니다.

  • 게임 서버 통합 문제를 해결합니다.

  • 런타임 구성 및 기타 플릿별 설정을 미세 조정합니다.

  • 로그 업데이트 추적과 같은 실시간 게임 서버 활동을 파악합니다.

  • 실제 플레이어 트래픽을 사용하여 벤치마킹 도구를 실행합니다.

  • 게임 세션 또는 게임 서버 프로세스와 관련된 특정 문제를 조사합니다.

인스턴스에 연결할 때 다음과 같은 잠재적 문제를 고려해야 합니다.

  • 활성 플릿의 모든 인스턴스에 연결할 수 있습니다. 일반적으로 활성화를 진행 중이거나 오류 상태인 플릿과 같은 비활성 플릿에는 연결할 수 없습니다 (해당 플릿은 일시적 가용성 제한 가능성 있음). 플릿 활성화 문제에 대한 도움말은 Amazon GameLift 플릿 문제 디버깅 섹션을 참조하세요.

  • 활성 인스턴스에 연결해도 인스턴스의 호스팅 활동에는 영향을 주지 않습니다. 인스턴스는 런타임 구성을 기반으로 서버 프로세스를 계속 시작하고 중지합니다. 이를 통해 게임 세션을 활성화하고 실행합니다. 스케일 다운 이벤트 또는 기타 이벤트에 대한 응답으로 인스턴스가 종료될 수 있습니다.

  • 인스턴스의 파일 또는 설정을 변경하면 인스턴스의 활성 게임 세션과 연결된 플레이어에 영향을 미칠 수 있습니다.

다음 지침은 AWS 명령줄 인터페이스(CLI)를 사용하여 인스턴스에 원격으로 연결하는 방법을 설명합니다. Amazon GameLift 서비스 API 참조에 설명된 대로 AWS SDK를 사용하여 프로그래밍 방식으로 호출할 수도 있습니다.

인스턴스 데이터 수집

Amazon GameLift 관리형 EC2 플릿 인스턴스에 연결하려면 다음 정보가 필요합니다.

  • 연결할 인스턴스의 ID. 인스턴스 ID 또는 ARN을 사용할 수 있습니다.

  • 인스턴스에서 사용 중인 Amazon GameLift 서버 SDK 버전. 서버 SDK는 인스턴스에서 실행 중인 게임 빌드와 통합됩니다.

다음 지침은 AWS CLI를 사용하여 이러한 작업을 완료하는 방법을 설명합니다. 연결하려는 인스턴스의 플릿 ID를 알아야 합니다.

  1. 컴퓨팅 이름을 가져옵니다. 플릿의 모든 활성 컴퓨팅 목록을 가져옵니다. 플릿 ID 또는 ARN으로 list-compute를 호출합니다. 단일 위치 플릿의 경우 플릿 식별자만 지정합니다. 다중 위치 플릿의 경우 플릿 식별자와 위치를 지정합니다. 관리형 EC2 플릿을 사용하면 list-compute가 플릿 인스턴스 목록을 반환하며 속성 ComputeName은 인스턴스 ID입니다. 액세스하려는 컴퓨팅을 찾습니다.

    요청

    aws gamelift list-compute \ --fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa" \ --location ""sa-east-1"

    응답

    { "ComputeList": [ { "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "FleetArn": "arn:aws:gamelift:us-west-2::fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "ComputeName": "i-0abc12d3e45fa6b78", "IpAddress": "00.00.000.00", "DnsName": "b08444ki909kvqu6zpw3is24x5pyz4b6m05i3jbxvpk9craztu0lqrbbrbnbkks.uwp57060n1k6dnlnw49b78hg1rw4rcz7.us-west-2.amazongamelift.com", "ComputeStatus": "Active", "Location": "sa-east-1", "CreationTime": "2023-07-09T22:51:45.931000-07:00", "OperatingSystem": "AMAZON_LINUX_2023", "Type": "c4.large" } ] }
  2. 서버 SDK 버전을 찾습니다. 이 정보를 보려면 플릿에 배포된 빌드를 조회해야 합니다. 서버 SDK 버전은 빌드 속성입니다.

    1. 플릿 ID 또는 ARN으로 describe-fleet-attributes를 호출하여 플릿의 빌드 ID 및 ARN을 가져옵니다.

    2. 빌드 ID 또는 ARN으로 describe-build를 호출하여 빌드의 서버 SDK 버전을 가져옵니다.

      예:

      요청

    aws gamelift describe-fleet-attributes / --fleet-ids "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa"

    응답

    { "FleetAttributes": [ { "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "ComputeType": "EC2", "BuildId": "build-3333cccc-44dd-55ee-66ff-00001111aa22", . . . } ] }

    요청

    aws gamelift describe-build / --build-id "build-3333cccc-44dd-55ee-66ff-00001111aa22"

    응답

    "Build": { "BuildId": "build-1111aaaa-22bb-33cc-44dd-5555eeee66ff", "Name": "My_Game_Server_Build_One", "OperatingSystem": "AMAZON_LINUX_2023", "ServerSdkVersion": "5.1.1", . . . }

인스턴스에 연결(서버 SDK 5)

연결하려는 인스턴스가 서버 SDK 버전 5.x로 게임 빌드를 실행하는 경우, Amazon EC2 Systems Manager(SSM)를 사용하여 인스턴스에 연결합니다. Windows나 Linux를 실행 중인 원격 인스턴스에 액세스할 수 있습니다.

시작하기 전에

SSM 설정 단계를 완료하고 로컬 시스템에 SSM 플러그인을 설치합니다. 자세한 내용은 Amazon EC2 Systems Manager 사용 설명서Session Manager 설정AWS CLI의 Session Manager 플러그인 설치를 참조하세요.

  1. 인스턴스에 대한 액세스 자격 증명을 요청합니다. 연결하려는 인스턴스의 플릿 ID와 컴퓨팅 이름을 사용하여 get-compute-access를 호출합니다. Amazon GameLift가 인스턴스에 액세스하기 위한 임시 자격 증명 세트를 반환합니다. 예:

    요청

    aws gamelift get-compute-access \ --compute-name i-11111111a222b333c \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --region us-west-2

    응답

    { "ComputeName": " i-11111111a222b333c ", "Credentials": { "AccessKeyId": " ASIAIOSFODNN7EXAMPLE ", "SecretAccessKey": " wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY ", "SessionToken": " AQoDYXdzEJr...<remainder of session token>" }, "FleetArn": " arn:aws:gamelift:us-west-2::fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa ", "FleetId": " fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa " }
  2. 액세스 자격 증명을 내보냅니다(선택 사항). 자격 증명을 환경 변수로 내보내고 이를 사용하여 기본 사용자에 대한 AWS CLI를 구성할 수 있습니다. 자세한 내용은 AWS Command Line Interface 사용 설명서의 AWS CLI 구성을 위한 환경 변수를 참조하세요.

    export AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY export AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of session token>
  3. 플릿 인스턴스에 연결합니다. 연결하려는 인스턴스로 SSM 세션을 시작합니다. 인스턴스의 AWS 리전 또는 위치를 포함합니다. SSM 및 SSM 플러그인 설정 방법을 비롯한 자세한 내용은 Amazon EC2 Systems Manager 사용 설명서세션 시작(AWS CLI)을 참조하세요.

    시작 세션 요청은 1단계에서 획득한 자격 증명 정보를 자동으로 사용합니다.

    aws ssm start-session \ --target i-11111111a222b333c \ --region us-west-2 \
    참고

    액세스 거부 오류가 발생하면 AWS_PROFILE 환경 변수가 AWS 프로필로 설정되어 AWS CLI가 원격 액세스에 잘못된 자격 증명을 사용하게 될 수 있습니다. 문제를 해결하려면 AWS_PROFILE 환경 변수를 일시적으로 설정 해제합니다. 또는, 원격 액세스 자격 증명에 대한 사용자 지정 AWS 프로파일을 생성하고 start-session 요청에 --profile 명령줄 파라미터를 추가할 수 있습니다.

인스턴스에 연결(서버 SDK 4.x 이하)

연결하려는 인스턴스가 서버 SDK 버전 4 이하에서 게임 빌드를 실행하는 경우 다음 지침을 사용합니다. Windows나 Linux를 실행 중인 원격 인스턴스에 액세스할 수 있습니다. 원격 데스크톱 프로토콜(RDP) 클라이언트를 사용하여 Windows 인스턴스에 연결합니다. SSH 클라이언트를 사용하여 Linux 인스턴스에 연결합니다.

  1. 인스턴스에 대한 액세스 자격 증명을 요청합니다. 인스턴스 ID가 있는 경우 get-instance-access 명령을 사용하여 액세스 자격 증명을 요청합니다. 요청이 수락되면 Amazon GameLift가 인스턴스의 운영 체제, IP 주소, 자격 증명 세트(사용자 이름과 비밀 키)를 반환합니다. 자격 증명 형식은 인스턴스 운영 체제에 따라 다릅니다. 다음 지침을 이용해 RDP나 SSH에 대한 자격 증명을 가져옵니다.

    • Windows 인스턴스 - Windows 인스턴스에 연결을 시도하면 RDP가 사용자 이름과 암호를 요구합니다. get-instance-access 요청이 단순한 문자열로 이러한 값을 반환하므로 이 반환된 값을 그대로 사용할 수 있습니다. 예제 자격 증명:

      "Credentials": { "Secret": "aA1bBB2cCCd3EEE", "UserName": "gl-user-remote" }
    • Linux 인스턴스 - Linux 인스턴스에 연결을 시도하면 SSH가 사용자 이름과 프라이빗 키를 요구합니다. Amazon 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를 사용하는 경우 get-instance-access 요청에 --query--output 파라미터를 포함하여 올바른 형식의 .pem 파일을 자동으로 생성할 수 있습니다.

      .pem 파일에 대한 권한을 설정하려면 다음 명령을 실행합니다.

      $ chmod 400 MyPrivateKey.pem
  2. 원격 연결을 위한 포트를 엽니다. Amazon GameLift 플릿의 인스턴스는 플릿 구성에서 권한이 있는 포트를 통해서만 액세스할 수 있습니다. describe-fleet-port-settings 명령을 사용하여 플릿의 포트 설정을 볼 수 있습니다.

    모범 사례로, 필요할 때만 원격 액세스용 포트를 열고 완료되면 닫을 것을 권장합니다. 플릿을 생성한 후에는 활성화되기 전에 포트 설정을 업데이트할 수 없습니다. 문제가 해결되지 않으면 포트 설정을 연 상태로 플릿을 다시 생성합니다.

    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"

    다음 예제에서는 Windows 플릿에서 포트 3389를 엽니다.

    $ AWS gamelift update-fleet-port-settings --fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa" --inbound-permission-authorizations "FromPort=3389,ToPort=3389,IpRange=54.186.139.221/32,Protocol=TCP"
  3. 원격 연결 클라이언트를 엽니다. Windows용 원격 데스크톱 또는 Linux 인스턴스용 SSH를 사용합니다. IP 주소, 포트 설정, 액세스 자격 증명을 사용하여 인스턴스에 연결합니다.

    SSH 예:

    ssh -i MyPrivateKey.pem gl-user-remote@192.0.2.0

원격 인스턴스의 파일 보기

인스턴스에 원격으로 연결하려면 완전한 사용자 및 관리자 액세스가 필요합니다. 즉 게임 호스팅에 오류와 장애를 야기할 수도 있다는 뜻입니다. 인스턴스에서 활성 플레이어 게임을 호스팅하는 경우, 게임 세션 충돌 및 플레이어 연결 해제, 게임 종료 프로세스 방해 또는 저장된 게임 데이터와 로그에 오류 유발 등의 위험이 생깁니다.

호스팅 인스턴스에서 다음 리소스를 찾습니다.

  • 게임 빌드 파일. Amazon GameLift에 업로드한 게임 빌드 파일입니다. 여기에는 하나 이상의 게임 서버 실행 파일, 자산, 종속성 파일이 포함됩니다. 게임 빌드 파일은 game 루트 디렉터리에 있습니다.

    • Windows: c:\game

    • Linux: /local/game

  • 게임 로그 파일. 지정한 디렉토리 경로에 위치한 game 루트 디렉토리 내에 있는 게임 서버가 생성한 로그 파일을 찾습니다.

  • Amazon GameLift 호스팅 리소스. Amazon GameLift 서비스가 게임 호스팅을 관리하기 위해 사용한 파일은 Whitewater 루트 디렉터리에 있습니다. 어떤 이유로든 이 파일을 수정하지 마십시오.

  • 런타임 구성. 개별 인스턴스에 대한 런타임 구성에 액세스하지 마십시오. 런타임 구성 속성을 변경하려면 플릿의 런타임 구성을 업데이트합니다(AWS SDK 작업 UpdateRuntimeConfiguration 또는 AWS CLI update-runtime-configuration 참조).

  • 플릿 데이터. JSON 파일에는 인스턴스에서 실행되는 서버 프로세스에서 사용할 수 있도록 인스턴스가 속한 플릿에 대한 정보가 포함되어 있습니다. JSON 파일은 다음 위치에 있습니다.

    • Windows: C:\GameMetadata\gamelift-metadata.json

    • Linux: /local/gamemetadata/gamelift-metadata.json

  • TLS 인증서. TLS 인증서 생성이 활성화되어 있는 플릿에 인스턴스가 있는 경우 인증서, 인증서 체인, 프라이빗 키, 루트 인증서를 포함한 인증서 파일은 다음 위치에 있습니다.

    • Windows: c:\\GameMetadata\Certificates

    • Linux: /local/gamemetadata/certificates/