

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

# 容器在 中的運作方式 Amazon GameLift Servers
<a name="containers-howitworks"></a>

Amazon GameLift Servers 容器機群旨在讓您靈活地部署和擴展容器化應用程式。它使用 Amazon Elastic Container Service (Amazon ECS) 來管理機Amazon GameLift Servers群的任務部署和執行。本主題說明在Amazon GameLift Servers受管機群上執行容器的基本結構元素、說明常見架構，並概述一些核心概念。

**使用這些受管容器的工具加速入門：**  
[容器入門套件](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/)來整合遊戲伺服器，並從遊戲引擎的開發環境中建置容器機群。外掛程式的引導式工作流程可協助您使用受管容器建立快速、簡單的雲端託管解決方案。然後在此基礎上建置，為您的遊戲建立自訂託管解決方案。

## 容器機群元件
<a name="containers-howitworks-components"></a>

**機群**  
容器機群是 Amazon EC2 執行個體的集合，用於託管您的容器化遊戲伺服器。這些執行個體是由 Amazon GameLift Servers 代表您管理。當您建立機群時，您可以設定 容器架構與遊戲伺服器軟體如何部署到每個機群執行個體。您可以在一或多個地理位置中建立具有執行個體的容器機群。您可以使用Amazon GameLift Servers擴展工具自動擴展容器機群的容量，以託管遊戲工作階段和玩家。

**執行個體**  
Amazon EC2 執行個體是虛擬伺服器，可為遊戲託管提供運算容量。使用 Amazon GameLift Servers，您可以從各種執行個體類型中進行選擇。每種執行個體類型都提供不同的 CPU、記憶體、儲存和聯網容量組合。  
當您建立容器機群時， Amazon GameLift Servers 會根據您選擇的執行個體類型和機群組態來部署容器。每個部署的機群執行個體都相同，並以相同方式執行容器化遊戲伺服器軟體。機群中的執行個體數量決定機群的大小和遊戲託管容量。

**容器群組**  
Amazon GameLift Servers 使用容器群組的概念來描述和管理一組容器。容器群組類似於容器「任務」或「Pod」。在每個容器群組中，您可以定義容器的行為、設定相依性，以及共用可用的 CPU 和記憶體資源。  
每個機群執行個體可以有下列類型的容器群組：  
+ **遊戲伺服器容器群組**會管理執行遊戲伺服器應用程式和支援軟體的容器。容器機群必須具有其中一種容器群組，才能託管遊戲工作階段和玩家。遊戲伺服器容器群組可以跨機群執行個體複寫。每個機群執行個體的遊戲伺服器群組複本數量取決於軟體的運算需求，以及執行個體上可用的運算資源。
+ **每個執行個體容器群組**是選用的，可讓您在每個機群執行個體上執行其他軟體。它們適用於執行背景服務或公用程式，例如用於監控。您的遊戲伺服器軟體不會直接依賴每個執行個體群組中的程序。每個機群執行個體只會部署一個執行個體容器群組的副本。
容器機群中的每個容器群組都有一個指定為「必要」的容器。基本容器可驅動容器群組的生命週期。如果基本容器失敗，整個容器群組會重新啟動。

**容器**  
容器是容器型架構中最基本的元素。它包含具有軟體可執行檔和相依檔案的容器映像。定義容器，以設定軟體如何執行並與 互動Amazon GameLift Servers。  
Amazon GameLift Servers 定義兩種類型的容器：  
+ **遊戲伺服器容器**包含執行遊戲伺服器程序和為玩家託管遊戲工作階段所需的一切。它包含您的遊戲伺服器建置和相依的軟體。為機群的遊戲伺服器容器群組定義一個遊戲伺服器容器。遊戲伺服器容器會自動被視為對容器群組至關重要。
+ **支援容器**會執行其他軟體來支援您的遊戲伺服器。它類似於「附屬」容器的概念。它可讓您選擇搭配遊戲伺服器執行和擴展支援軟體，但管理為個別容器。在遊戲伺服器容器群組中，您可以定義零或多個支援容器。在每個執行個體容器群組中，所有容器都是支援容器。任何支援容器都可以指定為必要。

