View a markdown version of this page

Connect 到容器 - Amazon GameLift Servers

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

Connect 到容器

对于Amazon GameLift Servers容器队列,您可以访问在舰队实例上运行的游戏服务器容器。使用容器访问权限对游戏会话进行故障排除、检查日志和调试运行时问题。

Connect 连接到容器

开始之前:

连接到实例集实例。有关说明,请参阅Connect 连接到舰队实例

运行以下命令列出实例上正在运行的容器:

sudo docker ps

输出列出了实例上运行的所有容器,包括游戏服务器容器和内部Amazon GameLift Servers容器。查找包含游戏服务器镜像的容器以识别游戏服务器容器。

输出示例:

CONTAINER ID IMAGE COMMAND CREATED STATUS b9676e9489f5 game-server-container "/bin/sh -c ./$GAME_…" 2 days ago Up 2 days 1d1c8443efe2 support-container "/bin/sh -c ./$SUPPO…" 2 days ago Up 2 days

要连接到游戏服务器容器,请使用CONTAINER ID列中的容器短 ID。这为您提供了对容器文件系统的完全读写权限。

sudo docker exec -it container-short-id sh

通过控制台连接到容器

您可以使用 Amazon EC2 Systems Manager (SSM) 从Amazon GameLift Servers控制台连接到游戏服务器容器。此方法无需额外设置或凭证管理即可提供安全访问。您可以从舰队详细信息页面上的 “计算” 选项卡或 “游戏会话” 选项卡连接到容器。

  1. 在Amazon GameLift Servers控制台中,从导航窗格中选择 “托管容器”,然后选择 Fleets

  2. 选择包含您要访问的容器或游戏会话的舰队 ID。

  3. 在舰队详细信息页面上,选择以下选项卡之一:

    • 计算-列出在舰队上运行的容器。选择要连接的容器。

    • 游戏会话 — 列出舰队的游戏会话。选择游戏会话以连接到托管它的容器。

  4. 选择连接。复制显示的命令以连接到容器,然后再次选择 Connect

  5. 在连接对话框中,选择运行以创建新的 SSM 会话。系统通过 AWS 密钥管理服务 (AWS KMS) 对您的会话进行身份验证,并在浏览器中打开终端。

  6. 连接到实例后,粘贴步骤 4 中的 docker 命令并在实例上执行该命令以访问容器。

Connect 连接到托管游戏会话的容器

