远程连接到 Amazon GameLift 舰队实例 - Amazon GameLift

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

远程连接到 Amazon GameLift 舰队实例

您可以连接到处于活动状态的 Amazon GameLift 托管EC2车队中的任何实例。远程访问实例的常见原因包括:

  • 对游戏服务器集成问题进行故障排除。

  • 微调您的运行时配置和其他特定于队列的设置。

  • 获取实时游戏服务器活动,例如日志跟踪。

  • 使用实际玩家流量运行基准测试工具。

  • 调查游戏会话或服务器进程的具体问题。

连接实例时,请考虑以下潜在问题:

  • 您可以连接到活跃队列中的任何实例。通常,您无法连接到非活动舰队,例如正在激活或处于错误状态的舰队。(这些舰队可能在短时间内供应有限。) 有关实例集激活问题的帮助,请参阅调试 Amazon GameLift 车队问题

  • 连接到活动实例不会影响该实例的托管活动。该实例继续根据运行时配置启动和停止服务器进程。它激活并运行游戏会话。实例可能会因缩小规模事件或其他事件而关闭。

  • 您对实例上的文件或设置所做的任何更改都可能影响该实例的活动游戏会话和连接的玩家。

以下说明描述了如何使用 AWS 命令行界面 (CLI) 远程连接到实例。您还可以使用进行编程调用 AWS SDK,如亚马逊 GameLift 服务API参考中所述。

收集实例数据

要连接到 Amazon GameLift 托管EC2队列实例,您需要以下信息:

  • 您要连接的实例的 ID。您可以使用实例 ID 或ARN。

  • 实例上正在使用的 Amazon GameLift 服务器SDK版本。服务器SDK与实例上运行的游戏版本集成。

以下说明描述了如何使用完成这些任务 AWS CLI。您必须知道要连接的实例的队列 ID。

  1. 获取计算名称。获取队列中所有活跃计算的列表。使用舰队 ID 调用 list-compute 或。ARN对于单一地点的舰队,请仅指定舰队标识符。对于多地点舰队,请指定舰队标识符和位置。对于托管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. describe-fleet-attributes使用舰队ID致电或ARN获取舰队的版本ID和ARN.

    2. 使用构建 ID 调用 describe-b uild 或者ARN获取版本的服务器版本。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", . . . }

Connect 连接到实例(服务器 SDK 5)

如果您要连接的实例正在运行服务器SDK版本 5.x 的游戏版本,请使用 Amazon Sy EC2 stems Manager (SSM) 连接到该实例。您可以访问在 Windows 或 Linux 上运行的远程实例。

在你开始之前:

完成SSM设置步骤并在本地计算机上安装SSM插件。有关更多信息,请参阅 Amazon Syst EC2 ems Manager 用户指南 AWS CLI中的设置SSM和安装会话管理器插件

  1. 请求实例的访问凭证。get-compute-access使用您要连接的实例的队列 ID 和计算名称进行调用。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. Connect 连接到舰队实例。与您要连接的实例启动SSM会话。包括实例的 AWS 地区或位置。有关更多信息,包括如何设置SSM和SSM插件,请参阅 Amazon S EC2 ystems Manager 用户指南中的启动会话 (AWS CLI)

    启动会话请求将自动使用您在步骤 1 中获得的证书。

    aws ssm start-session \ --target i-11111111a222b333c \ --region us-west-2 \
    注意

    如果您遇到拒绝访问错误,则可能是将AWS_PROFILE环境变量设置为 AWS 配置文件,这会 AWS CLI导致使用错误的凭据进行远程访问。要解决此问题,请暂时取消设置您的AWS_PROFILE环境变量。或者,您可以为远程访问凭证创建自定义 AWS 配置文件,并将--profile命令行参数添加到start-session请求中。

连接到实例(服务器 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,您可以通过在请求中包含 --query和--ou tput 参数来自动生成.pem文件。get-instance-access

      要在 .pem 文件上设置权限,请运行以下命令:

      $ chmod 400 MyPrivateKey.pem
  2. 为远程连接打开端口。您可以通过 GameLift 队列配置中授权的任何端口访问 Amazon 队列中的实例。您可以使用命令 describe-fleet-port-settings 查看实例集的端口设置。

    作为最佳实操,我们建议您仅在需要时为远程访问打开这些端口,并在完成后关闭它们。在创建队列之后但在队列处于活动状态之前,您无法更新端口设置。如果您遇到问题,请在打开端口设置的情况下重新创建舰队。

    使用命令update-fleet-port-settings为远程连接添加端口设置(22例如 for SSH 或 fo 3389 rRDP)。在 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根目录中找到游戏服务器生成的日志文件。

  • 亚马逊 GameLift 托管资源。根目录Whitewater包含 Amazon GameLift 服务用来管理游戏托管活动的文件。请勿出于任何原因修改这些文件。

  • 运行时配置。不要访问单个实例的运行时配置。要更改运行时配置属性,请更新队列的运行时配置(参见 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/