

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

# 为 Amazon GameLift Servers 容器实例集创建容器组定义
<a name="containers-create-groups"></a>

容器组定义描述了如何将容器化游戏服务器应用程序部署到容器实例集。它是一个蓝图，告知 Amazon GameLift Servers 应将哪些容器映像部署到实例集，以及如何运行这些映像。创建容器实例集时，需要指定要部署到实例集的容器组定义。有关容器组的更多信息，请参阅[容器实例集组件](containers-howitworks.md#containers-howitworks-components)。

## 开始之前
<a name="containers-create-groups-before"></a>

开始创建容器组定义之前的操作提示：
+ 完成您的容器镜像并将其推送到亚马逊弹性容器注册表 (Amazon ECR) Container Registry 存储库，该存储库与您计划创建容器组的位置 AWS 区域 相同。 Amazon GameLift Servers在创建容器组定义时捕获每个映像的快照，并在部署到容器队列时使用该快照。请参阅[为 Amazon GameLift Servers 构建容器映像](containers-prepare-images.md)。
+ 将您的容器定义创建为 JSON 文件。容器组定义包含一个或多个容器定义。如果您使用创建容器组定义，则可以使用 JSON 文件 AWS CLIfor Amazon GameLift Servers。
+ 验证您的 AWS 用户是否具有 IAM 权限来访问 Amazon ECR 存储库。请参阅[Amazon GameLift Servers 的 IAM 权限示例](gamelift-iam-policy-examples.md)。

## 创建游戏服务器容器组定义
<a name="containers-create-groups-replica"></a>

游戏服务器容器组用于运行您的游戏服务器软件。一个游戏服务器容器组有一个游戏服务器容器，该容器运行游戏服务器可执行文件。它还可以包含一个或多个支持容器，用于运行其他软件来支持您的游戏服务器。（这类容器有时称为“Sidecar”容器。）

本主题介绍如何使用Amazon GameLift Servers控制台或 AWS CLI 工具创建简单的游戏服务器容器组定义。有关可选功能的更多详细信息，请参阅[自定义 Amazon GameLift Servers 容器实例集](containers-design-fleet.md)。

**注意**  
创建容器组定义和容器定义后，您可以修改其中的大部分设置。如果对容器定义进行更改，Amazon GameLift Servers 会捕获更新后的容器映像的新快照。

**要创建简单的游戏服务器容器组定义，请执行以下操作：**

以下说明介绍如何使用所需的最少参数和 Amazon GameLift Servers 默认值来创建容器组定义。

------
#### [ Console ]

在[Amazon GameLift Servers控制台](https://console.aws.amazon.com/gamelift/)中，选择要创建容器组 AWS 区域 的位置。

打开控制台的左侧导航栏，并选择**托管容器：组定义**。在容器组定义页面上，选择**创建组定义**。

**步骤 1：定义容器组定义详情**

1. 输入容器组定义名称。该名称在 AWS 账户 和区域中必须是唯一的。

1. 选择**游戏服务器**容器组类型。

1. 在**总内存限制**中，输入要为容器组中的所有容器提供的最大内存资源量。如需计算此值的帮助，请参阅[设置资源限制](containers-design-fleet.md#containers-design-fleet-limits)。

1. 在 **vCPU 总限制**中，输入要为容器组中的所有容器提供的最大计算能力。如需计算此值的帮助，请参阅[设置资源限制](containers-design-fleet.md#containers-design-fleet-limits)。

**步骤 2：添加容器定义**

一个游戏服务器容器组至少需包含一个游戏服务器容器。在控制台中，您创建的第一个容器定义即为游戏服务器容器。此步骤介绍如何定义游戏服务器容器定义所需的最低设置。

1. 输入容器定义**名称**。为该组定义的每个容器必须有唯一的名称值。

1. 关联到包含游戏服务器生成包的容器映像。输入公共或私有存储库中容器映像的 **Amazon ECR 映像 URI**。可使用以下任意一种格式：
   +  仅映像 URI：`[AWS 账户].dkr.ecr.[AWS 区域].amazonaws.com/[repository ID]`
   +  映像 URI \$1 摘要：`[AWS 账户].dkr.ecr.[AWS 区域].amazonaws.com/[repository ID]@[digest]`
   +  映像 URI \$1 标签：`[AWS 账户].dkr.ecr.[AWS 区域].amazonaws.com/[repository ID]:[tag]`

1. 指定游戏服务器生成包使用的 Amazon GameLift Servers **服务器 SDK 版本**。对于容器实例集，该版本必须为 5.2.0 或更高。

1. 在**内部容器端口范围**中，设置协议并定义端口范围。范围大小必须大于将在此容器中运行的并发游戏服务器进程数。如果每个游戏服务器容器仅运行一个服务器进程，则此端口范围只需设置少量端口即可。有关更多详细信息，请参阅[配置网络连接](containers-design-fleet.md#containers-custom-network)。

1. 根据需要添加更多容器以运行其他支持软件。新增容器将自动指定为支持容器。一个游戏服务器容器组只能有一个游戏服务器容器和最多八个支持容器。至少需提供以下必要设置：
   + 容器定义**名称** 
   + **ECR 映像 URI**。
   + **容器内部端口**（仅当容器存在需要访问网络的进程时才设置此端口。）

**步骤 3：配置依赖关系**
+ 如果您的容器组定义包含多个容器，则可以选择在容器之间设置依赖关系。有关更多信息，请参阅 [设置容器依赖关系](containers-design-fleet.md#containers-design-fleet-dependencies)。

**第 3 步：审核并创建**

1. 查看所有容器组定义设置。使用**编辑**功能可对任何部分进行更改，包括容器组的每个容器定义。

1. 检查完成后，选择**创建**。

   如果请求成功，控制台将显示新容器组定义资源的详细信息页面。初始状态为 `COPYING`，此时 Amazon GameLift Servers 开始为该组的所有容器映像拍摄快照。此阶段完成后，容器组定义状态将更改为 `READY`。容器组定义必须处于 `READY` 状态，才能使用它创建容器实例集。

------
#### [ AWS CLI ]

使用 AWS CLI 创建容器组定义时，请将容器定义配置保存在单独`JSON`的文件中。您可以在 CLI 命令中引用该文件。有关架构示例，请参阅[创建容器定义 `JSON` 文件](#containers-definitions-create)。

**创建容器组定义**  
要创建新的容器组定义，请使用 `create-container-group-definition` CLI 命令。有关此命令的更多信息，请参见《*AWS CLI 命令参考*》[create-container-group-definition](https://docs.aws.amazon.com/cli/latest/reference/gamelift/create-container-group-definition.html)中的。  
此示例展示了创建游戏服务器容器组定义的请求。假设您已经创建了一个包含该组容器定义的 JSON 文件。  

```
aws gamelift create-container-group-definition \
    --name MyAdventureGameContainerGroup \
    --operating-system AMAZON_LINUX_2023 \
    --container-group-type GAME_SERVER \
    --total-memory-limit-mebibytes 4096 \
    --total-vcpu-limit 1 \
    --game-server-container-definition file://MyAdventureGameContainers.json
```

------

## 创建容器定义 `JSON` 文件
<a name="containers-definitions-create"></a>

创建容器组定义时，还要为该组定义容器。容器定义需指定存储容器映像的 Amazon ECR 存储库，并可选择配置网络端口、CPU 与内存使用限制及其他设置。我们建议创建单个 `JSON` 文件，集中存储容器组中所有容器的配置。通过维护文件有助于存储、共享这些关键配置并进行版本跟踪。如果您使用 AWS CLI 创建容器组定义，则可以在命令中引用该文件。

**创建容器定义**

1. 创建并打开一个新的 `.JSON` 文件。例如：

   ```
   [~/work/glc]$ vim SimpleServer.json
   ```

1. 为该组的每个容器创建单独的容器定义。复制以下示例内容，并根据需要对其进行修改，以适应您的容器。有关容器定义语法的详细信息，请参阅 *Amazon GameLift ServersAPI 参考[ContainerDefinitionInput](https://docs.aws.amazon.com/gameliftservers/latest/apireference/API_ContainerDefinitionInput.html)*中的。

1. 将文件保存在本地，以便您可以在 AWS CLI 命令中引用该文件。

### 示例：游戏服务器容器定义
<a name="containers-definitions-create-example"></a>

**Example**  
此示例描述了游戏服务器容器组的必备容器。该必备副本容器包括您的游戏服务器应用程序、Amazon GameLift Servers 代理，也可以包括用于托管游戏的其他支持软件。定义必须包括名称、图像 URI 和端口配置。此示例还设置了一些特定于容器的资源限制。  

```
  {
    "ContainerName": "MyAdventureGameServer",
    "ImageUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/gl-containers:myadventuregame-server",
    "PortConfiguration": {
      "ContainerPortRanges": [
        {
          "FromPort": 2000,
          "Protocol": "TCP",
          "ToPort": 2010
        }
      ]
    },
    "ServerSdkVersion": "5.2.0"
  }
```