

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

# 使用 進行混合託管的開發藍圖 Amazon GameLift Servers
<a name="gamelift-roadmap-hybrid"></a>

此藍圖引導您如何為多玩家遊戲開發託管解決方案。 Amazon GameLift Servers提供多種遊戲託管選項；如需這些選項的詳細資訊，請參閱 [Amazon GameLift Servers 遊戲託管選項](gamelift-intro-flavors.md)。

混合解決方案使用託管資源的組合，包括由 管理的雲端資源Amazon GameLift Servers和您自己的自我管理託管資源。如需混合託管的更詳細討論，請參閱以下文章：[使用 Amazon GameLift Servers Anywhere 託管混合遊戲伺服器](https://aws.amazon.com/blogs/gametech/hybrid-game-server-hosting-with-amazon-gamelift-anywhere/)。使用 Amazon GameLift Servers，您可以設定使用常見元件和程序的混合解決方案，以便集中管理全域機群，並在所有類型的資源之間輕鬆移動負載。

混合架構包含下列元件：
+ 與適用於 的伺服器 SDK 整合的單一遊戲伺服器建置Amazon GameLift Servers，可跨所有機群部署。
+ 與 SDK 整合的 AWS 單一遊戲用戶端和後端服務，可與服務互動Amazon GameLift Servers並請求遊戲工作階段。
+ 共用Amazon GameLift Servers佇列，可放置具有可用遊戲伺服器的新遊戲工作階段，並平衡所有機群的負載。
+ （選用） 隨 Anywhere 機群一起部署的程序管理員代理程式，可簡化所有機群中跨運算的伺服器程序管理任務。
+ （選用） FlexMatch配對建構器，可建立多玩家配對並為其設定遊戲工作階段。
+ 一或多個Amazon GameLift Servers受管機群，使用針對多玩家遊戲託管最佳化的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。
+ 一或多個 Amazon GameLift Servers Anywhere 機群，使用您現有的內部部署或其他託管資源，包括您的組態管理和部署工具。（您可以選擇使用 AWS Systems Manager。)

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

**開始使用 Amazon GameLift Servers 外掛程式**  
如果您使用 Unreal Engine 或 Unity 開發專案，請開始設定遊戲以使用Amazon GameLift Servers外掛程式託管。使用 外掛程式，您可以將Amazon GameLift ServersSDKs新增至您的遊戲專案，並使用引導式工作流程，透過 Anywhere 機群和 Amazon GameLift Servers受管機群來建置簡單的混合式託管解決方案工作版本。然後，您可以使用這些基礎知識來建置和視需要自訂。

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

