

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

# 為 建立遊戲伺服器組建 Amazon GameLift Servers
<a name="gamelift-build-cli-uploading"></a>

將遊戲伺服器與 整合後 Amazon GameLift Servers（請參閱 [準備使用 託管的遊戲 Amazon GameLift Servers](integration-intro.md))，請將遊戲伺服器軟體安裝到您的運算資源以進行託管。此程序會根據您使用的Amazon GameLift Servers託管類型而有所不同。

## 部署受管託管
<a name="gamelift-build-custom-upload"></a>

如果您使用Amazon GameLift Servers受管 EC2 託管，則必須封裝遊戲伺服器軟體並將其上傳至 Amazon GameLift Servers。當您建立受管機群時， Amazon GameLift Servers會自動將其部署到每個機群執行個體。

本節中的主題說明如何封裝您的建置檔案以進行上傳、建立選用的建置安裝指令碼，然後使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/) 或 AWS SDK 上傳檔案。

## 部署 for Anywhere 託管
<a name="gamelift-build-custom-anywhere"></a>

如果您使用 Amazon GameLift Servers Anywhere 機群進行自我管理託管，則您有責任在機群中的每個運算上安裝遊戲伺服器軟體，並保持更新狀態。

當整合的遊戲伺服器程序開始執行時，它會自動初始化並與 Amazon GameLift Servers服務建立通訊。伺服器程序會從 提示啟動遊戲工作階段，Amazon GameLift Servers並將活動回報給 服務。

