本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用以下方法管理资源Amazon CloudFormation
您可以使用Amazon CloudFormation来管理您的亚马逊 GameLift 资源。在 Amazon CloudFormation 中,您可以创建对每个资源构建模型的模板,然后使用该模板创建资源。要更新资源,您可以对模板进行更改,然后使用 Amazon CloudFormation 实施更新。您可以将资源按照称为堆栈和堆栈集的逻辑组排列。
Amazon CloudFormation使用维护您的亚马逊 GameLift 托管资源为管理Amazon资源集提供了一种更有效的方法。您可以使用版本控制来跟踪模板随时间推移的更改,并协调由多个团队成员进行的更新。您还可以重复使用模板。例如,在跨区域部署游戏时,您可以在各个区域中使用相同的模板创建相同的资源。您还可以使用这些模板在另一个分区中部署相同的资源集。
有关 Amazon CloudFormation 的更多信息,请参阅《Amazon CloudFormation 用户指南》。要查看亚马逊 GameLift 资源的模板信息,请参阅亚马逊 GameLift 资源类型参考。
最佳实践
有关使用的详细指导Amazon CloudFormation,请参阅《Amazon CloudFormation用户指南》中的Amazon CloudFormation最佳实践。此外,这些最佳实践与亚马逊特别相关 GameLift。
-
通过以下方式持续管理您的资源Amazon CloudFormation。如果您在资源之Amazon CloudFormation外更改资源,则会与您的资源模板不同步。
-
使用 Amazon CloudFormation 堆栈和堆栈集高效管理多个资源。
-
如果您使用 Spot 实例,请包括按需队组作为备份。我们建议您在模板中设置两个队列,一个队列使用 Spot 实例,一个队列包含按需实例。
-
当您在多个位置管理资源时,将特定位置的资源和全球资源分组到不同的堆栈中。
-
将您的全球资源放在使用它的服务附近。队列和配对配置等资源往往会收到来自特定来源的大量请求。通过将资源置于这些请求的来源附近,可以最大限度地减少请求的行程时间,并可以提高整体性能。
-
将您的对战配置放在与使用它的游戏会话队列相同的区域中。
-
为堆栈中的每个队组创建一个单独的别名。
使用Amazon CloudFormation堆栈
我们建议在为亚马逊 GameLift资源设置Amazon CloudFormation堆栈时使用以下结构。您的最佳堆栈结构会有所不同,具体取决于您是在一个位置还是在多个位置部署游戏。
单个位置的堆栈
要在单个位置管理 Amazon GameLift 资源,我们建议采用双栈结构:
-
Support 堆栈 — 此堆栈包含您的亚马逊 GameLift 资源所依赖的资源。此堆栈至少应包括您存储自定义游戏服务器或 Realtime 脚本文件的 S3 存储桶。堆栈还应包含 IAM 角色,该角色 GameLift 允许亚马逊在创建 Amazon GameLift 构建或脚本资源时从 S3 存储桶检索您的文件。此堆栈还可能包含与您的游戏一起使用的其他Amazon资源,例如 DynamoDB 表、Amazon Redshift ft 集群和 Lambda 函数。
-
Amazon GameLift 堆栈 — 此堆栈包含您的所有 Amazon GameLift 资源,包括编译或脚本、一组舰队、别名和游戏会话队列。 Amazon CloudFormation使用存储在 S3 存储桶位置中的文件创建构建或脚本资源,并将构建或脚本部署到一个或多个队列资源。每个队组都应该具有一个对应的别名。游戏会话队列引用部分或全部队组别名。如果您 FlexMatch 用于配对,则此堆栈还包含配对配置和规则集。
下图说明了用于在单个 Amazon 区域中部署资源的双堆栈结构。

