

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

# Connect 到容器
<a name="containers-remote-access"></a>

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

## Connect 连接到容器
<a name="containers-remote-access-connect"></a>

**开始之前：**  
连接到实例集实例。有关说明，请参阅[Connect 连接到舰队实例](fleets-remote-access.md)。

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

```
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
```

## 通过控制台连接到容器
<a name="containers-remote-access-console"></a>

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

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

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

1. 在舰队详细信息页面上，选择以下选项卡之一：
   + **计算**-列出在舰队上运行的容器。选择要连接的容器。
   + **游戏会话** — 列出舰队的游戏会话。选择游戏会话以连接到托管它的容器。

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

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

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

## Connect 连接到托管游戏会话的容器
<a name="containers-remote-access-game-session"></a>

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

1. **获取计算名称。**[describe-game-sessions](https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-game-sessions.html)致电获取游戏会话。`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`）。

1. **获取计算访问权限和容器属性。**[get-compute-access](https://docs.aws.amazon.com/cli/latest/reference/gamelift/get-compute-access.html)使用舰队 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"
   }
   ```

1. **连接到实例。**使用步骤 2 中的凭证连接到队列实例。有关详细说明，请参阅[Connect 连接到舰队实例](fleets-remote-access.md)。

1. **找到游戏服务器容器名称。**[describe-container-group-definition](https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-container-group-definition.html)使用 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`）。

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

1. **Connect 连接到容器。**使用`ContainerRuntimeId`作为容器 ID 并运行以下命令：

   ```
   sudo docker exec -it 02accb92cd9bef3373300e7151d5c2b3dcca3b06eff1bb4e345085fc008d4678 sh
   ```

## 查看容器端口映射
<a name="containers-remote-access-port-mappings"></a>

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

### 在控制台中查看端口映射
<a name="containers-remote-access-port-mappings-console"></a>

在Amazon GameLift Servers控制台中，从导航窗格中选择 “**托管容器**”，然后选择 **Fleets**。选择舰队以打开舰队详情页面。您可以在以下位置查看端口映射：
+ **实例详细信息页面**-显示所选实例上每个实例的容器组的端口映射。
+ **计算详细信息页面**-显示所选计算上游戏服务器容器组的端口映射。

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

### 使用查看端口映射 AWS CLI
<a name="containers-remote-access-port-mappings-cli"></a>

使用`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"
        }
      ]
    }
  ]
}
```