

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 連線至容器
<a name="containers-remote-access"></a>

對於Amazon GameLift Servers容器機群，您可以存取在機群執行個體上執行的遊戲伺服器容器。使用容器存取對遊戲工作階段進行疑難排解、檢查日誌和偵錯執行時間問題。

## 連線至容器
<a name="containers-remote-access-connect"></a>

**開始之前：**  
連線至機群執行個體。如需說明，請參閱[連線至機群執行個體](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主控台中，從導覽窗格中選擇**受管容器**，然後選擇**機群**。

1. 選擇包含您要存取之容器或遊戲工作階段的機群 ID。

1. 在機群詳細資訊頁面上，選擇下列其中一個索引標籤：
   + **運算** – 列出在機群上執行的容器。選取您要連線的容器。
   + **遊戲工作階段** – 列出機群的遊戲工作階段。選取遊戲工作階段以連接至託管它的容器。

1. 選擇**連線**。複製顯示的命令以連線至容器，然後再次選擇**連線**。

1. 在連線對話方塊中，選擇**執行**以建立新的 SSM 工作階段。系統會透過 AWS Key Management Service (AWS KMS) 驗證您的工作階段，並在瀏覽器中開啟終端機。

1. 連線至執行個體後，請貼上步驟 4 中的 docker 命令，並在執行個體上執行該命令以存取容器。

## 連線至託管遊戲工作階段的容器
<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. **取得運算存取和容器屬性。**使用機群 ID 和運算名稱呼叫 [get-compute-access](https://docs.aws.amazon.com/cli/latest/reference/gamelift/get-compute-access.html)。

   回應包含下列欄位：
   + `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 的登入資料來連線至機群執行個體。如需詳細說明，請參閱 [連線至機群執行個體](fleets-remote-access.md)。

1. **尋找遊戲伺服器容器名稱。**使用步驟 2 `GameServerContainerGroupDefinitionArn`中的 呼叫 [describe-container-group-definition](https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-container-group-definition.html)，以識別遊戲伺服器容器名稱。

   **請求**

   ```
   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。**使用上一個步驟的遊戲伺服器容器名稱，`ContainerIdentifiers`從步驟 2 的`get-compute-access`回應尋找 中的相符項目。請記下 `ContainerRuntimeId` 值。

1. **連線至容器。**使用 `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主控台中，從導覽窗格中選擇**受管容器**，然後選擇**機群**。選擇機群以開啟機群詳細資訊頁面。您可以在下列位置檢視連接埠映射：
+ **執行個體詳細資訊頁面** – 顯示所選執行個體上每個執行個體容器群組的連接埠映射。
+ **運算詳細資訊頁面** – 顯示所選運算上遊戲伺服器容器群組的連接埠映射。

這兩個頁面都包含搜尋欄位，可依容器名稱篩選連接埠映射。

### 使用 檢視連接埠映射 AWS CLI
<a name="containers-remote-access-port-mappings-cli"></a>

使用 `describe-container-group-port-mappings`命令來擷取機群執行個體上容器群組的連接埠映射。指定容器群組類型和 `--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"
        }
      ]
    }
  ]
}
```