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

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

远程连接到 Amazon GameLift 舰队实例

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

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

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

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

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

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

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

  • 您可以连接到活跃队列中的实例。非活动舰队,即处于激活状态或处于错误状态的舰队,可能在短时间内可以访问。有关实例集激活问题的帮助,请参阅调试 Amazon GameLift 实例集问题

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

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

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

收集实例数据

收集以下信息:

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

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

检索实例数据

以下步骤假设您拥有要连接的实例的托管 EC2 队列 ID。

  1. 获取计算名称。

    调用托管 EC2 队列的 list-comp ute 以获取队列中所有活跃计算的列表。对于单一地点的舰队,请指定舰队 ID 或 ARN。对于多地点舰队,请指定舰队 ID 或 ARN 以及地点。对于托管 EC2 队列,计算是 EC2 实例,返回的属性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", "Type": "c4.large" } ] }
  2. 查找服务器 SDK 版本。

    服务器 SDK 版本是编译资源的一个属性。

    1. describe-fleet-attributes使用舰队 ID 致电以获取舰队的构建 ID 和 ARN。

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

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

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

  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. Connect 连接到舰队实例。使用您要连接的实例启动 SSM 会话。包括实例的AWS地区或位置。有关更多信息,请参阅 Amazon EC2 Systems Manager 用户指南中的启动会话 (AWSCLI)。使用您在步骤 1 中获得的凭证。例如:

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

连接到实例(服务器 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和--out put 参数来自动生成.pem文件。get-instance-access

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

      $ chmod 400 MyPrivateKey.pem
  2. 为远程连接打开端口。您可以通过 GameLift 队列配置中授权的任何端口访问 Amazon 队列中的实例。您可以使用命令 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根目录中找到游戏服务器生成的日志文件。

  • 亚马逊 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/