

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

# 使用Amazon GameLift Servers受管容器託管的開發藍圖
<a name="gamelift-roadmap-containers"></a>

此藍圖會引導您如何為容器化遊戲伺服器開發Amazon GameLift Servers受管託管解決方案。受管容器只是 提供的一種託管解決方案Amazon GameLift Servers。如需託管選項的詳細資訊，請參閱 [Amazon GameLift Servers 遊戲託管選項](gamelift-intro-flavors.md)。

使用 的受管容器解決方案Amazon GameLift Servers具有下列元件：
+ 包含遊戲伺服器建置的容器映像，上傳至 Amazon Elastic Container Registry (Amazon ECR) 私有儲存庫。遊戲伺服器建置與適用於 的伺服器 SDK 整合Amazon GameLift Servers，並建置在 Linux 上執行。
+ 代表遊戲用戶端與 Amazon GameLift Servers服務互動的後端服務。後端服務使用適用於 的服務 API 中的功能Amazon GameLift Servers，這是 SDK 的一部分 AWS 。
+ Amazon GameLift Servers 遊戲工作階段佇列或其他置放機制，可處理新遊戲工作階段的請求、搜尋所有機群的可用遊戲伺服器，並提示遊戲伺服器啟動遊戲工作階段。
+ （選用） FlexMatch配對建構器，可建立多玩家配對並為其設定遊戲工作階段。
+ 一或多個容器機群，使用 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體並針對多玩家遊戲託管進行最佳化。

此藍圖提供簡化的路徑，讓您的容器化遊戲伺服器能夠使用Amazon GameLift Servers受管容器成功啟動和執行。準備好必要的元件後，您可以繼續反覆執行遊戲開發，並自訂您的託管解決方案。隨著您更接近啟動，請參閱這些[準備使用 Amazon GameLift Servers 託管啟動](gamelift_quickstart_customservers_checklist.md)，以協助您準備生產層級用量的託管解決方案。

