為 Amazon 容器叢集建立 GameLift 容器群組定義 - Amazon GameLift

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

為 Amazon 容器叢集建立 GameLift 容器群組定義

本文件適用於公開預覽版本中的功能。內容可能變動。

容器群組定義說明如何將容器化遊戲伺服器應用程式部署到容器叢集。這是一個藍圖,可識別要在叢集上執行的容器集,以及如何執行它們。建立容器叢集時,您可以指定要部署至叢集的容器群組定義。如需容器群組的詳細資訊,請參閱貨櫃車隊元件

開始之前

完成下列任務:

  • 設計用於託管遊戲伺服器的容器架構。請參閱設計 Amazon GameLift 貨櫃車隊

  • 規劃要包含在容器群組中的容器定義。如果您使用 AWS CLI,請在 JSON 檔案中建立容器定義。

  • 將最終容器映像推送至您打算建立容器群組的 Amazon 彈性容器登錄檔 (Amazon ECR) 登錄。 AWS 區域 Amazon 會在您建立容器群組定義時 GameLift 存放每個映像的快照,並在部署到容器叢集時使用該副本。請參閱使用您的遊戲伺服器軟體準備容器映像檔

  • 確認您的 AWS 使用者具有存取權管理權限以存取 Amazon ECR 儲存庫。請參閱管理 Amazon 的用戶許可 GameLift。您至少需要下列動作的權限:

    • ecr:DescribeImages

    • ecr:BatchGetImage

    • ecr:GetDownloadUrlForLayer

複製容器群組定義

您可以使用 Amazon GameLift 主控台複製現有的容器群組定義。

複製容器群組
  1. Amazon 主 GameLift 控台中,移至左側導覽窗格,然後選擇容器群組

  2. 在 [容器群組清單] 頁面上,選取要複製的現有容器群組。選取容器群組之後,[複製] 按鈕就會處於作用中狀態。

  3. 選擇複製。此動作會以預先填入的設定開啟容器群組建立精靈。

  4. 輸入複製的容器群組的新名稱。相同區域中的容器群組必須具有唯一的名稱。

  5. 逐步瀏覽容器群組和容器定義頁面、檢閱並建立新的容器群組。

建立複本容器群組定義

複本容器群組會管理您的遊戲伺服器軟體。複本容器群組至少有一個執行 Amazon GameLift 代理程式和遊戲伺服器程序的容器。群組可能有額外的「附屬」容器來執行支援軟體。

本主題說明如何使用 Amazon 主 GameLift 控台或 AWS CLI 工具建立容器群組定義。如需有關設定容器群組組態的詳細資訊,請參閱設計 Amazon GameLift 貨櫃車隊

Console

Amazon 主 GameLift 控台中,選取您 AWS 區域 要建立容器群組的位置。

開啟主控台左側的導覽列,然後選擇 [容器群組]。在 [容器群組] 頁面上,選擇 [建立容器群組]。

步驟 1:定義群組詳細資訊。
  1. 輸入貨櫃群組定義名稱。此名稱對於「區域」 AWS 帳戶 而言必須是唯一的。在主控台中,群組定義會依名稱列出,因此指派有意義的標籤會很有幫助。

  2. 選取複本排程策略。

  3. 總記憶體限制中,輸入容器群組可用的最大記憶體。如需計算此值的說明,請參閱設定資源限制

  4. 在「CPU 總計限制」中,輸入容器群組可用的最大運算能力。如需計算此值的說明,請參閱設定資源限制

步驟 2:新增容器定義。

使用您的遊戲伺服器應用程式和 Amazon GameLift 代理程式定義容器。這是您必不可少的複本容器。

  1. 提供容器定義 「名稱」。為群組定義的每個容器都必須具有唯一的名稱值。

  2. 識別容器映像檔的 Amazon ECR 映像 URI。輸入下列任一格式:

    • 僅限影像 URI:[AWS 帳戶].dkr.ecr.[AWS 區域].amazonaws.com/[repository ID]

    • 圖片 URI + 摘要:[AWS 帳戶].dkr.ecr.[AWS 區域].amazonaws.com/[repository ID]@[digest]

    • 圖片編號 + 標籤:[AWS 帳戶].dkr.ecr.[AWS 區域].amazonaws.com/[repository ID]:[tag]

  3. 對於 基本」容器,會針對第一個容器定義自動選取「是」。如果您新增其他容器定義,您可以針對每個定義切換此設定為開啟或關閉。如需詳細資訊,請參閱指定必要的容器

  4. 設定一或多個內部容器連接埠範圍。此容器代管您的遊戲伺服器,因此請定義具有足夠連接埠的範圍,讓每個伺服器處理序在容器群組中執行。如需詳細資訊,請參閱設定網路連線

  5. 選用設定覆寫環境變數可讓您指定要在啟動時傳遞至容器的值。您在此設定的值會覆寫容器映像檔中已有的任何設定。

  6. 設定選擇性容器限制,以管理此容器的資源配置。如需詳細資訊,請參閱設定資源限制

  7. 視需要定義其他非必要貨櫃:

    • 提供容器定義名稱ECR 映像 URI。非必要容器不得執行 Amazon GameLift 代理程式。

    • 只有在容器具有需要網路存取的程序時,才設定內部容器連接埠範圍。

    • 選擇性地設定容器的 Health 檢查。當非必要容器未通過健康狀態檢查時,它只會提示重新啟動失敗的容器。

    • 視需要選擇性設定 「覆寫」、「環境變數」及「資源配置限制」。