要连接到托管特定游戏会话的游戏服务器容器,请按照以下步骤操作。

  1. 获取计算名称。describe-game-sessions致电获取游戏会话。ComputeName

    请求

    aws gamelift describe-game-sessions \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --game-session-id arn:aws:gamelift:us-west-2::gamesession/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa/gs-1111aaaa-2222-3333-4444-5555bbbb66cc

    响应

    { "GameSessions": [ { "GameSessionId": "arn:aws:gamelift:us-west-2::gamesession/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa/gs-1111aaaa-2222-3333-4444-5555bbbb66cc", "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "ComputeName": "62c5ff7f7a9a445d84877074c80aeafc", "Status": "ACTIVE", . . . } ] }

    记下响应中的ComputeName值(例如,62c5ff7f7a9a445d84877074c80aeafc)。

  2. 获取计算访问权限和容器属性。get-compute-access使用舰队 ID 和计算名称进行呼叫。

    响应包括以下字段:

    • ContainerIdentifiers— 每个容ContainerRuntimeId器的ContainerName和。

    • GameServerContainerGroupDefinitionArn— 容器组定义的 ARN。

    • Credentials— 用于连接到实例的临时证书。

    请求

    aws gamelift get-compute-access \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --compute-name 62c5ff7f7a9a445d84877074c80aeafc

    响应

    { "ComputeName": "62c5ff7f7a9a445d84877074c80aeafc", "ContainerIdentifiers": [ { "ContainerName": "game-server", "ContainerRuntimeId": "02accb92cd9bef3373300e7151d5c2b3dcca3b06eff1bb4e345085fc008d4678" } ], "Credentials": { "AccessKeyId": "ASIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "AQoDYXdzEJr...<remainder of session token>" }, "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "GameServerContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2::containergroupdefinition/MyGameServerGroup" }
  3. 连接到实例。使用步骤 2 中的凭证连接到队列实例。有关详细说明,请参阅Connect 连接到舰队实例

  4. 找到游戏服务器容器名称。describe-container-group-definition使用 fro GameServerContainerGroupDefinitionArn m 步骤 2 调用以识别游戏服务器容器名称。

    请求

    aws gamelift describe-container-group-definition \ --name arn:aws:gamelift:us-west-2::containergroupdefinition/MyGameServerGroup

    响应

    { "ContainerGroupDefinition": { "ContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2:123456789012:containergroupdefinition/MyGameServerGroup:3", "Name": "MyGameServerGroup", "ContainerGroupType": "GAME_SERVER", "GameServerContainerDefinition": { "ContainerName": "game-server", . . . }, . . . } }

    记下该GameServerContainerDefinition.ContainerName值(例如,game-server)。

  5. 识别游戏服务器容器运行时 ID。使用上一步中的游戏服务器容器名称,在步骤 2 的get-compute-access响应ContainerIdentifiers中找到匹配的条目。记下 ContainerRuntimeId 的值。

  6. Connect 连接到容器。使用ContainerRuntimeId作为容器 ID 并运行以下命令:

    sudo docker exec -it 02accb92cd9bef3373300e7151d5c2b3dcca3b06eff1bb4e345085fc008d4678 sh

查看容器端口映射

端口映射显示容器端口如何映射到您的队列实例上的连接端口。每个接受入站流量的容器端口都会在实例上分配一个连接端口。您可以检查端口映射以发现哪些连接端口映射到您的容器端口,或者对连接问题进行故障排除。您可以在Amazon GameLift Servers控制台中查看端口映射,也可以使用 AWS CLI 或 AWS SDK。

在控制台中查看端口映射

在Amazon GameLift Servers控制台中,从导航窗格中选择 “托管容器”,然后选择 Fleets。选择舰队以打开舰队详情页面。您可以在以下位置查看端口映射:

  • 实例详细信息页面-显示所选实例上每个实例的容器组的端口映射。

  • 计算详细信息页面-显示所选计算上游戏服务器容器组的端口映射。

这两个页面都包含一个搜索字段,用于按容器名称筛选端口映射。

使用查看端口映射 AWS CLI

使用describe-container-group-port-mappings命令检索舰队实例上容器组的端口映射。指定容器组类型以及 a--compute-name(用于游戏服务器组)或--instance-id(针对每个实例组)。(可选)添加--container-name参数以将结果筛选到特定容器。

示例:游戏服务器容器组

以下命令检索特定计算机上游戏服务器容器组的端口映射。

aws gamelift describe-container-group-port-mappings \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --container-group-type GAME_SERVER \ --compute-name 62c5ff7f7a9a445d84877074c80aeafc

如果成功,则Amazon GameLift Servers返回如下所示的响应:

{ "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "Location": "us-west-2", "ContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2:123456789012:containergroupdefinition/MyGameServerGroup", "ContainerGroupType": "GAME_SERVER", "ComputeName": "62c5ff7f7a9a445d84877074c80aeafc", "InstanceId": "i-1234567890abcdef0", "ContainerGroupPortMappings": [ { "ContainerName": "MyGameServer", "ContainerRuntimeId": "a1b2c3d4e5f6", "ContainerPortMappings": [ { "ContainerPort": 7777, "ConnectionPort": 1025, "Protocol": "UDP" }, { "ContainerPort": 8080, "ConnectionPort": 1026, "Protocol": "TCP" } ] } ] }

示例:每实例容器组

以下命令检索特定实例上每实例容器组的端口映射。

aws gamelift describe-container-group-port-mappings \ --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \ --container-group-type PER_INSTANCE \ --instance-id i-1234567890abcdef0

如果成功,则Amazon GameLift Servers返回如下所示的响应:

{ "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa", "Location": "us-west-2", "ContainerGroupDefinitionArn": "arn:aws:gamelift:us-west-2:123456789012:containergroupdefinition/MyPerInstanceGroup", "ContainerGroupType": "PER_INSTANCE", "InstanceId": "i-1234567890abcdef0", "ContainerGroupPortMappings": [ { "ContainerName": "MySupportContainer", "ContainerRuntimeId": "f6e5d4c3b2a1", "ContainerPortMappings": [ { "ContainerPort": 8443, "ConnectionPort": 2025, "Protocol": "TCP" } ] } ] }