**運算**  
運算代表機群執行個體上遊戲伺服器容器群組的複本。

## 常見架構
<a name="containers-howitworks-architecture"></a>

下圖說明最簡單的容器機群結構。在此結構中，機群中的每個執行個體都會維護一個遊戲伺服器容器群組的副本。容器群組具有執行一個遊戲伺服器程序的單一遊戲伺服器容器。在此範例中，容器機群設定為為每個執行個體放置一個遊戲伺服器容器群組的副本。使用此架構，每個執行個體都會執行一個遊戲伺服器程序。

![\[簡單容器架構的範例，在遊戲伺服器容器群組中具有單一遊戲伺服器容器。\]](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/container_architecture_simple.png)


第二個圖表說明更複雜的容器機群架構。在此結構中，機群同時具有遊戲伺服器容器群組和每個執行個體容器群組。遊戲伺服器容器群組具有遊戲伺服器程序和支援程序的個別容器。機群設定為在每個機群執行個體上放置三個遊戲伺服器容器群組的副本。每個執行個體容器群組永遠不會複寫。在此範例中，容器機群設定為為每個執行個體放置三個遊戲伺服器容器群組的副本。使用此架構，每個執行個體都會執行三個遊戲伺服器程序。

![\[在遊戲伺服器容器群組中具有多個容器的容器架構範例，以及每個執行個體容器群組中具有一個容器的範例。\]](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/container_architecture_complex.png)


## 核心功能
<a name="containers-howitworks-concepts"></a>

本節摘要說明 如何Amazon GameLift Servers實作一些基本容器概念。如需如何使用容器機群的指示，請參閱本指南中的相關主題。

### 作用中機群更新
<a name="containers-howitworks-concepts-updating"></a>

受管容器提供進階支援，協助您管理託管軟體和容器架構的生命週期。您可以更新容器定義，包括容器映像，並將變更部署到現有的機群。此功能可讓您在開發期間更快速且更輕鬆地重複容器的變更。它也提供可協助您建置、部署和追蹤一段時間內軟體版本更新的功能。這些功能包括：
+ 管理容器群組定義更新和版本控制。您可以更新容器群組定義的幾乎所有屬性，包括容器映像和組態設定。每當您更新容器時， Amazon GameLift Servers會自動指派版本編號給更新，且預設會維護所有版本。您可以存取任何特定版本，也可以視需要刪除版本。建立容器機群時，您可以指定要部署的容器群組定義和版本。
+ 使用新的容器群組定義和組態設定更新現有的容器機群。您可以將容器更新部署到已部署到機群執行個體的機群。您可以使用 AWS 管理主控台 或 AWS SDK 和 CLI，追蹤每個機群位置的更新部署狀態。
+ 設定您希望機群更新在作用中機群之間部署的方式。
  + 遊戲工作階段保護。選擇在遊戲工作階段結束 （安全部署） 之前，使用作用中的遊戲工作階段保護機群執行個體。或者，選擇取代機群執行個體，無論遊戲工作階段活動為何 （不安全的部署）。在開發和測試階段使用不安全的部署，以減少部署時間。
  + 運作狀態百分比下限。指定您要在部署期間維護的正常運作任務百分比。此功能可讓您決定部署期間受影響的機群執行個體數量。低值會優先考慮部署速度，而高值則可確保在整個部署期間維持較高的遊戲伺服器可用性。
  + 部署失敗策略。決定部署失敗時要採取的動作。部署失敗表示某些更新的容器狀態檢查失敗，並被視為受損。您可以設定部署，將所有機群執行個體自動復原至先前部署的狀態。或者，您可以選擇維護一些受損的機群執行個體，以用於偵錯。

