使用管理資源 AWS CloudFormation - Amazon GameLift

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

使用管理資源 AWS CloudFormation

您可以使用AWS CloudFormation來管理您的亞馬遜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 堆疊和堆疊集來有效地管理多個資源。

    • 使用堆疊來管理已連線資源的群組。例如,包含組建的堆疊、參考組建的叢集,以及參考叢集的別名。如果您更新範本以取代組建,請AWS CloudFormation取代連接至組建的叢集。 AWS CloudFormation然後更新現有的別名以指向新叢集。如需詳細資訊,請參閱《使用指南》中的〈AWS CloudFormation使用堆疊

    • 如果您要跨多個區域或AWS帳戶部署相同的AWS CloudFormation堆疊,請使用堆疊集。若要取得更多資訊,請參閱《使用指南》中的〈AWS CloudFormation使用堆疊組合〉

  • 如果您使用的是 Spot 執行個體,請包含隨需機群做為備份。我們建議您在每個區域中使用兩個叢集設定範本,一個使用 Spot 執行個體的叢集,以及一個使用隨需執行個體的叢集。

  • 當您管理多個地點的資源時,請將特定位置的資源和全球資源分組到單獨的堆疊中。

  • 將您的全球資源放在使用該資源的服務附近。佇列和配對配置等資源往往會收到來自特定來源的大量請求。將您的資源放在靠近這些請求的來源之處,您可以將請求傳送時間降至最低,並改善整體效能。

  • 將您的配對組態放置在與其使用之遊戲工作階段佇列的相同區域。

  • 為堆疊中的每個機群建立不同別名。

使用AWS CloudFormation堆疊

我們建議您在為 Amazon GameLift 資源設定AWS CloudFormation堆疊時使用下列結構。根據您是在一個位置還是多個位置部署遊戲,您的最佳堆疊結構會有所不同。

堆疊單一位置

若要在單一位置管理 Amazon GameLift 資源,我們建議使用雙堆疊結構:

  • 支援堆疊 — 此堆疊包含 Amazon 資GameLift源所依賴的資源。至少,此堆疊應該包含 S3 儲存貯體,其中儲存自訂遊戲伺服器或 Realtime 指令碼檔案。該堆棧還應包括 IAM 角色,該角色在創建 Amazon GameLift 構建或腳本資源時GameLift授予 Amazon 存儲桶從 S3 存儲桶檢索文件的權限。此堆疊也可能包含與您的遊戲搭配使用的其他AWS資源,例如 DynamoDB 資料表、亞馬遜紅移叢集和 Lambda 函數。

  • Amazon GameLift 堆疊 — 此堆疊包含所有 Amazon 資GameLift源,包括建置或指令碼、一組叢集、別名和遊戲工作階段佇列。 AWS CloudFormation使用存放在 S3 儲存貯體位置的檔案建立組建或指令碼資源,並將組建或指令碼部署到一或多個叢集資源。每個機群都應該有一個對應別名。遊戲工作階段佇列會參考部分或全部機群別名。如果您使用的是配FlexMatch對,此堆疊還包含配對配對配置和規則集。

下圖說明在單一 AWS 區域中部署資源的雙堆疊結構。

該圖顯示兩個 AWS CloudFormation 堆疊。一個包含 Amazon GameLift 資源,另一個包含支援的資源GameLift。後一個堆疊包括用於存放建置或指令碼檔案的 S3 儲存貯體,以及允許 Amazon GameLift 從 S3 儲存貯體擷取檔案的 IAM 角色。

多個區域的堆疊

在多個區域中部署遊戲時,請記住資源如何跨區域互動。某些資源 (例如 Amazon GameLift 叢集) 只能參考相同區域中的其他資源。其他資源 (例如 Amazon GameLift 佇列) 不受區域限制。若要管理多個區域的 Amazon GameLift 資源,我們建議使用以下結構。

  • 區域支援堆疊 — 這些堆疊包含 Amazon 資GameLift源所依賴的資源。此堆疊必須包括 S3 儲存貯體,其中儲存自訂遊戲伺服器或 Realtime 指令碼檔案。它也可能包含適用於您遊戲的其他AWS資源,例如 DynamoDB 表、亞馬遜紅移叢集和 Lambda 函數。這些資源中有許多是區域特定的,因此您必須在每個區域中建立這些資源。Amazon GameLift 也需要能夠存取這些支援資源的 IAM 角色。由於 IAM 角色不受區域限制,因此您只需要一個角色資源,放置在任何區域中,並在所有其他支援堆疊中參照。

  • 域 Amazon GameLift 堆疊 — 此堆疊包含必須存在於部署遊戲的每個區域中的 Amazon GameLift 資源,包括建置或指令碼、一組叢集和別名。 AWS CloudFormation使用 S3 儲存貯體位置的檔案建立組建或指令碼資源,並將組建或指令碼部署到一或多個叢集資源。每個機群都應該有一個對應別名。遊戲工作階段佇列會參考部分或全部機群別名。您可以維護一個範本,來描述這種類型的堆疊,並使用它在每個區域建立相同的資源集。

  • 全球 Amazon GameLift 堆疊 — 此堆疊包含您的遊戲工作階段佇列和配對資源。這些資源可以位於任何區域,且通常放置在相同區域中。佇列可以參考位於任何區域中的機群或別名。若要在不同的區域中放置其他佇列,請建立額外的全域堆疊。