**使用這些受管容器的工具加速入門：**  
[容器入門套件](https://github.com/aws/amazon-gamelift-toolkit/tree/main/containers-starter-kit)可簡化整合和機群設定。它會為您的遊戲伺服器新增必要的遊戲工作階段管理功能，並使用預先設定的範本，為您的遊戲伺服器建置容器機群和自動化部署管道。部署之後，請使用 Amazon GameLift Servers主控台和 API 工具來監控機群效能、管理遊戲工作階段和分析指標。
對於 Unreal Engine 和 Unity 開發人員，請使用[Amazon GameLift Servers外掛程式](https://github.com/amazon-gamelift/)來整合遊戲伺服器，並從遊戲引擎的開發環境中建置容器機群。外掛程式的引導式工作流程可協助您建立快速、簡單的解決方案，並使用受管容器進行雲端託管。您可以建置此基礎，為您的遊戲建立自訂託管解決方案。

## 步驟 1：準備您的遊戲伺服器以使用 Amazon GameLift Servers
<a name="gamelift-roadmap-containers-step1"></a>

將功能新增至您的遊戲伺服器，以便在部署服務進行託管時與Amazon GameLift Servers服務通訊。
+ **為您的遊戲專案取得適用於 Amazon GameLift Servers(5.2 版或更新版本） 的伺服器 SDK。**伺服器 SDK 提供 C\+\+、C\# 和 Go 版本。 [下載適用於 的伺服器 SDKAmazon GameLift Servers](https://aws.amazon.com/gamelift/servers/getting-started-sdks/)。伺服器 SDK 提供 C\+\+、C\# 和 Go 版本。
+ **修改遊戲伺服器程式碼以新增伺服器 SDK 功能。**如需準則，請參閱[準備使用 託管的遊戲 Amazon GameLift Servers](integration-intro.md)。至少，請執行下列動作：
  + 新增程式碼以初始化 Amazon GameLift Servers SDK，並建立與 Amazon GameLift Servers服務的 WebSocket 連線。使用伺服器 SDK 動作 `InitSdk()`。
  + 新增程式碼，以在伺服器程序準備好託管遊戲工作階段時向Amazon GameLift Servers服務報告。使用伺服器 SDK 動作 `ProcessReady()`。
  + 實作所需的回呼函數 `OnStartGameSession()`、 和 `OnProcessTerminate()`。透過這些函數，遊戲伺服器程序可以維持與服務的連線Amazon GameLift Servers、在 提示時啟動遊戲工作階段Amazon GameLift Servers，以及回應結束遊戲伺服器程序的請求。
  + 新增程式碼，以在伺服器程序結束遊戲工作階段時向Amazon GameLift Servers服務報告。使用伺服器 SDK 動作 `ProcessEnding()`。
+ **封裝遊戲伺服器組建。**建置遊戲伺服器以在 Linux 上執行。準備執行遊戲伺服器所需的組建和其他檔案。如果您是在 Windows 上進行開發，此步驟可能涉及設定個別的 Linux 工作區，或使用 Windows 子系統 for Linux (WSL) 等工具。您需要 Linux 環境來測試遊戲伺服器建置，以及建置和測試容器映像。
+ **測試您的遊戲伺服器整合。**確認您的整合遊戲伺服器可以連線至 Amazon GameLift Servers服務，並回應提示。我們建議您設定簡單的 Amazon GameLift Servers Anywhere 機群，將本機工作站做為測試主機，如中所述[使用 Amazon GameLift Servers Anywhere 設定本機測試](integration-testing.md)。在測試主機上安裝遊戲伺服器建置，並啟動伺服器程序。使用 AWS CLI 請求新的遊戲工作階段，並確認Amazon GameLift Servers服務已成功提示您的伺服器程序啟動遊戲工作階段。

## 步驟 2：建立遊戲伺服器容器映像
<a name="gamelift-roadmap-containers-step2"></a>

成功整合遊戲伺服器後，請使用遊戲伺服器可執行檔建立容器映像。將它存放在 Amazon Elastic Container Registry (Amazon ECR) 儲存庫中，以便與 搭配使用Amazon GameLift Servers。如需詳細說明，請參閱 [建置 的容器映像 Amazon GameLift Servers](containers-prepare-images.md)。
+ **取得遊戲伺服器容器的 Dockerfile 範本 （由 提供Amazon GameLift Servers)。**修改遊戲伺服器建置檔案的檔案。
+ **建置遊戲伺服器容器映像。**在 Linux 環境中使用 Docker 工具來建立映像。
+ **將您的容器映像推送至 Amazon ECR。**使用您計劃部署容器機群的相同 AWS 帳戶 和 AWS 區域 ，在 Amazon ECR 中建立公有或私有儲存庫。將容器映像推送至其中。
+ **使用 Anywhere 機群測試容器映像 （選用）。**您可能想要先在本機測試容器映像，再將其部署至雲端託管的容器機群。您可以使用現有的 Amazon GameLift Servers Anywhere 機群搭配本機工作站進行測試。安裝並執行遊戲伺服器容器，並確認：(1) Amazon GameLift Servers服務成功提示您的伺服器程序啟動遊戲工作階段，以及 (2) 遊戲用戶端可以連線至遊戲工作階段。

## 步驟 3：建立以雲端為基礎的容器機群
<a name="gamelift-roadmap-containers-step3"></a>

到目前為止，您已使用自我管理的 Anywhere 機群來測試和迭代遊戲元件。當您有與 整合的工作遊戲伺服器組建時Amazon GameLift Servers，您可以開始設定生產環境所需的雲端型Amazon GameLift Servers受管容器機群託管資源。
+ **建立容器群組定義。**容器群組定義描述機群的容器架構。 並識別要部署的容器映像。請參閱 [建立容器機群的Amazon GameLift Servers容器群組定義](containers-create-groups.md)。在儲存容器映像的相同 AWS 區域 中建立容器群組定義。如需選擇機群位置的詳細資訊，請參閱[地理位置](gamelift-compute.md#gamelift-compute-location)。至少，請執行下列動作：
  + 建立遊戲伺服器容器群組定義。
  + 使用遊戲伺服器建置新增具有容器映像的容器定義。
  + 設定容器遊戲伺服器程序的連接埠範圍。
+ **建立受管容器機群。**當您建立機群時， Amazon GameLift Servers會立即開始部署遊戲伺服器組建以進行託管。您可以設定受管機群的許多層面。如需準則，請參閱[建立Amazon GameLift Servers受管容器機群](containers-build-fleet.md)。至少，請執行下列動作：
  + 設定容器機群的 AWS Identity and Access Management (IAM) 服務角色。請參閱 [設定 的 IAM 服務角色 Amazon GameLift Servers](setting-up-role.md)。
  + 指定要部署到機群執行個體的遊戲伺服器容器群組定義。
  + 使用所有其他參數可用的預設值。 會Amazon GameLift Servers計算一些參數以獲得最佳組態。
+ **將容器機群新增至佇列。**在您的遊戲工作階段佇列中，將 Anywhere 測試機群取代為您的受管容器機群。
+ **使用容器機群測試遊戲託管。**此時，您應該能夠測試整個解決方案。啟動遊戲用戶端，並透過後端服務請求遊戲工作階段。取得連線資訊並連線至容器機群上的遊戲工作階段。
+ **在您的機群部署上反覆執行。**您可以更新容器群組定義和機群組態，然後將更新部署到現有的機群。

## 步驟 4：準備您的遊戲用戶端以加入託管遊戲工作階段
<a name="gamelift-roadmap-containers-step4"></a>

為您的遊戲用戶端建立請求加入遊戲工作階段、取得連線資訊，然後直接連線至託管遊戲工作階段的方法。最常見的方法是設定後端服務功能，做為遊戲用戶端和 Amazon GameLift Servers 服務之間的中間人。此方法可保護您的託管資源，並讓您更能控制玩家如何進入遊戲工作階段。
+ **建置後端服務功能以進行託管。**後端服務會與服務通訊，Amazon GameLift Servers並將連線資訊交付至遊戲用戶端。此功能包括開始遊戲工作階段、將玩家放入遊戲，以及擷取遊戲工作階段資訊。如需準則，請參閱[準備使用 託管的遊戲 Amazon GameLift Servers](integration-intro.md)。至少，請執行下列動作：
  + 取得適用於 的 AWS 開發套件，Amazon GameLift Servers並將其新增至您的後端服務專案。請參閱[Amazon GameLift Servers用戶端服務的 SDK 資源](gamelift-supported.md#gamelift-supported-clients)。
  + 新增程式碼以初始化Amazon GameLift Servers用戶端和存放金鑰設定。請參閱 [設定 Amazon GameLift Servers API](gamelift-sdk-client-api.md#gamelift-sdk-client-api-initialize)。
  + 新增功能以呼叫 AWS SDK 動作`CreateGameSession()`，並將遊戲工作階段連線資訊提供給遊戲用戶端。請參閱[在特定機群上建立遊戲工作階段](gamelift-sdk-client-api.md#gamelift-sdk-client-api-create)。

    呼叫`CreateGameSession()`是請求新遊戲工作階段的方便起點。在準備好遊戲工作階段放置系統之後 （請參閱步驟 3)，您將以呼叫取代此程式碼 `StartGameSessionPlacement()`（或者`StartMatchmaking()`如果您使用的是 )FlexMatch。

    如需設計後端服務的指引，請參閱 [建置 的後端服務 Amazon GameLift Servers](gamelift_quickstart_customservers_designbackend.md)。
+ **將功能新增至遊戲用戶端，讓玩家加入託管遊戲工作階段。**遊戲用戶端會向您的後端服務提出請求，而不是直接向 提出Amazon GameLift Servers請求。後端服務提供遊戲工作階段連線資訊後，遊戲用戶端會直接與遊戲工作階段連線，以玩遊戲。
+ **測試您的遊戲用戶端整合。**您可以使用現有的 Amazon GameLift Servers Anywhere 機群搭配本機工作站進行測試。使用新的後端服務來請求新的遊戲工作階段，並確認：(1) Amazon GameLift Servers服務成功提示您的伺服器程序啟動遊戲工作階段，以及 (2) 遊戲用戶端可以連線至遊戲工作階段。

## 步驟 5：設定遊戲工作階段放置
<a name="gamelift-roadmap-containers-step5"></a>

自訂您希望Amazon GameLift Servers如何處理新遊戲工作階段的請求，並尋找可用的遊戲伺服器來託管它們。 Amazon GameLift Servers會自動追蹤所有機群上所有遊戲伺服器的可用性。當遊戲用戶端傳送加入遊戲工作階段的請求時， 會根據一組定義的優先順序Amazon GameLift Servers尋找「可能的最佳」配置，例如最低延遲、成本和可用性。
+ **建立遊戲工作階段佇列，以使用可用的遊戲伺服器放置新的遊戲工作階段。**佇列是遊戲工作階段放置的主要機制。如需準則，請參閱[建立遊戲工作階段佇列](queues-creating.md)。
  + 至少，將 Anywhere 機群新增為佇列中的目的地。所有其他設定都是選用的自訂。
+ **在您的後端服務程式碼中，將`CreateGameSession()`呼叫轉換為 `StartGameSessionPlacement()`。**請參閱[在多位置佇列中建立遊戲工作階段](gamelift-sdk-client-api.md#gamelift-sdk-client-api-create)。
+ **建立機制，在遊戲工作階段準備好加入時通知遊戲用戶端。**在開發過程中，您可以使用呼叫 來輪詢遊戲工作階段狀態`DescribeGameSessionPlacement`。不過，在使用佇列處理大量之前，您需要啟用事件通知。請參閱 [設定遊戲工作階段放置的事件通知](queue-notification.md)。
+ **新增FlexMatch配對 （選用）。**建置配對規則集並建立配對組態，以使用您的遊戲工作階段佇列。如需設定配對系統的指引，請參閱[Amazon GameLift Servers FlexMatch開發人員指南](https://docs.aws.amazon.com/gameliftservers/latest/flexmatchguide/match-intro.html)。
+ **測試置放系統。**您可以使用現有的 Amazon GameLift Servers Anywhere 機群搭配本機工作站進行測試。使用後端服務請求新的遊戲工作階段，並確認該Amazon GameLift Servers服務已成功提示您的伺服器程序啟動遊戲工作階段。

## 步驟 6：自訂您的受管容器解決方案
<a name="gamelift-roadmap-containers-step6"></a>

準備啟動遊戲時，您需要微調受管託管資源。要考慮的一些決策包括：
+ 最佳化您的容器機群組態。請參閱 [自訂Amazon GameLift Servers容器機群](containers-design-fleet.md)。
+ 考慮新增 Spot 機群以節省成本。請參閱 [使用 Spot 機群降低遊戲託管成本](fleets-spot.md)。
+ 如果您的遊戲伺服器需要通訊其他 AWS 資源，請設定 IAM 角色來管理存取。請參閱 [將Amazon GameLift Servers託管遊戲伺服器連接到其他 AWS 資源](gamelift-sdk-server-resources.md)。
+ 決定要在地理上放置遊戲伺服器的位置。將遠端位置新增至受管機群。請參閱 [託管資源自訂](fleets-design.md)。
+ 試用受管機群的遊戲工作階段置放選項，包括自訂優先順序設定。請參閱 [自訂遊戲工作階段佇列](queues-design.md)。
+ 設定自動容量擴展以滿足預期的玩家需求。請參閱 [使用 擴展遊戲託管容量 Amazon GameLift Servers](fleets-manage-capacity.md)。
+ 在其他 中建立機群 AWS 區域 ，並視需要修改佇列和自動擴展以處理容錯移轉。
+ 設定託管可觀測性工具，包括分析和記錄。請參閱 [監控 Amazon GameLift Servers](monitoring-overview.md)。
+ 使用[基礎設施即程式碼 (IaC)](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html) 自動化機群部署。請參閱 [使用 管理Amazon GameLift Servers託管資源 CloudFormation](resources-cloudformation.md)。

  Amazon GameLift Servers 支援將 AWS CloudFormation 範本用於任何部署特定的組態。您也可以使用 AWS Cloud Development Kit (AWS CDK) 來定義您的 Amazon GameLift Servers 資源。如需 的詳細資訊 AWS CDK，請參閱 [AWS Cloud Development Kit (AWS CDK) 開發人員指南](https://docs.aws.amazon.com/cdk/v2/guide/)。

  若要管理 CloudFormation 堆疊的部署，建議您使用持續整合和持續交付 (CI/CD) 工具和服務，例如 AWS CodePipeline。這些工具可協助您在每次建置遊戲伺服器二進位檔時，自動部署 或獲得核准。使用 CI/CD 工具或服務時，新遊戲伺服器版本的資源部署如下所示：
  + 建置和測試您的遊戲伺服器二進位檔。
  + 將二進位檔案上傳至 Amazon GameLift Servers。
  + 使用新建置部署新機群。
  + 將新機群新增至您的遊戲工作階段佇列，並移除具有先前建置版本的機群。
  + 當具有先前建置的機群不再託管作用中的遊戲工作階段時，請刪除這些機群的 CloudFormation 堆疊。