當您想要將更新部署到遊戲伺服器軟體時，更新作用中機群的功能非常有用。在您為遊戲伺服器建立新的容器映像之後，部署它是一個兩步驟的程序：首先，使用新映像更新容器群組定義，再接著更新容器機群。 會視需要Amazon GameLift Servers處理所有其他任務。

### 容器包裝
<a name="containers-howitworks-concepts-packing"></a>

開發容器結構以在容器機群中部署時，常見的目標是最佳化您使用的可用運算能力。為了達成此目標，您想要將盡可能多的遊戲伺服器容器群組封裝到每個機群執行個體。

Amazon GameLift Servers 根據下列資訊，計算每個執行個體的遊戲伺服器容器群組上限，協助您達成此目的：
+ 機群的執行個體類型及其 vCPU 和記憶體資源。
+ 遊戲伺服器容器群組中所有容器的 vCPU 和記憶體需求。

  每個執行個體容器群組中所有容器的 vCPU 和記憶體需求，如果有的話。

建立容器機群時，您可以使用計算的最大值，也可以指定所需的數字。最佳實務是計劃試驗容器化遊戲伺服器軟體，以判斷最佳遊戲伺服器效能的資源需求。

### 容量擴展
<a name="containers-howitworks-concepts-scaling"></a>

機群容量會測量機群可以同時託管的遊戲工作階段數量。您也可以根據機群可支援的並行玩家數量來測量容量。若要增加或減少機群的託管容量，您可以新增或移除機群執行個體。

容器機群設定為在每個機群執行個體上執行特定數量的並行遊戲伺服器程序。（您可以根據 (1) 每個執行個體的遊戲伺服器容器群組和 (2) 每個容器群組中執行的遊戲伺服器程序數目來計算。) 每個執行個體的 cncurrent 遊戲伺服器數量會告訴您新增或移除每個機群執行個體的影響。例如，如果您的容器機群在每個遊戲伺服器容器群組中執行 1 個遊戲伺服器程序，且每個機群執行個體都擁有 100 個遊戲伺服器容器群組，則您可以增加或減少機群託管並行遊戲工作階段的容量，增量為 100。如果每個遊戲工作階段都有 10 個玩家插槽，則您可以增加或減少機群託管玩家的容量，增量為 1000。

透過容器機群，您可以使用 提供的任何容量擴展方法Amazon GameLift Servers。其中包含：
+ 透過設定所需的機群執行個體計數，手動設定機群容量。
+ 透過鎖定可用執行個體的所需緩衝 （目標追蹤） 來設定自動擴展。此方法會自動維護一定數量的閒置託管資源，以便傳入的玩家可以快速進入遊戲。隨著玩家需求增加或減少，會持續調整此緩衝區的大小。
+ 使用自訂擴展規則設定自動擴展 （進階功能）。此方法可讓您根據您選擇的機群指標進行擴展。

### 遊戲用戶端/伺服器連線
<a name="containers-howitworks-concepts-networking"></a>

