为 Amazon GameLift Servers 容器实例集创建容器组定义 - Amazon GameLift Servers

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

为 Amazon GameLift Servers 容器实例集创建容器组定义

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

开始之前

开始创建容器组定义之前的操作提示:

  • 完成容器映像的最终制作,并将其推送到您计划创建容器组的同一 AWS 区域下的 Amazon Elastic Container Registry(Amazon ECR)存储库。Amazon GameLift Servers 会在您创建容器组定义时捕获每个映像的快照,并在部署到容器实例集时使用该快照。请参阅为 Amazon GameLift Servers 构建容器映像

  • 将您的容器定义创建为 JSON 文件。容器组定义包含一个或多个容器定义。如果您使用适用于 Amazon GameLift Servers 的AWS CLI 来创建容器组定义,则可以使用这些 JSON 文件。

  • 验证您的 AWS 用户是否具有访问 Amazon ECR 存储库的 IAM 权限。请参阅Amazon GameLift Servers 的 IAM 权限示例

创建游戏服务器容器组定义

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

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

注意

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

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

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

Console

Amazon GameLift Servers 控制台中,选择要创建容器组的 AWS 区域。

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

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

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

  3. 总内存限制中,输入要为容器组中的所有容器提供的最大内存资源量。如需计算此值的帮助,请参阅设置资源限制

  4. vCPU 总限制中,输入要为容器组中的所有容器提供的最大计算能力。如需计算此值的帮助,请参阅设置资源限制

步骤 2:添加容器定义

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

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

  2. 关联到包含游戏服务器生成包的容器映像。输入公共或私有存储库中容器映像的 Amazon ECR 映像 URI。可使用以下任意一种格式:

    • 仅映像 URI:[AWS 账户].dkr.ecr.[AWS 区域].amazonaws.com/[repository ID]

    • 映像 URI + 摘要:[AWS 账户].dkr.ecr.[AWS 区域].amazonaws.com/[repository ID]@[digest]

    • 映像 URI + 标签:[AWS 账户].dkr.ecr.[AWS 区域].amazonaws.com/[repository ID]:[tag]

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

  4. 内部容器端口范围中,设置协议并定义端口范围。范围大小必须大于将在此容器中运行的并发游戏服务器进程数。如果每个游戏服务器容器仅运行一个服务器进程,则此端口范围只需设置少量端口即可。有关更多详细信息,请参阅 配置网络连接

  5. 根据需要添加更多容器以运行其他支持软件。新增容器将自动指定为支持容器。一个游戏服务器容器组只能有一个游戏服务器容器和最多八个支持容器。至少需提供以下必要设置:

    • 容器定义名称

    • ECR 映像 URI

    • 容器内部端口(仅当容器存在需要访问网络的进程时才设置此端口。)

步骤 3:配置依赖关系
  • 如果您的容器组定义包含多个容器,则可以选择在容器之间设置依赖关系。有关更多信息,请参阅 设置容器依赖关系

步骤 3:审核并创建
  1. 查看所有容器组定义设置。使用编辑功能可对任何部分进行更改,包括容器组的每个容器定义。

  2. 检查完成后,选择创建

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

AWS CLI

使用 AWS CLI 创建容器组定义时,请在单独 JSON 的文件中维护您的容器定义配置。您可以在 CLI 命令中引用该文件。有关架构示例,请参阅创建容器定义 JSON 文件

创建容器组定义

要创建新的容器组定义,请使用 create-container-group-definition CLI 命令。有关此命令的更多信息,请参阅《AWS CLI 命令参考》中的 create-container-group-definition

此示例展示了创建游戏服务器容器组定义的请求。假设您已经创建了一个包含该组容器定义的 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 文件

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

创建容器定义
  1. 创建并打开一个新的 .JSON 文件。例如:

    [~/work/glc]$ vim SimpleServer.json
  2. 为该组的每个容器创建单独的容器定义。复制以下示例内容,并根据需要对其进行修改,以适应您的容器。有关容器定义语法的详细信息,请参阅《Amazon GameLift Servers API 参考》中的 ContainerDefinitionInput

  3. 将文件保存在本地,以便在 AWS CLI 命令中引用该文件。

此示例描述了游戏服务器容器组的必备容器。该必备副本容器包括您的游戏服务器应用程序、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" }