

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

# Unreal 的外掛程式：將您的遊戲部署到受管容器機群
<a name="unreal-plugin-container"></a>

使用此引導式外掛程式工作流程為您的遊戲伺服器建立容器映像，並將其部署至容器型託管解決方案。如果您尚未整合遊戲程式碼，請參閱 [Unreal 的外掛程式：整合您的遊戲程式碼](unreal-plugin-integrate.md)。當您成功完成此工作流程時，您的容器化遊戲伺服器會在雲端執行，而且您可以使用 外掛程式來啟動遊戲用戶端、連線至遊戲工作階段，以及玩遊戲。

## 開始之前
<a name="unreal-plugin-container-prereqs"></a>

此工作流程假設您已完成下列任務。
+ **將您的遊戲伺服器程式碼與Amazon GameLift Servers伺服器 SDK 整合。**您的託管遊戲伺服器必須能夠與 Amazon GameLift Servers服務通訊，以便回應啟動新遊戲工作階段和報告遊戲工作階段狀態的請求。如果您尚未完成此任務，建議您先使用 Anywhere 遵循外掛程式工作流程主機。如需準備遊戲伺服器程式碼的指引，請參閱 [更新您的遊戲伺服器程式碼](unreal-plugin-integrate.md#unreal-plugin-anywhere-integrate-simple-server)。對於受管容器機群，您必須將遊戲與伺服器 SDK 5.2 版或更新版本整合。
**注意**  
如果您使用的是啟動遊戲地圖，則此任務已為您完成。
+ **封裝遊戲伺服器可執行檔以在 Linux 上執行。**如果您是在 Windows 上進行開發並整合 C\$1\$1 伺服器 SDK 5.2.x 版或更早版本，則需要使用 [ Unreal 跨編譯工具組](http://cross-compile toolkit for your UE version)。或者，您可以設定個別的 Linux 工作區，或使用如適用於 Linux 的 Windows 子系統 (WSL) 等工具。
+ **收集檔案以使用遊戲伺服器建置進行部署。**在本機電腦上，建立工作目錄來組織檔案，這些檔案會內建在您的遊戲伺服器容器映像中。這些可能包括遊戲相依性、啟動遊戲伺服器的指令碼，以及啟動容器時的其他程序等。
+ **新增遊戲伺服器建置的 OpenSSL 程式庫檔案。**如果您的遊戲伺服器與伺服器 SDK 5.3 或更新版本整合，您可以略過此步驟。

  手動尋找 OpenSSL 程式庫並將其複製到位於 的遊戲組建套件目錄`<YourGame>/Binaries/Win64`。**您必須**使用與 Unreal Engine 5 版本相同的 OpenSSL 版本。使用錯誤的 OpenSSL 程式庫部署的遊戲組建將無法與服務通訊Amazon GameLift Servers。

  若要尋找 OpenSSL 程式庫，請查看您的遊戲引擎來源。位置會根據您的開發環境而有所不同：

  在 Windows 上：
  + `[ENGINE_ROOT_DIR]\Engine\Extras\ThirdPartyNotUE\libimobiledevice\x64\libssl-1_1-x64.dll`
  + `[ENGINE_ROOT_DIR]\Engine\Extras\ThirdPartyNotUE\libimobiledevice\x64\libcrypto-1_1-x64.dll` 

  在 Linux 上：
  + `Engine/Source/Thirdparty/OpenSSL/1.1.1n/include/libssl.so.1.1`
  + `Engine/Source/Thirdparty/OpenSSL/1.1.1n/include/libcrypto.so.1.1`
+ **將您的遊戲用戶端程式碼與 整合Amazon GameLift Servers。**完成此任務的一個方法是新增已整合的範例資產 （隨附於外掛程式）。如需準備遊戲用戶端程式碼的指引，請參閱 [整合您的用戶端遊戲地圖](unreal-plugin-integrate.md#unreal-plugin-anywhere-integrate-simple-client)。
+ **在本機電腦上安裝 Docker。**如果您希望外掛程式為您建立容器映像並將其推送至 ECR 儲存庫，則需要安裝此工具。或者，您可以手動執行這些任務，並指示外掛程式使用現有的容器映像。如需手動建置映像的詳細資訊，請參閱[建置 的容器映像Amazon GameLift Servers](https://docs.aws.amazon.com/gameliftservers/latest/developerguide/containers-prepare-images.html)。

**若要啟動Amazon GameLift Servers受管容器工作流程：**
+ 在 Unreal 編輯器主工具列中，選擇Amazon GameLift Servers選單，然後選取**受管容器**。此動作會開啟外掛程式頁面 **Host with Managed Containers**，其中提供使用遊戲伺服器建置建立容器映像、將其部署至容器機群，以及啟動遊戲step-by-step程序。

## 步驟 0：設定您的設定檔
<a name="unreal-plugin-container-profile"></a>

本節顯示您目前選取的使用者設定檔。確認目前的使用者設定檔是您要用於此工作流程的設定檔。您在此工作流程中建立的所有資源都與設定檔 AWS 的帳戶相關聯，並放置在設定檔的預設 AWS 區域中。設定檔使用者的許可決定您對 AWS 資源和動作的存取。

您可能需要修改選取的使用者設定檔，如果：
+ 目前未選取設定檔。
+ 您想要選取不同的設定檔或建立新的設定檔。
+ 您需要引導選取的設定檔 （如果引導狀態為非作用中）。

**設定或變更選取的使用者設定檔**
+ 在Amazon GameLift Servers功能表中，選擇**開啟 AWS 存取登入資料**。

## 步驟 1：評估容器準備程度
<a name="unreal-plugin-container-assess"></a>

在將遊戲伺服器部署到容器機群之前，您必須將其封裝到容器映像中，並存放在 Amazon ECR 儲存庫中。外掛程式可以為您完成這些任務，或者您可以手動執行這些任務。在此步驟中，提供容器映像和 ECR 儲存庫狀態的相關資訊。

使用評估問題來告知外掛程式需要採取哪些步驟：
+ **建立新的容器映像。**如果您選擇此選項，下一步將提示您輸入遊戲伺服器建置目錄的位置和建置可執行檔。外掛程式使用 Dockerfile 範本 （由 提供Amazon GameLift Servers)，並自動為您的遊戲進行設定。您可以在 檢視範本[建置 的容器映像 Amazon GameLift Servers](containers-prepare-images.md)。選擇此選項後，請指出您希望外掛程式存放新映像的位置：
  + 建立新的 Amazon ECR 儲存庫，並將容器映像推送到其中。外掛程式會使用 AWS 帳戶建立私有 ECR 儲存庫，並在您選取的使用者設定檔 AWS 區域 中建立預設值。
  + 將容器映像推送至先前建立的 Amazon ECR 儲存庫。如果您選擇此選項，下一個步驟將提示您從清單中選擇現有的 Amazon ECR 儲存庫。此清單包含 AWS 帳戶的所有 Amazon ECR 儲存庫，以及所選使用者設定檔 AWS 區域 中的預設值。您可以選取公有或私有儲存庫。
+ **使用現有的容器映像。**如果您已手動建置映像，建議您使用 提供的 Dockerfile 範本Amazon GameLift Servers，該範本可在 取得[建置 的容器映像 Amazon GameLift Servers](containers-prepare-images.md)。選擇此選項後，請指出影像所在的位置。
  + 本機存放的 Docker 產生的映像。如果您選擇此選項，外掛程式會建立新的 Amazon ECR 私有儲存庫，並將本機映像檔案推送到該儲存庫。下一個步驟會提示您輸入映像 ID，外掛程式會使用此 ID 來尋找映像檔案。
  + 已存放在 Amazon ECR 儲存庫中的容器映像。如果您選擇此選項，下一個步驟將提示您從清單中選擇現有的 Amazon ECR 儲存庫和映像。此清單包含 AWS 帳戶的所有 Amazon ECR 儲存庫，以及所選使用者設定檔 AWS 區域 中的預設值。您可以選取公有或私有儲存庫。

## 步驟 2：設定映像部署
<a name="unreal-plugin-container-configure"></a>

在此步驟中，請提供外掛程式將容器映像部署至容器機群所需的資訊。此步驟會請求以下資訊：
+ 遊戲伺服器建置、容器映像或 Amazon ECR 儲存庫的位置，取決於您在步驟 1 中的選擇。
+ 用於受管容器部署的案例。
+ 用戶端組態輸出路徑。選取用戶端建置中包含 AWS 組態的資料夾。在下列位置尋找它：`[client-build]/[project-name]/Content/CloudFormation`。
+ 選用部署設定。本節具有外掛程式預設使用的組態設定。您可以修改這些值或保留預設值
  + 遊戲名稱預設為遊戲專案的名稱。外掛程式建立的所有 AWS 資源都會參考遊戲名稱值。
  + 連接埠範圍、記憶體限制和 vCPU 限制是容器機群的組態設定。如需自訂這些值的詳細資訊，請參閱 [設定網路連線](containers-design-fleet.md#containers-custom-network) 以取得連線連接埠範圍，以及 [設定資源限制](containers-design-fleet.md#containers-design-fleet-limits) 以取得資源限制。
  + 容器映像標籤用於分類 Amazon ECR 中的容器映像。預設值為 `unreal-gamelift-plugin`。
  + Amazon ECR 儲存庫的名稱。您可以編輯此欄位，只在外掛程式為您建立 ECR 儲存庫時建議自訂名稱。預設值為 `unreal-game lift-plugin-ecr-repository`。

### 部署案例選項
<a name="unreal-plugin-container-configure-scenarios"></a>

#### 單一區域容器機群
<a name="w2aab9c11b9c19c39c13b7b3b1"></a>

此案例會將您的遊戲伺服器部署到單一容器機群。這是測試與 AWS 和容器組態之伺服器整合的良好起點。它會部署下列資源。
+ Amazon GameLift Servers 容器群組定義說明如何在容器機群上部署和執行容器映像。
+ Amazon GameLift Servers 安裝並執行遊戲伺服器容器的容器機群 （隨需），以及別名。
+ Amazon Cognito 使用者集區和用戶端可讓玩家驗證和啟動遊戲。
+ 將使用者集區與 API 連結APIs Gateway 授權方。
+ Web 存取控制清單 (ACL)，用於調節對 API Gateway 的過多玩家呼叫。
+ 代表遊戲用戶端向Amazon GameLift Servers服務提出請求的後端服務，例如請求遊戲工作階段和加入遊戲：
  + API Gateway \$1 Lambda 函數，讓玩家請求遊戲工作階段槽。`CreateGameSession()` 如果沒有可用的開放插槽，此函數會呼叫 。
  + API Gateway \$1 Lambda 函數可讓玩家取得其遊戲請求的連線資訊。

#### 使用 的單一區域容器機群 FlexMatch
<a name="w2aab9c11b9c19c39c13b7b3b3"></a>

此案例會將您的遊戲伺服器部署到容器機群、設定遊戲工作階段置放，以及設定FlexMatch配對。當您準備好開始為託管解決方案設計自訂配對建構器時，此案例非常有用。使用此案例來建立此解決方案的基本資源，您可以視需要稍後進行自訂。它會部署下列資源：
+ Amazon GameLift Servers 容器群組定義，說明如何在容器機群上部署和執行容器映像。
+ Amazon GameLift Servers 安裝並執行遊戲伺服器容器的容器機群 （隨需），以及別名。
+ FlexMatch 配對組態和配對規則集，以接受玩家請求並形成配對。
+ Amazon GameLift Servers 透過尋找最佳的託管資源 （根據可行性、成本、玩家延遲等） 並啟動遊戲工作階段，滿足對提議配對的請求的遊戲工作階段佇列。
+ Amazon Cognito 使用者集區和用戶端可讓玩家驗證和啟動遊戲。
+ 將使用者集區與 API 連結APIs Gateway 授權方。
+ Web 存取控制清單 (ACL)，用於調節對 API Gateway 的過多玩家呼叫。
+ 代表遊戲用戶端向Amazon GameLift Servers服務提出請求的後端服務，例如請求遊戲工作階段和加入遊戲：
  + API Gateway \$1 Lambda 函數，讓玩家請求遊戲工作階段槽。`StartMatchmaking()` 如果沒有可用的開放插槽，此函數會呼叫 。
  + API Gateway \$1 Lambda 函數可讓玩家取得其遊戲請求的連線資訊。
+ DynamoDB 資料表可存放玩家的配對票證和遊戲工作階段資訊。
+ Amazon SNS 主題 \$1 Lambda 函數來處理 GameSessionQueue 事件。

## 部署容器機群
<a name="unreal-plugin-container-deploy"></a>

機群組態完成後，請選擇**部署容器機群**按鈕以開始部署。當外掛程式建立容器映像並將其推送至 ECR、為容器機群佈建託管資源、為選取的託管解決方案案例部署機群和其他 AWS 資源時，此程序可能需要幾分鐘的時間。

開始部署時，您可以追蹤每個步驟的進度。根據您的組態，這些步驟可能包含下列項目：
+ 設定容器映像
+ 建立 Amazon ECR 儲存庫 
+ 建置映像並推送至 Amazon ECR
+ 建立容器群組定義
+ 建立容器機群

如需更詳細的部署資訊，請選擇 **管理主控台中的 AWS 檢視**。當容器機群達到作用中狀態時，機群會主動執行具有準備好託管遊戲工作階段之伺服器程序的容器。

當部署完成時，您有一個工作中的容器機群，已準備好託管遊戲工作階段並接受玩家連線。

您無法停止進行中的部署。如果部署進入錯誤狀態或失敗，您可以使用**重設部署**選項重新開始。

## 啟動用戶端
<a name="unreal-plugin-container-launch"></a>

此時，您已完成所有任務，以啟動和播放使用 託管的多玩家遊戲Amazon GameLift Servers。若要玩遊戲，請選擇**啟動用戶端**以啟動遊戲用戶端的本機執行個體。
+ 如果您部署了單一機群案例，請使用一個玩家開啟遊戲用戶端的一個執行個體，然後輸入伺服器地圖以四處移動。您可以開啟遊戲用戶端的第二個執行個體，將第二個玩家新增至相同的伺服器遊戲地圖。
+ 如果您部署了FlexMatch案例，託管解決方案會等待至少兩個遊戲用戶端提出配對請求。使用一個玩家開啟遊戲用戶端的至少兩個執行個體。兩個玩家將會進行配對，並提示他們加入配對的遊戲工作階段。

## 更新容器機群
<a name="unreal-plugin-container-update"></a>

如果您已成功部署受管容器託管解決方案，您可以使用**更新部署**功能。此選項可讓您更新已部署容器機群的組態設定，而不必建立新的機群。

更新部署時，您可以使用不同的遊戲伺服器建置部署容器映像、變更 Amazon ECR 儲存庫、選擇不同的部署案例，以及自訂選用的組態設定。

當您準備好部署變更時，請選擇更新。部署更新所需的時間類似於完整部署。如需詳細部署資訊，請選擇 ** AWS 管理主控台中的檢視**。

## 清除已部署的資源
<a name="unreal-plugin-container-cleanup"></a>

最佳實務是在不再需要受管容器解決方案時，立即清理這些解決方案 AWS 的資源。如果您不移除這些資源，可能會繼續產生這些資源的成本。

刪除下列資源：
+ 受管容器資源堆疊。此堆疊中的資源取決於您選擇的部署案例。若要刪除整個堆疊，請使用 CloudFormation 主控台。從Amazon GameLift Servers外掛程式產生的堆疊使用以下命名慣例：`GameLiftPluginForUnreal-{GameName}-Containers`。在外掛程式中啟動新的受管容器部署之前，請等待堆疊刪除程序完成。如需詳細資訊，請參閱[從 CloudFormation 主控台刪除堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html)。
+ Amazon ECR 儲存庫。如果您使用 外掛程式為容器映像建立儲存庫，您可能想要刪除任何不再需要的儲存庫。在重設受管容器部署之前，您不需要刪除儲存庫。如果您更新或重設部署，外掛程式將自動使用相同的儲存庫，除非被指示使用另一個儲存庫。如需詳細資訊，請參閱[刪除 Amazon ECR 中的私有儲存庫](https://docs.aws.amazon.com/AmazonECR/latest/userguide/repository-delete.html)。