將功能新增至您的遊戲伺服器，以便在部署服務進行託管時與Amazon GameLift Servers服務通訊。如果遊戲伺服器是在Amazon GameLift Servers受管機群或 Anywhere 機群上執行，則需要相同的功能。
+ **為您的遊戲專案取得適用於 Amazon GameLift Servers(5.x 版） 的伺服器 SDK。  **伺服器 SDK 提供 C\$1\$1、C\$1 和 Go 版本。[下載適用於 的伺服器 SDKAmazon GameLift Servers](https://aws.amazon.com/gamelift/servers/getting-started-sdks/)。
+ **修改遊戲伺服器程式碼以新增伺服器 SDK 功能。**如需準則，請參閱[準備使用 託管的遊戲 Amazon GameLift Servers](integration-intro.md)。至少，請執行下列動作：
  + 新增程式碼以初始化 Amazon GameLift Servers SDK，並建立與 Amazon GameLift Servers服務的 WebSocket 連線。使用伺服器 SDK 動作 `InitSdk()`。在 Anywhere 機群運算上執行時，包含指定伺服器參數的程式碼。
  + 新增程式碼，以在伺服器程序準備好託管遊戲工作階段時向Amazon GameLift Servers服務報告。使用伺服器 SDK 動作 `ProcessReady()`。
  + 實作必要的回呼函數 `OnProcessTerminate()`、 和 `OnStartGameSession()`。透過這些函數，遊戲伺服器程序可以維持與服務的連線Amazon GameLift Servers、在 提示時啟動遊戲工作階段Amazon GameLift Servers，以及回應結束遊戲伺服器程序的提示。
  + 新增程式碼，以在伺服器程序結束遊戲工作階段時向Amazon GameLift Servers服務報告。使用伺服器 SDK 動作 `ProcessEnding()`。
+ **封裝遊戲伺服器組建。**使用建置檔案、相依性和支援的軟體建立安裝指令碼。請參閱 [封裝遊戲建置檔案](gamelift-build-packaging.md)。建議使用 Amazon Simple Storage Service (Amazon S3) 儲存貯體來存放遊戲組建的版本。
+ **測試您的遊戲伺服器整合。**對於此任務，我們建議使用本機工作站設定 Amazon GameLift Servers Anywhere 機群，如中所述[使用 Amazon GameLift Servers Anywhere 設定本機測試](integration-testing.md)。在此步驟中，請手動將遊戲伺服器建置安裝到測試裝置上，並啟動伺服器程序。使用 AWS CLI 請求新的遊戲工作階段，並確認Amazon GameLift Servers服務是否成功提示您的伺服器程序啟動遊戲工作階段。

## 步驟 2：準備您的遊戲用戶端以加入託管遊戲工作階段
<a name="gamelift-roadmap-hybrid-step2"></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 機群進行測試。

  在開發階段，如果您想要測試遊戲組建在Amazon GameLift Servers受管機群中的行為，我們建議您也設定[雲端型測試環境](integration-dev-iteration-cloud.md)。此 Amazon GameLift Servers Toolkit 解決方案模擬受管機群的行為，但可讓您以最短的周轉時間更新遊戲伺服器組建。

## 步驟 3：設定遊戲工作階段置放
<a name="gamelift-roadmap-hybrid-step3"></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)。

## 步驟 4：使用 Amazon GameLift Servers 代理程式設定 Anywhere 機群
<a name="gamelift-roadmap-hybrid-step4"></a>

到目前為止，您一直使用本機裝置 （註冊為 Anywhere 機群運算） 來測試和迭代遊戲元件。下一個步驟是設定生產系統所需的機群類型。從 Anywhere 機群開始，並新增 Amazon GameLift Servers 代理程式來管理一些關鍵的運算上主機管理任務。如需詳細資訊，請參閱[使用 Amazon GameLift Servers 代理程式](integration-dev-iteration-agent.md)。
+ **取得 Amazon GameLift Servers 代理程式，並將其新增至遊戲伺服器安裝套件。**取得並建置 Agent [Amazon GameLift Servers GitHub 儲存庫中的 Agent](https://github.com/aws/amazon-gamelift-agent) 原始程式碼。將產生的 JAR 檔案可執行檔放在與遊戲組建可執行檔相同的目錄中。
+ **視需要修改 代理程式的啟動指令碼。**確保在運算開始執行後立即啟動代理程式可執行檔。如需在託管運算上安裝和執行 代理程式的協助，請參閱 代理程式儲存庫中的讀我檔案。您的啟動命令應至少包含指定 Anywhere 機群 ID AWS 區域和自訂位置以及運算名稱的選項。

  代理程式會自動為您處理下列任務，因此如果您一直使用指令碼處理這些任務，您可以移除它們：
  + 呼叫 `RegisterCompute()` 將運算新增至 Anywhere 機群。
  + 當遊戲伺服器連線到 Amazon GameLift Servers 服務時，呼叫 `GetComputeAuthToken()`來驗證遊戲伺服器。代理程式會管理取得和重新整理身分驗證權杖，以供在運算上執行的所有遊戲伺服器程序使用。
  + 根據一組執行時間指示，在運算上啟動新的伺服器程序。
+ **為 Anywhere 機群中的運算建立執行期組態。 **至少，指定遊戲伺服器可執行檔的啟動路徑。您可以使用 Amazon GameLift Servers主控台或 AWS CLI 來建立或修改機群的執行時間指示。代理程式會執行這些指示，並定期向 Amazon GameLift Servers服務請求更新。
+ **視需要設定或修改遊戲工作階段佇列。**建立新的佇列 （或更新現有的佇列），並為隨 Amazon GameLift Servers 代理程式部署的 Anywhere 機群指定目的地。
+ **測試 代理程式與 Anywhere 機群的整合。 **檢查 代理程式是否根據執行時間組態正確啟動伺服器程序。

## 步驟 5：建立受管雲端型機群
<a name="gamelift-roadmap-hybrid-step5"></a>

建立Amazon GameLift Servers受管 EC2 機群以補充您的 Anywhere 機群。如果您在步驟 2 中設定雲端型測試環境以加速開發，請在完成大部分的遊戲開發和測試後，計劃建立受管機群。您需要全受管機群來設定和測試其他設定，例如自動容量擴展。
+ **封裝遊戲伺服器建置並上傳至 Amazon GameLift Servers。**使用建置檔案、相依性和支援的軟體建立安裝指令碼。您可以搭配 Anywhere 和受管機群使用相同的建置軟體。請參閱 [為 建立遊戲伺服器組建 Amazon GameLift Servers](gamelift-build-cli-uploading.md)。您可以使用 主控台或 Amazon GameLift Servers CLI 將組建上傳至 AWS 。

  在上傳建置之前，先決定 AWS 區域 您要建立受管機群的內容。您必須將組建上傳到相同的區域。如需選擇機群位置的詳細資訊，請參閱[地理位置](gamelift-compute.md#gamelift-compute-location)。
+ **建立受管 EC2 機群。**您可以使用 Amazon GameLift Servers主控台或 AWS CLI 來建立受管機群。當您建立機群時， 會Amazon GameLift Servers立即開始部署遊戲伺服器組建以進行託管。您可以設定受管機群的許多層面。如需準則，請參閱[建立Amazon GameLift Servers受管 EC2 機群](fleets-creating.md)。至少，請執行下列動作：
  + 為機群命名並指定要部署的上傳遊戲組建。
  + 選擇機群的隨需執行個體，然後選取機群位置中可用的執行個體類型。Spot 機群是寶貴的選項，但需要額外的設計和組態。
  + 使用與 Anywhere 機群搭配使用的類似設定來建立執行期組態。至少，指定遊戲伺服器可執行檔的啟動路徑。
  + 指定連接埠設定，以允許傳入流量存取您的遊戲伺服器。
+ **將受管機群新增至共用遊戲工作階段佇列。**從步驟 4 更新佇列，使其包含受管機群和隨 Amazon GameLift Servers 代理程式部署的 Anywhere 機群的目的地。
+ **使用受管機群測試遊戲託管。**此時，您應該能夠測試整個託管週期，讓遊戲用戶端請求遊戲工作階段、取得連線資訊，以及成功連線到遊戲工作階段。

## 步驟 6：自訂您的機群
<a name="gamelift-roadmap-hybrid-step6"></a>

準備啟動遊戲時，您需要微調託管解決方案。要考慮的一些決策包括：
+ 對於 Anywhere 機群，請視需要自動化啟動和關閉運算的程序，包括安裝和執行遊戲伺服器軟體。回收運算有助於確保它們定期更新，而關閉運算可以在不需要時節省成本。
+ 如果您的遊戲伺服器需要通訊其他 AWS 資源，請設定 IAM 角色來管理存取。請參閱 [將Amazon GameLift Servers託管遊戲伺服器連接到其他 AWS 資源](gamelift-sdk-server-resources.md)。
+ 決定您要在地理上放置遊戲伺服器的位置。將遠端位置新增至受管機群。請參閱 [託管資源自訂](fleets-design.md)。
+ 對於受管機群，請考慮使用 Spot 機群來節省成本。請參閱 [使用 Spot 機群降低遊戲託管成本](fleets-spot.md)。
+ 透過選取運算資源組態來最佳化機群效能，然後設定執行時間指示，以執行每個運算的最佳伺服器程序數量。同時為 Anywhere 機群和受管機群執行此操作。請參閱 [最佳化受管 上的遊戲伺服器執行期組態 Amazon GameLift Servers](fleets-multiprocess.md)。
+ 試用受管機群的遊戲工作階段置放選項，包括自訂優先順序設定。請參閱 [自訂遊戲工作階段佇列](queues-design.md)。
+ 對於受管機群，設定自動容量擴展以滿足預期的玩家需求。請參閱 [使用 擴展遊戲託管容量 Amazon GameLift Servers](fleets-manage-capacity.md)。
+ 對於 Anywhere 機群，建立機制來處理手動或自動化容量擴展，以滿足預期的玩家需求。
+ 視需要設計和實作容錯移轉至其他資源。在其他 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 堆疊。