步驟 3:設定相依性。

如果您的容器群組定義中有多個容器,您可以定義它們之間的相依性。使用相依性根據容器條件設定啟動和關閉順序。如需詳細資訊,請參閱設定容器相依性

  1. 識別您要為其新增相依性的容器名稱。這個容器不會啟動,直到依賴條件滿足。

  2. 確定依賴容器名稱條件。此容器必須符合條件,才能啟動相依容器。

  3. 視需要設定其他相依性。您可以為任何容器建立多個相依性。避免建立循環相依性。

步驟 4:檢閱並建立。
  1. 檢閱所有容器群組定義設定。您無法在建立容器群組定義之後變更它的組態。使用 「編輯」可變更任何區段,包括群組的每個容器定義。

  2. 完成審核後,請選擇 [建立]。

    如果您的要求成功,主控台會顯示新容器群組定義資源的詳細資訊頁面。最初的狀態是COPYING,因為 Amazon GameLift 開始為該組拍攝所有容器映像的快照。完成此階段時,容器群組定義狀態會變更為READY。容器群組定義必須處於READY狀態,您才能使用它建立容器叢集。

AWS CLI

當您使用 AWS CLI 建立容器群組定義時,請在不同的JSON檔案中維護容器定義組態。您可以在 CLI 命令中引用該文件。建立容器定義JSON檔如需架構範例,請參閱。

建立容器群組定義

若要建立新的容器群組定義,請使用 create-container-group-definition CLI 命令。如需有關此命令的詳細資訊,請參閱《AWS CLI 命令參考create-container-group-definition中的〈〉。

範例 :複本容器群組

此範例說明複本容器群組定義的要求。建立複本和精靈群組定義的指令結構基本上是相同的。各個容器定義中描述了每種類型群組的特定詳細資訊。

此範例假設您已使用此群組的容器定義建立 JSON 檔案。

aws gamelift create-container-group-definition \ --name MyAdventureGameContainerGroup \ --operating-system AMAZON_LINUX_2023 \ --scheduling-strategy REPLICA \ --total-memory-limit 4096 \ --total-cpu-limit 1024 \ --container-definitions file://SimpleServer.json

建立容器定義JSON

建立容器群組定義時,也會定義群組的容器。容器定義會指定儲存容器映像的 Amazon ECR 儲存庫,以及網路連接埠的選用組態、CPU 和記憶體使用量限制以及其他設定。建議您建立單一JSON檔案,其中包含容器群組中所有容器的組態。維護文件對於存儲,共享和版本跟踪這些關鍵配置非常有用。如果您使用 AWS CLI 建立容器群組定義,您可以在命令中參考檔案。

若要建立容器定義
  1. 建立並開啟新.JSON檔案。例如:

    [~/work/glc]$ vim SimpleServer.json
  2. 為群組的每個容器建立個別的容器定義。複製下列範例內容,並視需要為您的容器加以修改。如需容器定義語法的詳細資訊,請參閱 Amazon GameLift API 參考ContainerDefinitionInput中的。

  3. 將檔案儲存在本機,以便您可以在 AWS CLI 指令中參考該檔案。

此範例說明複本容器群組的基本容器。基本複本容器包括您的遊戲伺服器應用程式、Amazon GameLift Agent,並且可以包含用於遊戲託管的其他支援軟體。定義必須包含名稱、映像 URI 和連接埠組態。此範例也會設定一些容器特定的資源限制。

[ { "ContainerName": "SimpleServer", "ImageUri": "111122223333.dkr.ecr.us-east-1.amazonaws.com/gl-containers:complex-server", "Essential": true, "Cpu": 256, "MemoryLimits": { "HardLimit": 128 }, "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 2000, "Protocol": "TCP", "ToPort": 2100 } ] } } ]