远程连接到 Amazon GameLift Servers 实例集实例 - Amazon GameLift Servers
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

远程连接到 Amazon GameLift Servers 实例集实例

您可以连接到活动的 Amazon GameLift Servers 托管式 EC2 或容器实例集中的任何实例。远程访问实例的常见原因包括:

  • 排查游戏服务器集成问题。

  • 微调运行时配置和其他特定于实例集的设置。

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

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

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

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

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

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

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

通过控制台进行远程访问

您可以通过 Amazon GameLift Servers 控制台使用 Amazon EC2 Systems Manager(SSM)直接连接到实例集实例。此方法无需额外设置或凭证管理即可提供安全访问。

  1. 在 Amazon GameLift Servers 控制台中,从导航窗格中选择托管式 EC2托管容器,然后选择实例集

  2. 选择包含您要访问的实例的实例集 ID。

  3. 在实例集详细信息页面上,选择实例选项卡以查看实例集的所有计算实例。

  4. 选择要连接到的实例,然后选择连接。此操作将弹出“连接到实例”对话框,该对话框会显示连接详细信息,同时允许您查看用于连接到实例的脚本。再次选择连接进行确认。

  5. 在连接对话框中,选择运行以创建新的 SSM 会话。系统通过 Amazon Key Management Service(Amazon KMS)对您的会话进行身份验证,并在浏览器中打开终端。

注意

基于控制台的远程访问适用于运行服务器 SDK 5.x 版本的实例集。对于运行早期 SDK 版本的实例集,请使用下一节中描述的 Amazon CLI 方法。

通过 Amazon CLI 进行远程访问

以下说明介绍了如何使用 Amazon 命令行界面(CLI)远程连接到实例。您还可以使用 Amazon SDK 进行编程式调用,如 Amazon GameLift Servers 的服务 API 参数中所述。

收集实例数据

要连接到 Amazon GameLift Servers 托管式 EC2 实例集实例,您需要以下信息:

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

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

以下说明介绍了如何使用 Amazon 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_2", "ServerSdkVersion": "5.1.1", . . . }

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

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

开始之前:

完成 SSM 设置步骤并在本地计算机上安装 SSM 插件。有关更多信息,请参阅《Amazon EC2 Systems Manager 用户指南》中的设置 SSM为 Amazon CLI 安装 Session Manager 插件

  1. 请求实例的访问凭证。通过实例集 ID 和要连接到的实例的计算名称调用 get-compute-access。Amazon GameLift Servers 将返回一组用于访问实例的临时凭证。例如:

    请求

    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. 导出访问凭证(可选)。您可以将凭证导出到环境变量,并使用它们为默认用户配置 Amazon CLI。有关更多详细信息,请参阅《Amazon Command Line Interface User Guide》中的 Environment variables to configure the Amazon 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 会话。加入该实例的 Amazon 区域或位置。有关更多信息(包括如何设置 SSM 和 SSM 插件),请参阅《Amazon EC2 Systems Manager 用户指南》中的启动会话(Amazon CLI)

    start-session 请求将自动使用您在步骤 1 中获得的凭证。

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

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

连接到实例(服务器 SDK 4.x 或更早版本)

如果要连接到的实例正在运行使用服务器 SDK 版本 4 或更早版本的游戏生成包,请按照以下说明进行操作。您可以连接到在 Windows 或 Linux 上运行的实例。使用远程桌面协议(RDP)客户端连接到 Windows 实例。使用 SSH 客户端连接到 Linux 实例。

  1. 请求实例的访问凭证。如果您具有实例 ID,可以使用命令 get-instance-access 来请求访问凭证。如果成功,Amazon GameLift Servers 将返回实例的操作系统、IP 地址和一组凭证(用户名和私有密钥)。凭证格式取决于实例的操作系统。使用以下说明来检索 RDP 或 SSH 的凭证。

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

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

      使用 Amazon CLI 时,您可以通过在 get-instance-access 请求中包含 --query--output 参数,自动生成 .pem 文件。

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

      $ chmod 400 MyPrivateKey.pem
  2. 为远程连接打开端口。您可以通过实例集配置中授权的任何端口访问 Amazon GameLift Servers 实例集中的实例。您可以使用命令 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"
  3. 打开远程连接客户端。为 Windows 实例使用远程桌面,为 Linux 实例使用 SSH。使用 IP 地址连接到实例、端口设置和访问凭证。

    SSH 示例:

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

查看远程实例上的文件

无论您是通过控制台还是 Amazon CLI 远程连接到实例,您都拥有对该实例的完全用户权限和管理访问权限。这意味着您也有权限对游戏托管服务进行操作,因此可能引发服务异常或故障。如果实例托管有活动玩家的游戏,您可能面临着以下风险:游戏会话崩溃且玩家掉线,或者中断游戏关闭进程,从而导致已保存游戏数据和日志中出错。

在托管实例上查找以下资源:

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

    • 在 Windows 上:c:\game

    • 在 Linux 上:/local/game

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

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

  • 运行时配置。请勿访问单个实例的运行时配置。要对运行时配置属性进行更改,请更新实例集的运行时配置(请参阅 Amazon SDK 操作 UpdateRuntimeConfiguration 或 Amazon CLI update-runtime-configuration)

  • 实例集数据。JSON 文件包含实例所属的实例集的相关信息,供在实例上运行的服务器进程使用。JSON 文件位于以下位置:

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

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