

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

# 使用 管理Amazon GameLift Servers託管資源 CloudFormation
<a name="resources-cloudformation"></a>

您可以使用 CloudFormation 來管理您的 Amazon GameLift Servers 資源。在 中 CloudFormation，您會建立範本來建立每個資源的模型，然後使用範本來建立您的資源。若要更新資源，請對範本進行變更，並使用 CloudFormation 實作更新。您可以將資源組織成邏輯群組，稱為堆疊和堆疊集。

使用 CloudFormation 維護您的Amazon GameLift Servers託管資源，可讓您更有效率地管理 AWS 資源集。您可以使用版本控制來追蹤一段時間內的範本變更，並協調多個專案團隊成員所做的更新。您也可以重複使用範本。例如，跨多個區域部署遊戲時，您可以使用相同的範本，在每個區域建立相同的資源。您也可以使用這些範本，在另一個分割區中部署相同的資源集。

如需 的詳細資訊 CloudFormation，請參閱[AWS CloudFormation 《 使用者指南》](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/)。若要檢視Amazon GameLift Servers資源的範本資訊，請參閱[Amazon GameLift Servers資源類型參考](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_GameLift.html)。

## 最佳實務
<a name="resources-cloudformation-bestpractices"></a>

如需使用 的詳細指引 CloudFormation，請參閱*AWS CloudFormation 《 使用者指南*》中的[CloudFormation 最佳實務](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/best-practices.html)。此外，這些最佳實務與 Amazon GameLift Servers 具有特殊關係。
+ **透過 持續管理您的 資源 CloudFormation。**如果您在資源之外變更資源 CloudFormation ，將會與資源範本不同步。
+ **使用 CloudFormation 堆疊和堆疊集來有效管理多個資源。**
  + 使用堆疊來管理連線資源的群組。例如，包含組建的堆疊、參考組建的機群，以及參考機群的別名。如果您更新範本以取代組建， 會 CloudFormation 取代連線至組建的機群。 CloudFormation 然後更新現有的別名以指向新的機群。如需詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[使用堆疊](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/stacks.html)。
  + 如果您要跨多個區域或 AWS 帳戶部署相同的 CloudFormation 堆疊，請使用堆疊集。如需詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[使用堆疊集](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html)。
+ **如果您使用的是 Spot 執行個體，請包含隨需機群做為備份。**建議您在每個區域中使用兩個機群、一個具有 Spot 執行個體的機群，以及一個具有隨需執行個體的機群來設定範本。
+ **當您管理多個位置的資源時，請將特定位置的資源和全域資源分組到不同的堆疊。**
+ **將您的 全域資源放在靠近使用它的 服務附近。**佇列和配對組態等資源通常會收到來自特定來源的大量請求。透過將資源放在這些請求的來源附近，您可以將請求行程時間降至最低，並可以改善整體效能。
+ **將您的配對組態放置在與其使用之遊戲工作階段佇列的相同區域。**
+ **為堆疊中的每個機群建立不同別名。**

## 使用 CloudFormation 堆疊
<a name="resources-cloudformation-multistack"></a>

建議您在設定 Amazon GameLift Servers 資源的 CloudFormation 堆疊時使用下列結構。您的最佳堆疊結構會根據您要將遊戲部署在一個位置或多個位置而有所不同。

### 單一位置的堆疊
<a name="resources-cloudformation-multistack-singleregion"></a>

若要在單一位置管理Amazon GameLift Servers資源，我們建議使用兩堆疊結構：
+ **支援堆疊** – 此堆疊包含資源所依賴Amazon GameLift Servers的資源。至少，此堆疊應該包含 S3 儲存貯體，其中儲存自訂遊戲伺服器或 Realtime 指令碼檔案。堆疊也應該包含 IAM 角色，在建立Amazon GameLift Servers組建或指令碼資源時授予從 S3 儲存貯體擷取檔案的Amazon GameLift Servers許可。此堆疊也可能包含與遊戲搭配使用的其他 AWS 資源，例如 DynamoDB 資料表、Amazon Redshift 叢集和 Lambda 函數。
+ **Amazon GameLift Servers 堆疊 **– 此堆疊包含您的所有Amazon GameLift Servers資源，包括建置或指令碼、一組機群、別名和遊戲工作階段佇列。 會使用存放在 S3 儲存貯體位置中的檔案 CloudFormation 建立建置或指令碼資源，並將建置或指令碼部署至一或多個機群資源。每個機群都應該有一個對應別名。遊戲工作階段佇列會參考部分或全部機群別名。如果您是使用 FlexMatch 進行配對，此堆疊也會包含配對組態和規則集。

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