透過 Amazon GameLift Servers 受管機群，遊戲用戶端會直接連線至雲端託管的遊戲伺服器。當遊戲用戶端要求加入遊戲時， 會Amazon GameLift Servers尋找遊戲工作階段，並向遊戲用戶端提供連線資訊 (IP 和連接埠）。您可以為機群開啟特定連接埠範圍 （傳入許可），以控制機群執行個體的外部存取。傳入許可會決定哪些連接埠開放給傳入流量。您可以快速關閉所有連接埠、限制為幾個連接埠，或開啟所有連接埠。

受管容器機群需要額外的設定，允許存取在容器中執行的程序。當您建立容器定義時，您可以指定一組連接埠，每個接受連線的程序各一個連接埠。其中包含：
+ 將在遊戲伺服器容器中同時執行的所有遊戲伺服器程序。所有遊戲伺服器程序都必須允許遊戲用戶端連線，才能加入遊戲工作階段。
+ 支援容器中任何外部來源需要連線的程序。例如，您可以遠端連線至測試應用程式。

當您設定面向內部的容器連接埠設定時， Amazon GameLift Servers 會使用它們來計算遊戲用戶端和其他應用程式可以連線的對外傳入許可。 Amazon GameLift Servers也會管理傳入許可與個別容器連接埠之間的映射，讓玩家能夠存取容器中的遊戲工作階段。此內部映射透過保護您的遊戲伺服器免於直接存取容器連接埠，提供一層安全性。您可以選擇視需要自訂機群的對外連接埠設定。如需手動設定容器機群連接埠的詳細資訊，請參閱 [設定網路連線](containers-design-fleet.md#containers-custom-network)。

您可以隨時修改容器機群的連接埠設定。此變更需要機群更新部署。

下圖說明跨容器機群的連接埠連線角色。如圖所示，您在個別容器上設定連接埠，Amazon GameLift Servers並使用此資訊在機群執行個體上設定足夠的連接埠，以對應至每個容器連接埠。除非您選擇手動設定，否則外部執行個體傳入許可和內部連線連接埠都會由 Amazon GameLift Servers 為您的機群計算。

![\[容器機群的連接埠設定圖例。連接埠映射可讓外部流量連線至機群執行個體，並存取執行個體上的個別容器。\]](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/container_design_networking.png)


### 容器記錄
<a name="containers-howitworks-concepts-logging"></a>

在受管容器機群中，會擷取所有容器的標準輸出 （和標準錯誤） 串流。這包括遊戲伺服器的遊戲工作階段日誌。您可以設定容器機群使用下列其中一個選項來處理輸出串流：
+ 將容器輸出儲存為 Amazon CloudWatch 日誌串流。每個日誌串流都會參考機群 ID 和容器。如果您為機群選擇此記錄選項，您可以指定 CloudWatch 日誌群組，以組織機群中的所有日誌串流。然後，您可以視需要使用 CloudWatch 功能來搜尋和分析日誌資料。
+ 將容器輸出儲存至 Amazon Simple Storage Service (Amazon S3) 儲存貯體。您可以視需要檢視、共用或下載內容。
+ 關閉記錄。在此案例中，不會儲存容器輸出。

Amazon GameLift Servers 會將日誌資料從受管容器機群傳送至您 AWS 帳戶中的 CloudWatch 或 Amazon S3 服務。若要檢視您的資料，請登入 AWS 您的帳戶並使用個別 服務，以使用 AWS 管理主控台 或其他工具。您可以透過為容器機群建立服務角色，將有限的存取權擴展Amazon GameLift Servers至 以採取這些動作。

您可以隨時修改容器機群的記錄組態。此變更需要機群更新部署。

### 容器機群和 Amazon GameLift Servers 代理程式
<a name="containers-howitworks-concepts-agent"></a>

常用的容器架構會在每個容器中執行單一程序。在 Amazon GameLift Servers容器機群中，遊戲伺服器容器群組有一個遊戲伺服器容器，其會執行一個遊戲伺服器程序。使用此架構時， 會Amazon GameLift Servers管理機群執行個體上每個遊戲伺服器容器群組中單一遊戲伺服器程序的生命週期。

如果您選擇建置容器架構，在每個遊戲伺服器容器群組中執行多個遊戲伺服器程序，您需要一種方法來管理所有程序的生命週期。這包括任務，例如視需要啟動、關閉和取代程序、管理要同時執行的所需程序數量，以及處理失敗狀態。

您可以選擇對這些任務使用 Amazon GameLift Servers 代理程式。對於容器機群， 代理程式會實作執行時間指示，指定要執行的可執行檔 （和數量）、提供啟動參數，以及設定遊戲伺服器啟用的相關規則。例如，執行時間指示可能會指示 代理程式維護十個遊戲伺服器程序以供生產使用，以及一個遊戲伺服器程序搭配特殊啟動參數用於測試。

若要將 代理程式與容器機群搭配使用，請將 代理程式新增至容器映像，並包含一組執行時間指示。如需 代理程式的詳細資訊，請參閱 [使用 Amazon GameLift Servers 代理程式](integration-dev-iteration-agent.md)。