本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 管理 Amazon GameLift 託管資源 AWS CloudFormation
您可以使用 AWS CloudFormation 來管理您的 Amazon GameLift 資源。在 中 AWS CloudFormation,您可以建立範本,建立每個資源的模型,然後使用範本來建立資源。若要更新資源,您可以變更範本,並使用 AWS CloudFormation 實作更新。您可以將資源組織成邏輯群組,稱為堆疊和堆疊集。
使用 AWS CloudFormation 來維護 Amazon GameLift 託管資源,可讓您更有效率地管理 AWS 資源集。您可以使用版本控制來追蹤一段時間內的範本變更,並協調多個專案團隊成員所做的更新。您也可以重複使用範本。例如,跨多個區域部署遊戲時,您可以使用相同的範本,在每個區域建立相同的資源。您也可以使用這些範本,在另一個分割區中部署相同的資源集。
如需 的詳細資訊 AWS CloudFormation,請參閱 AWS CloudFormation 使用者指南 。若要檢視 Amazon GameLift 資源的範本資訊,請參閱 Amazon GameLift 資源類型參考 。
最佳實務
如需使用 的詳細指引 AWS CloudFormation,請參閱 AWS CloudFormation 使用者指南 中的AWS CloudFormation 最佳實務。此外,這些最佳實務與 Amazon 具有特殊關聯性 GameLift。
-
透過 持續管理您的資源 AWS CloudFormation。如果您在資源之外變更 AWS CloudFormation 資源,將會與資源範本不同步。
-
使用 AWS CloudFormation 堆疊和堆疊集來有效管理多個資源。
-
如果您使用的是 Spot 執行個體,請包含隨需機群做為備份。我們建議您在每個區域中設定具有兩個機群的範本、一個具有 Spot 執行個體的機群,以及一個具有隨需執行個體的機群。
-
當您管理多個位置的資源時,請將您的位置特定資源和全域資源分組為不同的堆疊。
-
將全域資源放在靠近使用它的 服務。佇列和配對組態等資源往往會收到來自特定來源的大量請求。透過將資源放在這些請求的來源附近,您可以將請求的傳輸時間降至最低,並可以改善整體效能。
-
將您的配對組態放置在與其使用之遊戲工作階段佇列的相同區域。
-
為堆疊中的每個機群建立不同別名。
使用 AWS CloudFormation 堆疊
我們建議在設定 Amazon GameLift 資源的 AWS CloudFormation 堆疊時,使用下列結構。您的最佳堆疊結構取決於您要將遊戲部署在一個位置或多個位置。
單一位置的堆疊
若要在單一位置管理 Amazon GameLift 資源,我們建議採用兩層結構:
-
支援堆疊 – 此堆疊包含 Amazon GameLift 資源依賴的資源。至少,此堆疊應該包含 S3 儲存貯體,其中儲存自訂遊戲伺服器或 Realtime 指令碼檔案。堆疊還應包含一個IAM角色,在建立 Amazon GameLift 建置或指令碼資源時,授予 Amazon 從 S3 儲存貯體擷取檔案的 GameLift 許可。此堆疊也可能包含遊戲中使用的其他 AWS 資源,例如 DynamoDB 資料表、Amazon Redshift 叢集和 Lambda 函數。
-
Amazon GameLift 堆疊 – 此堆疊包含您的所有 Amazon GameLift 資源,包括建置或指令碼、一組機群、別名和遊戲工作階段佇列。 會使用存放在 S3 儲存貯體位置的檔案 AWS CloudFormation 建立建置或指令碼資源,並將建置或指令碼部署至一或多個機群資源。每個機群都應該有一個對應別名。遊戲工作階段佇列會參考部分或全部機群別名。如果您使用 FlexMatch 進行比對,此堆疊也包含比對組態和規則集。
下圖說明在單一 AWS 區域中部署資源的兩層結構。
多個區域的堆疊
在多個區域中部署遊戲時,請記住資源如何跨區域互動。有些資源,例如 Amazon GameLift 機群,只能參考相同區域中的其他資源。其他資源,例如 Amazon GameLift 佇列,與區域無關。若要管理多個區域中的 Amazon GameLift 資源,我們建議採用下列結構。
-
區域支援堆疊 – 這些堆疊包含 Amazon GameLift 資源依賴的資源。此堆疊必須包括 S3 儲存貯體,其中儲存自訂遊戲伺服器或 Realtime 指令碼檔案。它也可能包含遊戲的其他 AWS 資源,例如 DynamoDB 資料表、Amazon Redshift 叢集和 Lambda 函數。這些資源中有許多是區域特定的,因此您必須在每個區域中建立這些資源。Amazon GameLift 也需要允許存取這些支援資源IAM的角色。由於IAM角色與區域無關,因此您只需要一個角色資源,放置在任何區域中,並在所有其他支援堆疊中參考。
-
區域 Amazon GameLift 堆疊 – 此堆疊包含您遊戲部署的每個區域中必須存在的 Amazon GameLift 資源,包括建置或指令碼、一組機群和別名。 AWS CloudFormation 會建立具有 S3 儲存貯體位置檔案的建置或指令碼資源,並將建置或指令碼部署至一或多個機群資源。每個機群都應該有一個對應別名。遊戲工作階段佇列會參考部分或全部機群別名。您可以維護一個範本,來描述這種類型的堆疊,並使用它在每個區域建立相同的資源集。
-
全域 Amazon GameLift 堆疊 – 此堆疊包含您的遊戲工作階段佇列和配對資源。這些資源可以位於任何區域,且通常放置在相同區域中。佇列可以參考位於任何區域中的機群或別名。若要在不同的區域中放置其他佇列,請建立額外的全域堆疊。
下圖說明在數個 AWS 區域中部署資源的多堆疊結構。第一個圖表顯示單一遊戲工作階段佇列的結構。第二個圖表顯示具有多個佇列的結構。
更新組建
Amazon GameLift 建置是不可變的,建置與機群之間的關係也是如此。因此,當您更新託管資源,以使用一組新的遊戲建置檔案時,必須發生下列情況:
-
使用一組新檔案來建立新建置 (取代)。
-
建立一組新的機群來部署新的遊戲建置 (取代)。
-
重新導向別名以指向新的機群 (更新而不中斷)。
如需詳細資訊,請參閱 AWS CloudFormation 使用者指南 中的更新堆疊資源的行為。
自動部署建置更新
更新包含相關建置、機群和別名資源的堆疊時,預設 AWS CloudFormation 行為是依序自動執行這些步驟。您可以先將新的建置檔案上傳到新的 S3 位置,以觸發此更新。然後,您修改 AWS CloudFormation 建置範本以指向新的 S3 位置。當您使用新的 S3 位置更新堆疊時,這會觸發以下 AWS CloudFormation 順序:
-
從 S3 擷取新檔案、驗證檔案,並建立新的 Amazon GameLift 建置。
-
更新機群範本中的建置參考,這會觸發新的機群建立。
-
在新的機群作用中之後,更新別名中的機群參考,這會觸發別名更新,以新機群做為目標。
-
刪除舊機群。
-
刪除舊建置。
如果您的遊戲工作階段佇列使用機群別名,玩家流量會在別名更新後立即自動切換至新機群。隨著遊戲工作階段結束,舊機群會逐漸耗盡玩家。自動調整規模可處理在玩家流量變動時,新增和移除每組機群中執行個體的任務。或者,您可以指定初始所需的執行個體計數,以快速提升交換,並在稍後啟用自動調整規模。
您也可以 AWS CloudFormation 保留資源,而不是將其刪除。如需詳細資訊,請參閱 參考 RetainResources中的 。 AWS CloudFormation API
手動部署建置更新
如果想要更好地控制新機群何時上線,供玩家使用,您有一些選項可以選擇。您可以選擇使用 Amazon GameLift 主控台或 手動管理別名CLI。或者,您可以將第二組建置和機群定義新增至範本,而不是更新您的建置範本以取代建置和機群。當您更新範本時, 會 AWS CloudFormation 建立第二個建置資源和對應的機群。由於未取代現有的資源,因此不會刪除它們,而且別名仍會指向原始機群。
使用這種方法的主要優點是它為您提供了靈活性。您可以為新版建置建立個別資源、測試新資源,以及控制新機群何時上線,供玩家使用。潛在的缺點是,短時間內它需要在每個區域有兩倍多的資源。
下圖說明此程序。
復原的運作方式
執行資源更新時,若有任何步驟未順利完成,則 AWS CloudFormation 會自動啟動轉返。此程序會依序反轉每個步驟,同時刪除新建立的資源。
如果您需要手動觸發轉返,請將建置範本的 S3 位置索引鍵變回原始位置,並更新您的堆疊。建立新的 Amazon GameLift 建置和機群,並在機群啟用後,別名會切換到新的機群。如果您是個別管理別名,則需要切換它們以指向新機群。
如需如何處理失敗或卡住的復原的詳細資訊,請參閱 AWS CloudFormation 使用者指南 中的繼續復原更新。