本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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 -itcontainer-short-idsh
通过控制台连接到容器
您可以使用 Amazon EC2 Systems Manager (SSM) 从Amazon GameLift Servers控制台连接到游戏服务器容器。此方法无需额外设置或凭证管理即可提供安全访问。您可以从舰队详细信息页面上的 “计算” 选项卡或 “游戏会话” 选项卡连接到容器。
-
在Amazon GameLift Servers控制台中,从导航窗格中选择 “托管容器”,然后选择 Fleets。
-
选择包含您要访问的容器或游戏会话的舰队 ID。
-
在舰队详细信息页面上,选择以下选项卡之一:
计算-列出在舰队上运行的容器。选择要连接的容器。
游戏会话 — 列出舰队的游戏会话。选择游戏会话以连接到托管它的容器。
-
选择连接。复制显示的命令以连接到容器,然后再次选择 Connect。
-
在连接对话框中,选择运行以创建新的 SSM 会话。系统通过 AWS 密钥管理服务 (AWS KMS) 对您的会话进行身份验证,并在浏览器中打开终端。
-
连接到实例后,粘贴步骤 4 中的 docker 命令并在实例上执行该命令以访问容器。
Connect 连接到托管游戏会话的容器
要连接到托管特定游戏会话的游戏服务器容器,请按照以下步骤操作。
-
获取计算名称。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)。 -
获取计算访问权限和容器属性。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" } -
连接到实例。使用步骤 2 中的凭证连接到队列实例。有关详细说明,请参阅Connect 连接到舰队实例。
-
找到游戏服务器容器名称。describe-container-group-definition使用 fro
GameServerContainerGroupDefinitionArnm 步骤 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)。 -
识别游戏服务器容器运行时 ID。使用上一步中的游戏服务器容器名称,在步骤 2 的
get-compute-access响应ContainerIdentifiers中找到匹配的条目。记下ContainerRuntimeId的值。 -
Connect 连接到容器。使用
ContainerRuntimeId作为容器 ID 并运行以下命令:sudo docker exec -it 02accb92cd9bef3373300e7151d5c2b3dcca3b06eff1bb4e345085fc008d4678 sh