![資源Amazon GameLift Servers和支援服務 AWS 的 2 CloudFormation 個堆疊圖表。](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/resources-cf_single_vsd.png)


### 多個區域的堆疊
<a name="resources-cloudformation-multistack-multiregion"></a>

在多個區域中部署遊戲時，請記住資源如何跨區域互動。某些資源 (例如 Amazon GameLift Servers 機群) 只能參考同一區域中的其他資源。佇列等其他資源Amazon GameLift Servers與區域無關。若要管理多個區域中的 Amazon GameLift Servers 資源，我們建議使用下列結構。
+ **區域支援堆疊** – 這些堆疊包含資源所依賴Amazon GameLift Servers的資源。此堆疊必須包括 S3 儲存貯體，其中儲存自訂遊戲伺服器或 Realtime 指令碼檔案。它也可能包含遊戲的其他 AWS 資源，例如 DynamoDB 資料表、Amazon Redshift 叢集和 Lambda 函數。其中許多資源都是區域特定的，因此您必須在每個區域中建立這些資源。 Amazon GameLift Servers也需要允許存取這些支援資源的 IAM 角色。由於 IAM 角色與區域無關，因此您只需要一個角色資源，放置在任何區域中，並在所有其他支援堆疊中參考。
+ **區域Amazon GameLift Servers堆疊** – 此堆疊包含部署遊戲的每個區域中必須存在Amazon GameLift Servers的資源，包括組建或指令碼、一組機群和別名。 會使用 S3 儲存貯體位置中的檔案 CloudFormation 建立組建或指令碼資源，並將組建或指令碼部署至一或多個機群資源。每個機群都應該有一個對應別名。遊戲工作階段佇列會參考部分或全部機群別名。您可以維護一個範本，來描述這種類型的堆疊，並使用它在每個區域建立相同的資源集。
+ **全域Amazon GameLift Servers堆疊** – 此堆疊包含您的遊戲工作階段佇列和配對資源。這些資源可以位於任何區域，且通常放置在相同區域中。佇列可以參考位於任何區域中的機群或別名。若要在不同的區域中放置其他佇列，請建立額外的全域堆疊。

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

![包含區域特定和全域資源 CloudFormation 的資源堆疊圖表。](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/resources-cf_multi_vsd.png)


![圖表顯示區域 CloudFormation 堆疊如何共用全域資源，例如佇列。](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/resources-cf_multiqueue_vsd.png)


## 更新組建
<a name="resources-cloudformation-updatebuild"></a>

Amazon GameLift Servers 建置是不可變的，就像建置與機群之間的關係一樣。因此，當您更新託管資源，以使用一組新的遊戲建置檔案時，必須發生下列情況：
+ 使用一組新檔案來建立新建置 (取代)。
+ 建立一組新的機群來部署新的遊戲建置 (取代)。
+ 重新導向別名以指向新的機群 (更新而不中斷)。

如需詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[更新堆疊資源的行為](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-update-behaviors.html)。

### 自動部署建置更新
<a name="resources-cloudformation-updatebuild-auto"></a>

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

1. 從 S3 擷取新檔案、驗證這些檔案，並建立新的 Amazon GameLift Servers 建置。

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

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

1. 刪除舊機群。

1. 刪除舊建置。

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

您也可以 CloudFormation 保留資源，而不是將其刪除。如需詳細資訊，請參閱《 *AWS CloudFormation API 參考*》中的 [RetainResources](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStack.html)。

### 手動部署建置更新
<a name="resources-cloudformation-updatebuild-manual"></a>

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

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

下圖說明此程序。

![圖表顯示如何使用 CloudFormation 堆疊來更新遊戲伺服器組建。](http://docs.aws.amazon.com/zh_tw/gameliftservers/latest/developerguide/images/resources-cf_updating_vsd.png)


### 轉返的運作方式
<a name="resources-cloudformation-updatebuild-rollbacks"></a>

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

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

如需如何處理失敗或卡住的轉返的詳細資訊，請參閱*AWS CloudFormation 《 使用者指南*》中的[繼續轉返更新](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-continueupdaterollback.html)。