远程访问 GameLift 队列实例 - 亚马逊 GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

远程访问 GameLift 队列实例

您可以远程访问当前在您的系统中运行的任何实例 GameLift 队列。直接访问实例的一些常见原因包括:

  • 要解决问题,请执行以下操作:

    • 根据您的运行时配置,游戏服务器进程是如何启动和停止的。

    • 你的游戏服务器是如何与游戏服务器交互的 GameLift 服务。

    • 游戏会话和玩家连接问题。

    • 配对回填问题.

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

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

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

远程访问个人时 GameLift 实例,请记住以下问题:

  • 只能远程访问活跃队列中的实例。如果您的队列无法激活,则无法获取实例连接信息。有关队组激活问题的帮助,请参阅Debug GameLift 队组问题.

  • 远程连接到实例不会影响实例活动。实例被放置在实例上时继续启动和停止服务器进程,托管游戏会话 GameLift,并且可以随时终止,以响应缩小规模事件或 Spot 中断。

  • 您对实例所做的任何更改都可能影响该实例的活跃游戏会话和关联玩家。

连接到 实例

您可以访问在 Windows 或 Linux 上运行的远程实例。要连接到 Windows 实例,请使用远程桌面协议 (RDP) 客户端。要连接到 Linux 实例,请使用 SSH 客户端。

使用 Amazon CLI 获取访问远程实例时需要的信息。有关帮助,请参阅Amazon CLI命令参考. 您也可以使用AmazonSDK,文档可在GameLift 服务 API 参考.

  1. 打开亚马逊 GameLift 控制台.

  2. 查找您要连接到的实例的 ID。请求访问时,您必须指定实例 ID。使用AmazonCLI 命令desces(或 API 调用DescribeInstances) 与队组 ID 来获取有关队组中所有实例的信息。有关帮助(包括示例请求和响应),请参阅 CLI 或 API 参考指南。

  3. 请求实例的访问凭证。在您拥有了实例 ID 之后,使用命令get-instance-access(或 API 调用GetInstanceAccess) 请求访问凭证以及其他信息。有关帮助(包括示例请求和响应),请参阅 CLI 或 API 参考指南。如果成功, GameLift 将返回实例的操作系统、IP 地址和一组凭证(用户名和私有密钥)。凭证格式取决于实例的操作系统。使用以下说明来检索 RDP 或 SSH 的凭证。

    • 对于 Windows 实例— 要连接到 Windows 实例,RDP 需要用户名和密码。get-instance-access 请求会以简单字符串的格式返回这些值,因此您可以原样使用返回的值。凭证示例:

      "Credentials": { "Secret": "aA1bBB2cCCd3EEE", "UserName": "gl-user-remote" }
    • 对于Linux 实例— 要连接到 Linux 实例,SSH 需要用户名和私有密钥。 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" }

      使用AmazonCLI,你可以自动生成格式正确的.pem文件,方法是包含—查询--output你的参数get-instance-access请求.

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

      $ chmod 400 MyPrivateKey.pem
  4. 为远程连接打开端口。中的实例 GameLift 队列只能通过在队组配置中授权的端口进行访问。您可以使用命令 describe-fleet-port-settings 查看队组的端口设置。

    作为最佳实践,我们建议您仅在需要时为远程访问打开这些端口,并在完成后关闭它们。例如,一旦创建了队列但在激活之前,其端口设置就无法更新。如果卡住了,请在打开端口设置的情况下重新创建队列。

    使用命令 update-fleet-port-settings 为远程连接添加端口设置 (例如 SSH 为 22,RDP 为 3389)。对于 IP 范围值,指定您计划用于连接的设备的 IP 地址 (转换为 CIDR 格式)。示例:

    $ Amazon 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

    $ Amazon 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"
  5. 打开远程连接客户端。为 Windows 实例使用远程桌面,为 Linux 实例使用 SSH。使用 IP 地址连接到实例、端口设置和访问凭证。

    SSH 示例:

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

查看远程实例上的文件

当远程连接到实例时,您具有完整的用户和管理访问权限。这意味着,您也具备导致游戏托管错误和故障的能力。如果实例托管着有活动玩家的游戏,您就面临着游戏会话崩溃和玩家掉线的风险,以及中断游戏关闭进程并导致已保存游戏数据和日志中出错。

在以下位置可以找到实例上的托管资源:

  • 游戏生成包文件。这些是包括在您上传到的游戏生成包中的文件 GameLift. 它们包括一个或多个游戏服务器可执行文件、资产和依赖项。这些文件位于名为 game 的根目录中:

    • 在 Windows 上: c:\game

    • 在 Linux 上: /local/game

  • 游戏日志文件。您的游戏服务器生成的任何日志文件存储在您指定的任何目录路径的 game 根目录中。

  • GameLift 托管资源。 GameLift 服务用于管理游戏托管的文件位于名为 Whitewater 的根目录中。这些文件不应出于任何原因更改。

  • 运行时配置。队组运行时配置对于单个实例不可访问。要测试更改运行时配置(启动路径、启动参数、最大并行进程数量),您必须更新队组范围的运行时配置(请参阅Amazon软件开发工具包操作UpdateRuntimeConfiguration或者Amazon CLI update-runtime-configuration)。

  • 舰队数据。实例所属队列的属性存储在 JSON 文件中。此信息可供在实例上运行的服务器进程使用。JSON 文件存储在以下位置:

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

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