多个区域的堆栈
在多个区域中部署游戏时,请注意资源如何跨区域进行交互。某些资源,例如亚马逊 GameLift 队列,只能引用同一区域的其他资源。其他资源,例如亚马逊 GameLift 队列,不受区域限制。要管理多个地区的亚马逊 GameLift 资源,我们建议采用以下结构。
-
区域支持堆栈 — 这些堆栈包含您的亚马逊 GameLift 资源所依赖的资源。此堆栈必须包括您存储自定义游戏服务器或 Realtime 脚本文件的 S3 存储桶。它还可能包含游戏的其他Amazon资源,例如 DynamoDB 表、Amazon Redshift ft 集群和 Lambda 函数。这些资源中有许多是特定区域的,因此您必须在每个区域中创建它们。Amazon GameLift 还需要一个 IAM 角色。由于 IAM 角色不受区域限制,因此您只需要一个角色资源,放置在任何区域并在所有其他支持堆栈中引用。
-
亚马逊区域 GameLift 堆栈 — 此堆栈包含部署游戏的每个区域中必须存在的亚马逊 GameLift 资源,包括编译版本或脚本、一组舰队和别名。 Amazon CloudFormation使用 S3 存储桶位置中的文件创建构建或脚本资源,并将构建或脚本部署到一个或多个队列资源。每个队组都应该具有一个对应的别名。游戏会话队列引用部分或全部队组别名。您可以维护一个模板,用于描述这种类型的堆栈并将其用于在每个区域中创建相同的资源集。
-
全球亚马逊 GameLift 堆栈 —此堆栈包含您的游戏会话队列和配对资源。这些资源可以位于任意区域中,通常放置在相同区域。队列可以引用位于任意区域中的队组或别名。要在不同的区域中放置其他队列,请创建另外的全局堆栈。
下图说明了在多个 Amazon 区域中部署资源的多堆栈结构。第一张图显示了单个游戏会话队列的结构。第二张图显示了多个队列的结构。


更新版本
亚马逊的 GameLift 版本是不可改变的,版本和舰队之间的关系也是如此。因此,当您更新托管资源以使用一组新的游戏生成包文件时,必须执行以下操作:
-
使用一组新文件创建新生成包(替换)。
-
创建一个新的队组集合以部署新游戏生成包(替换)。
-
重定向别名以指向新队组(无中断更新)。
有关更多信息,请参阅Amazon CloudFormation用户指南中的更新堆栈资源的行为。
自动部署版本更新
更新包含相关生成包、队组和别名资源的堆栈时,默认 Amazon CloudFormation 行为是自动执行序列中的这些步骤。通过先将新生成包文件上传到新的 S3 位置即可触发此更新。然后,您修改 Amazon CloudFormation 生成包模板以指向新 S3 位置。使用新 S3 位置更新堆栈时,这将触发以下 Amazon CloudFormation 序列:
-
从 S3 检索新文件,验证文件并创建新的 Amazon GameLift 版本。
-
在队列模板中更新生成包引用,该引用将触发新队组创建。
-
新队组处于活动状态之后,更新别名中的队组引用,这将触发将别名更新以指向新队组。
-
删除旧队组。
-
删除旧生成包。
如果您的游戏会话队列使用队组别名,则玩家流量会在更新别名之后自动切换到新队组。在游戏会话结束时,旧队组中的玩家逐渐全部退出。在玩家流量波动时,Auto-scaling 处理在每个队组集合中添加和删除实例的任务。或者,您可以指定所需的初始实例计数,以便快速增加切换并在稍后启用 Auto-scaling。
您还可以让 Amazon CloudFormation 保留资源而不是删除资源。有关更多信息,请参阅《Amazon CloudFormation API 参考》中的 RetainResources。
手动部署版本更新
在希望更好地控制什么时候为玩家上线新队组时,您可以利用一些选项。您可以选择使用亚马逊 GameLift 控制台或 CLI 手动管理别名。或者,您无需更新生成包模板以替换生成包和队组,而是可以向模板添加第二个生成包和队组定义集合。当您更新模板时,Amazon CloudFormation 创建第二个生成包资源和相应的队组。由于未替换现有资源,因此这些资源不会被删除,别名仍然指向原始队组。
这种方法的主要优点在于向您提供了灵活性。您可以为生成包的新版本创建单独的资源,测试新资源,并控制何时为玩家上线新队组。这种方法的一个潜在缺点是,在很短的一段时间内,它在各个区域中需要两倍的资源。
下图阐明了此过程。

回的工作原原原原原原原
执行资源更新时,如果任何步骤未成功完成,Amazon CloudFormation 将自动启动回滚。此过程反向执行序列中的各个步骤,删除新创建的资源。
如果您需要手动触发回滚,请将构建模板的 S3 位置键更改回原始位置并更新堆栈。创建了新的 Amazon GameLift 版本和舰队,在舰队活跃后,别名会切换到新舰队。如果您要单独管理别名,则需要将其切换为指向新队组。
有关如何处理回滚失败或卡住的更多信息,请参阅《Amazon CloudFormation用户指南》中的 “继续回滚更新”。