下圖說明在多個 AWS 區域中部署資源的多堆疊結構。第一個圖表顯示單一遊戲工作階段佇列的結構。第二個圖表顯示具有多個佇列的結構。

此圖顯示三個區域的多個 AWS CloudFormation 堆疊。每個區域中的支援堆疊都包含支援資源,例如 S3 儲存貯體。其中一個堆疊還包含 IAM 角色,Amazon 可使用該角色存取任何支援資源,而不論區域GameLift為何。區域 Amazon GameLift 堆疊包含 Amazon GameLift 組建或指令碼、叢集和別名。全球 Amazon GameLift 堆疊包含配對資源和佇列,可參考多個區域中的叢集或別名。
此圖表顯示三個區域的多個AWS CloudFormation堆疊,包括在兩個區域中具有遊戲工作階段佇列的全域 Amazon GameLift 堆疊。每個佇列都會參考區域 Amazon GameLift 堆疊中的別名。

更新組建

Amazon GameLift 組建是不可變的,組建和叢集之間的關係也是如此。因此,當您更新託管資源,以使用一組新的遊戲建置檔案時,必須發生下列情況:

  • 使用一組新檔案來建立新建置 (取代)。

  • 建立一組新的機群來部署新的遊戲建置 (取代)。

  • 重新導向別名以指向新的機群 (更新而不中斷)。

如需詳細資訊,請參閱《AWS CloudFormation使用指南》中的〈更新堆疊資源的行為

自動部署組建更新

更新包含相關建置、機群和別名資源的堆疊時,預設 AWS CloudFormation 行為是依序自動執行這些步驟。您可以先將新的建置檔案上傳到新的 S3 位置,以觸發此更新。然後,修改 AWS CloudFormation 建置範本以指向新的 S3 位置。當您使用新的 S3 位置更新堆疊時,這會觸發以下 AWS CloudFormation 順序:

  1. 從 S3 擷取新檔案、驗證檔案,並建立新的 Amazon GameLift 組建。

  2. 更新機群範本中的建置參考,這會觸發新的機群建立。

  3. 在新的機群作用中之後,更新別名中的機群參考,這會觸發別名更新,以新機群做為目標。

  4. 刪除舊機群。

  5. 刪除舊建置。

如果您的遊戲工作階段佇列使用機群別名,玩家流量會在別名更新後立即自動切換至新機群。隨著遊戲工作階段結束,舊機群會逐漸耗盡玩家。自動調整規模可處理在玩家流量變動時,新增和移除每組機群中執行個體的任務。或者,您可以指定初始所需的執行個體計數,以快速提升交換,並在稍後啟用自動調整規模。

您也可以使 AWS CloudFormation 保留資源,而不是刪除它們。如需詳細資訊,請參閱《AWS CloudFormation API 參考》 中的 RetainResources

手動部署組建更新

如果想要更好地控制新機群何時上線,供玩家使用,您有一些選項可以選擇。您可以選擇使用 Amazon GameLift 主控台或 CLI 手動管理別名。或者,您可以將第二組建置和機群定義新增至範本,而不是更新您的建置範本以取代建置和機群。當您更新範本時,AWS CloudFormation 會建立第二個建置資源和對應機群。由於未取代現有的資源,因此不會刪除它們,而且別名仍會指向原始機群。

使用這種方法的主要優點是它為您提供了靈活性。您可以為新版建置建立個別資源、測試新資源,以及控制新機群何時上線,供玩家使用。潛在的缺點是,短時間內它需要在每個區域有兩倍多的資源。

下圖說明此程序。

圖表顯示三個區域的多個AWS CloudFormation堆疊,包括 Amazon GameLift 全域堆疊,以及兩個區域的遊戲工作階段佇列。每個佇列都會參考 Amazon GameLift 區域堆疊中的別名。

復原的運作方式

執行資源更新時,若有任何步驟未順利完成,則 AWS CloudFormation 會自動啟動轉返。此程序會依序反轉每個步驟,同時刪除新建立的資源。

如果您需要手動觸發轉返,請將建置範本的 S3 位置索引鍵變回原始位置,並更新您的堆疊。建立新的 Amazon GameLift 組建和叢集,而且在叢集啟用後,別名會切換到新的叢集。如果您是個別管理別名,則需要切換它們以指向新機群。

如需有關如何處理失敗或卡住的復原的詳細資訊,請參閱AWS CloudFormation使用者指南中的繼續復原更新