**Topics**
+ [部署受管託管](#gamelift-build-custom-upload)
+ [部署 for Anywhere 託管](#gamelift-build-custom-anywhere)
+ [封裝遊戲建置檔案](gamelift-build-packaging.md)
+ [新增建置安裝指令碼](gamelift-build-cli-uploading-install.md)
+ [建立受管託管的Amazon GameLift Servers建置資源](gamelift-build-cli-uploading-builds.md)

# 封裝遊戲建置檔案
<a name="gamelift-build-packaging"></a>

將已設定的遊戲伺服器上傳至 之前Amazon GameLift Servers，請將遊戲建置檔案封裝至建置目錄。使用 EC2 受管機群託管時需要此程序，使用 Anywhere 機群託管時最佳實務。建置目錄應包含執行遊戲伺服器和託管遊戲工作階段所需的所有元件。這可能包括下列項目：
+ **遊戲伺服器二進位檔** – 執行遊戲伺服器所需的二進位檔案。建置可以包含多個遊戲伺服器的二進位檔，這些遊戲伺服器建置為在相同平台上執行。如需支援的平台清單，請參閱 [取得Amazon GameLift Servers開發工具](gamelift-supported.md)。
+ **相依性** – 遊戲伺服器可執行檔執行時所需的任何相依檔案。範例包括資產、設定檔和相依程式庫。
**注意**  
對於使用適用於 C\$1\$1 的伺服器 SDK 建立Amazon GameLift Servers的遊戲組建 （包括使用 Unreal 外掛程式建立的遊戲組建），請包含與您建置伺服器 SDK 的相同 OpenSSL 版本的 OpenSSL OpenSSL DLL。如需詳細資訊，請參閱伺服器 SDK README 檔案。
+ **安裝指令碼** （選用） – 指令碼檔案，用於處理在Amazon GameLift Servers託管伺服器上安裝遊戲組建的任務。將此檔案放在建置目錄的根目錄。 會在建立機群時Amazon GameLift Servers執行安裝指令碼。

您可以在建置中設定任何應用程式，包括您的安裝指令碼，以在其他 AWS 服務上安全地存取您的資源。如需如何執行此操作的資訊，請參閱 [將Amazon GameLift Servers託管遊戲伺服器連接到其他 AWS 資源](gamelift-sdk-server-resources.md)。

封裝建置檔案之後，請確定您的遊戲伺服器可以在目標作業系統的乾淨安裝上執行，以確認包含所有必要的相依性，且您的安裝指令碼正確無誤。

# 新增建置安裝指令碼
<a name="gamelift-build-cli-uploading-install"></a>

為遊戲建置的作業系統 (OS) 建立安裝指令碼：
+ Windows：建立名為 的批次檔案`install.bat`。
+ Linux：建立名為 的 shell 指令碼檔案`install.sh`。

在建立安裝指令碼時，請注意下列資訊：
+ 指令碼無法接受任何使用者輸入。
+ Amazon GameLift Servers 在下列位置的託管伺服器上安裝組建並重新建立組建套件中的檔案目錄：
  + Windows 機群： `C:\game`
  + Linux 機群： `/local/game`
+ 在 Linux 機群的安裝程序中，執行身分使用者對執行個體檔案結構的存取有限。此使用者擁有安裝建置檔案之目錄的完整權限。如果您的安裝指令碼執行需要管理員許可的動作，請使用 指定管理員存取權**sudo**。Windows 機群的執行身分使用者預設具有管理員許可。與安裝指令碼相關的許可失敗會產生事件訊息，指出指令碼有問題。
+ 在 Linux 上， Amazon GameLift Servers支援常見的 shell 解譯器語言，例如 bash。在安裝指令碼的開頭新增 shebang (例如 `#!/bin/bash`)。若要驗證對偏好的 shell 命令的支援，請遠端存取作用中的 Linux 執行個體並開啟 shell 提示。如需詳細資訊，請參閱[連線至機群執行個體](fleets-remote-access.md)。
+ 安裝指令碼無法依賴 VPC 互連連線。在 將建置Amazon GameLift Servers安裝到機群執行個體之前，無法使用 VPC 互連連線。

**Example Windows 安裝 bash 檔案**  
此範例`install.bat`檔案會安裝遊戲伺服器所需的 Visual C\$1\$1 執行期元件，並將結果寫入日誌檔案。指令碼在根目錄的建置套件中包含元件檔案。  

```
vcredist_x64.exe /install /quiet /norestart /log c:\game\vcredist_2013_x64.log
```

**Example Linux 安裝 shell 指令碼**  
此範例`install.sh`檔案在安裝指令碼中使用 bash，並將結果寫入日誌檔案。  

```
#!/bin/bash
echo 'Hello World' > install.log
```
此範例`install.sh`檔案示範如何使用 Amazon CloudWatch 代理程式來收集系統層級和自訂指標，並處理日誌輪換。由於 是在服務 VPC 中Amazon GameLift Servers執行，因此您必須授予代表您擔任 AWS Identity and Access Management (IAM) 角色的Amazon GameLift Servers許可。若要允許 Amazon GameLift Servers 擔任角色，請建立包含 AWS 受管政策 的角色`CloudWatchAgentAdminPolicy`，並在建立機群時使用該角色。  

```
sudo yum install -y amazon-cloudwatch-agent
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y collectd
cat <<'EOF' > /tmp/config.json
{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "root",
        "credentials": {
            "role_arn": "arn:aws:iam::account#:role/rolename"
        }
    },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/tmp/log",
                        "log_group_name": "gllog",
                        "log_stream_name": "{instance_id}"
                    }
                ]
            }
        }
    },
    "metrics": {
       "namespace": "GL_Metric",
        "append_dimensions": {
            "ImageId": "${aws:ImageId}",
            "InstanceId": "${aws:InstanceId}",
            "InstanceType": "${aws:InstanceType}"
        },
        "metrics_collected": {
            // Configure metrics you want to collect.
            // For more information, see [Manually create or edit the CloudWatch agent configuration file](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-Configuration-File-Details.html).
        }
    }
}
EOF
sudo mv /tmp/config.json /opt/aws/amazon-cloudwatch-agent/bin/config.json
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
sudo systemctl enable amazon-cloudwatch-agent.service
```

# 建立受管託管的Amazon GameLift Servers建置資源
<a name="gamelift-build-cli-uploading-builds"></a>

在建立建置並上傳檔案時，您有幾個選項：
+ [從檔案目錄建立組建](gamelift-build-cli-uploading-upload-build.md)。 這是最簡單且最常用的選項。
+ [使用 Amazon Simple Storage Service (Amazon S3) 中的檔案建立組](gamelift-build-cli-uploading-create-build.md)建。使用此選項，您可以在 Amazon S3 中管理建置版本。

使用這兩種方法， Amazon GameLift Servers 會使用唯一的組建 ID 和其他中繼資料建立新的組建資源。組建以**初始化**狀態開始。在 Amazon GameLift Servers取得遊戲伺服器檔案後，組建會移至**就緒**狀態。

當組建準備就緒時，您可以將其部署到新的Amazon GameLift Servers機群。如需詳細資訊，請參閱 [建立Amazon GameLift Servers受管 EC2 機群](fleets-creating.md)。當 Amazon GameLift Servers 設定新機群時，它會將建置檔案下載到每個機群執行個體，並安裝建置檔案。

# 從檔案目錄建立組建
<a name="gamelift-build-cli-uploading-upload-build"></a>

若要建立存放在任何位置的遊戲組建，包括本機目錄，請使用 [https://docs.aws.amazon.com/cli/latest/reference/gamelift/upload-build.html](https://docs.aws.amazon.com/cli/latest/reference/gamelift/upload-build.html) AWS CLI 命令。此命令會在 Amazon GameLift Servers 中建立新的建置記錄，並從您指定的位置上傳檔案。

**傳送上傳請求。**在命令列視窗中，輸入下列**upload-build**命令和參數。

```
aws gamelift upload-build \
    --name user-defined name of build \
    --operating-system supported OS \
    --server-sdk-version server SDK for Amazon GameLift Servers version \
    --build-root build path \
    --build-version user-defined build number \
    --region region name
```
+ **operating-system** – 遊戲伺服器的建置執行期環境。您必須指定作業系統值。您稍後無法更新此項目。
+ **server-sdk-version** – 遊戲Amazon GameLift Servers伺服器與之整合的伺服器 SDK 版本。如果您不提供值， Amazon GameLift Servers會使用預設值 `4.0.2`。如果您指定不正確的伺服器 SDK 版本，則呼叫 `InitSdk` 以建立Amazon GameLift Servers與服務的連線時，遊戲伺服器建置可能會失敗。
+ **build-root** – 建置檔案的目錄路徑。
+ **name** – 新建置的描述性名稱。
+ **build-version** – 組建檔案的版本詳細資訊。
+ **region** – 您要建立建置的 AWS 區域。在您計劃部署機群的區域中建立建置。如果您要在多個區域中部署遊戲，請在每個區域中建立組建。
**注意**  
使用 檢視您目前的預設區域[https://docs.aws.amazon.com/cli/latest/reference/configure/get.html](https://docs.aws.amazon.com/cli/latest/reference/configure/get.html)。若要變更您的預設區域，請使用 [https://docs.aws.amazon.com/cli/latest/reference/configure/set.html](https://docs.aws.amazon.com/cli/latest/reference/configure/set.html)命令。

*範例*

```
aws gamelift upload-build \
    --operating-system AMAZON_LINUX_2023 \
    --server-sdk-version "5.0.0" \
    --build-root "~/mygame" \
    --name "My Game Nightly Build" \
    --build-version "build 255" \
    --region us-west-2
```

```
aws gamelift upload-build \
    --operating-system WINDOWS_2022 \
    --server-sdk-version "5.0.0" \
    --build-root "C:\mygame" \
    --name "My Game Nightly Build" \
    --build-version "build 255" \
    --region us-west-2
```

為了回應您的上傳請求， Amazon GameLift Servers提供上傳進度。成功上傳時， 會Amazon GameLift Servers傳回新的建置記錄 ID。上傳時間取決於遊戲檔案的大小和連線速度。

# 使用 Amazon S3 中的檔案建立組建
<a name="gamelift-build-cli-uploading-create-build"></a>

您可以將建置檔案存放在 Amazon S3 中，並從Amazon GameLift Servers該處將其上傳到 。當您建立建置時，您可以指定 S3 儲存貯體位置，並直接從 Amazon S3 Amazon GameLift Servers擷取建置檔案。

**建立建置資源**

1. **將您的建置檔案儲存在 Amazon S3 中。**建立包含封裝建置檔案的 .zip 檔案，並將其上傳至 中的 S3 儲存貯體 AWS 帳戶。請記下儲存貯體標籤和檔案名稱，您在建立Amazon GameLift Servers組建時將需要這些名稱。

1. **讓 Amazon GameLift Servers 可以存取您的建置檔案。**遵循 中的指示建立 IAM 角色[在 Amazon S3 中存取遊戲組建檔案](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-access-storage-loc)。建立角色後，請記下新角色的 Amazon Resource Name (ARN)，建立組建時將需要此名稱。

1. **建立組建。**使用 Amazon GameLift Servers主控台或 AWS CLI 建立新的建置記錄。您必須擁有 `PassRole`許可，如中所述[的 IAM 許可範例 Amazon GameLift Servers](gamelift-iam-policy-examples.md)。

------
#### [ Console ]

1. 在[Amazon GameLift Servers主控台](https://console.aws.amazon.com/gamelift/)的導覽窗格中，選擇**託管**、**建置**。

1. 在**建置**頁面上，選擇**建立建置**。

1. 在**建立建置**頁面的**建置設定**下，執行下列動作：

   1. 針對**名稱**，輸入指令碼名稱。

   1. 在**版本**中，輸入版本。由於您可以更新組建的內容，版本資料可協助您追蹤更新。

   1. 針對**作業系統 (OS)**，選擇遊戲伺服器建置的作業系統。您稍後無法更新此值。

   1. 針對**遊戲伺服器建置**，輸入您上傳到 Amazon **S3 之建置物件**的 S3 URI，然後選擇**物件版本**。 Amazon S3 如果您不記得 Amazon S3 URI 和物件版本，請選擇**瀏覽 S3** 並搜尋建置物件。

   1. 對於 **IAM 角色**，請選擇您建立的角色，以Amazon GameLift Servers允許存取您的 S3 儲存貯體和建置物件。

1. （選用） 在**標籤**下，輸入**索引**鍵和**值**對，將標籤新增至組建。

1. 選擇**建立**。

Amazon GameLift Servers 會將 ID 指派給新組建，並上傳指定的 .zip 檔案。您可以在組建頁面上檢視新**組**建，包括狀態。

------
#### [ AWS CLI ]

若要定義新建置並上傳伺服器建置檔案，請使用 [https://docs.aws.amazon.com/cli/latest/reference/gamelift/create-build.html](https://docs.aws.amazon.com/cli/latest/reference/gamelift/create-build.html)命令。

1. 開啟命令列視窗，並切換到您可以使用 的目錄 AWS CLI。

1. 輸入下列**create-build**命令：

   ```
   aws gamelift create-build \
       --name user-defined name of build \
       --server-sdk-version server SDK for Amazon GameLift Servers version \
       --operating-system supported OS \
       --build-version user-defined build number \
       --storage-location "Bucket"=S3 bucket label,"Key"=Build .zip file name,"RoleArn"=Access role ARN} \
       --region region name
   ```
   + **name** – 新建置的描述性名稱。
   + **server-sdk-version** – Amazon GameLift Servers您用來整合遊戲伺服器與 的伺服器 SDK 版本Amazon GameLift Servers。如果您未提供值， Amazon GameLift Servers會使用預設值 `4.0.2`。
   + **operating-system** – 遊戲伺服器的建置執行期環境。您必須指定作業系統值。您稍後無法更新此項目。
   + **build-version** – 組建檔案的版本詳細資訊。此資訊很有用，因為每個遊戲伺服器的新版本都需要新的建置資源。
   + **storage-location**
     + **Bucket** – 包含您建置的 S3 儲存貯體名稱。例如，"my\$1build\$1files"。
     + **Key** – 包含建置檔案的 .zip 檔案名稱。例如，「my\$1game\$1build\$17.0.1、7.0.2」。
     + **RoleARN** – 指派給您建立之 IAM 角色的 ARN。例如，「arn：aws：iam：：111122223333：role/GameLiftAccess」。如需政策範例，請參閱 [在 Amazon S3 中存取遊戲組建檔案](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-access-storage-loc)。
   + **region** – 在您計劃部署機群的 AWS 區域中建立建置。如果您要在多個區域中部署遊戲，請在每個區域中建立組建。
**注意**  
我們建議您使用 [https://docs.aws.amazon.com/cli/latest/reference/configure/get.html](https://docs.aws.amazon.com/cli/latest/reference/configure/get.html)命令檢查目前的預設區域[https://docs.aws.amazon.com/cli/latest/reference/configure/get.html](https://docs.aws.amazon.com/cli/latest/reference/configure/get.html)。若要變更您的預設區域，請使用 [https://docs.aws.amazon.com/cli/latest/reference/configure/set.html](https://docs.aws.amazon.com/cli/latest/reference/configure/set.html)命令。

   *範例*

   ```
   aws gamelift create-build \
       --operating-system WINDOWS_2022 \
       --storage-location "Bucket"="my_game_build_files","Key"="mygame_build_101.zip","RoleArn"="arn:aws:iam::111122223333:role/gamelift" \
       --name "My Game Nightly Build" \
       --build-version "build 101" \
       --region us-west-2
   ```

1. 若要檢視新組建，請使用 [https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-build.html](https://docs.aws.amazon.com/cli/latest/reference/gamelift/describe-build.html)命令。

------