

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon GameLift Servers Anywhere 实例集
<a name="fleets-intro-anywhere"></a>

如果您想通过自有托管资源利用 Amazon GameLift Servers 功能，可以使用 Anywhere 实例集。Anywhere 实例集通常用作迭代开发的测试环境，或者在混合托管解决方案中与托管式实例集一起使用。

Anywhere 实例集由您提供和管理的一组计算资源（虚拟或物理）组成。从本地笔记本电脑到偏远哨站，计算可以驻留在任何具有连接的地理位置。在设置 Anywhere 实例集时，您可以向实例集添加计算资源，方法是通过 Amazon GameLift Servers 注册计算资源。每项计算资源都是使用其 IP 地址（或 DNS 名称）注册的，这样 Amazon GameLift Servers 就可以与之建立连接。

您可以将游戏服务器软件部署到 Anywhere 实例集，方法是将其安装在每个计算上并启动游戏服务器进程。每个启动的游戏服务器进程都会与 Amazon GameLift Servers 服务建立连接，并报告已准备好托管游戏会话。您可以使用现有的配置管理和部署工具来处理初始的部署和主机管理任务。与 Amazon GameLift Servers 结合使用还需要执行其他几项任务，包括：
+ 注册和取消注册计算以在实例集中添加或删除它们。
+ 在所有计算机上保留 up-to-date身份验证令牌。计算资源上的服务器进程在连接到 Amazon GameLift Servers 服务时会使用它们。

**注意**  
可选择使用 Amazon GameLift Servers 代理部署 Anywhere 实例集，以自动执行这些密钥管理任务。请参阅[使用 Amazon GameLift Servers 代理](integration-dev-iteration-agent.md)。

请参阅以下主题，了解如何设置和维护 Anywhere 实例集：
+  [借助 Amazon GameLift Servers Anywhere 进行托管的开发路线图](gamelift-roadmap-anywhere.md)
+  [借助 Amazon GameLift Servers 进行混合托管的开发路线图](gamelift-roadmap-hybrid.md)
+ [借助 Amazon GameLift Servers Anywhere 为迭代开发做好准备](integration-dev-iteration.md)
+  [创建 Amazon GameLift Servers Anywhere 实例集](fleets-creating-anywhere.md)
+  [更新 Amazon GameLift Servers 实例集配置](fleets-editing.md)

## Anywhere 实例集创建工作流程
<a name="fleets-creation-workflow-anywhere"></a>

对于 Anywhere 实例集，Amazon GameLift Servers 只会设置实例集资源。您需要设置计算并将其注册到实例集，还需要安装游戏服务器软件并启动游戏服务器进程以托管游戏会话。

1. Amazon GameLift Servers 在实例集的主区域中创建实例集资源。实例集状态和自定义位置状态设置为**新建**。

1. Amazon GameLift Servers 开始将事件写入实例集事件日志。

1. 创建实例集资源之后，Amazon GameLift Servers 会将实例集状态设置为**活跃**。此时，您可以将新计算注册到实例集。

# 创建 Amazon GameLift Servers Anywhere 实例集
<a name="fleets-creating-anywhere"></a>

本主题介绍如何创建 Amazon GameLift Servers Anywhere 实例集。借助 Anywhere 实例集，您可以使用核心的 Amazon GameLift Servers 游戏会话管理功能，同时使用您自己的计算资源来托管游戏会话。可以为您的本地硬件或其他基于云的资源创建 Anywhere 队列。

Anywhere 实例集通常在混合托管解决方案中与 Amazon GameLift Servers 托管式实例集一起使用。在开发使用 Amazon GameLift Servers 托管的游戏时，它们还提供有用的测试环境。请参阅以下主题，详细了解何时以及如何将 Amazon GameLift Servers Anywhere 实例集纳入游戏托管解决方案：
+ [混合托管](gamelift-intro-flavors.md#gamelift-intro-flavors-hosting-hybrid)
+ [为 Amazon GameLift Servers 部署托管实例集](fleets-intro.md)
+ [借助 Amazon GameLift Servers Anywhere 为迭代开发做好准备](integration-dev-iteration.md)

由于 Anywhere 实例集是自管理式的，因此设置实例集需要完成一些额外的工作。要让 Anywhere 实例集做好托管游戏会话和玩家的准备，您需要完成以下任务：

**Topics**
+ [开始之前](#fleet-anywhere-start)
+ [创建自定义位置](#fleet-anywhere-location)
+ [创建 Anywhere 实例集](#fleet-anywhere-create)
+ [向实例集添加计算](#fleet-anywhere-compute)
+ [启动游戏服务器](#fleet-anywhere-process)

## 开始之前
<a name="fleet-anywhere-start"></a>

在创建 Anywhere 实例集之前，请执行以下任务。有关更详细的指导，请参阅[借助 Amazon GameLift Servers Anywhere 进行托管的开发路线图](gamelift-roadmap-anywhere.md)或[借助 Amazon GameLift Servers 进行混合托管的开发路线图](gamelift-roadmap-hybrid.md)。
+ **将您的游戏服务器代码与 Amazon GameLift Servers 服务器 SDK 版本 5.x（或更高版本）集成。**您无需完成所有游戏集成任务，只需完成游戏服务器生成包所需的任务即可。常见的做法是将本地计算机设置为 Anywhere 实例集，并使用命令行界面测试游戏服务器集成（请参阅[使用 Amazon GameLift Servers Anywhere 设置本地测试](integration-testing.md)）。您可以在开发时加入其他组件（例如支持 Amazon GameLift Servers 的游戏客户端）。
+ **将您的游戏服务器软件打包，以便安装到您的 Anywhere 实例集计算。**该软件包应包含您的集成式游戏服务器生成包以及运行您的游戏服务器所需的所有支持软件。
+ **决定是否对您的 Anywhere 实例集使用 Amazon GameLift Servers 代理。**该代理是一种计算进程管理工具，可自动执行与管理服务器进程和计算资源相关的一些关键任务，以便与 Amazon GameLift Servers 配合使用。有关更多信息，请参阅 [使用 Amazon GameLift Servers 代理](integration-dev-iteration-agent.md)。

## 创建自定义位置
<a name="fleet-anywhere-location"></a>

创建一个自定义位置来表示您的计算资源的物理位置。创建 Anywhere 实例集时，必须至少已定义一个自定义位置。您可以随时创建更多自定义位置并将其添加到现有实例集。

**创建自定义位置**

使用 Amazon GameLift Servers 控制台或 AWS Command Line Interface（AWS CLI）创建自定义位置。

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

在 [Amazon GameLift Servers 控制台](https://console.aws.amazon.com/gamelift/)中，使用导航窗格打开**位置**页面。选择**创建位置**以打开“创建”对话框。

1. 在对话框中，输入**位置名称**。作为最佳实践，请使用可描述一组计算资源的有意义位置的名称。这可以是地理位置、数据中心名称或其他位置标识符。Amazon GameLift Servers 会在您的自定义位置名称后面加上 **custom-**。

1. （可选）向自定义位置添加标签。每个标签都包含定义的一个键和一个可选值。为您希望以有用的方式（如按用途、所有者或环境）分类的 AWS 资源分配标签。为每个要添加的标签选择**添加新标签**。

1. 选择**创建**。

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

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/create-location.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/create-location.html) 命令创建自定义位置。提供一个 `location-name` 值，该值必须以 `custom-` 开头。作为最佳实践，请使用可描述一组计算资源的有意义位置的名称。这可以是地理位置、数据中心名称或其他位置标识符。

```
aws gamelift create-location \
    --location-name custom-location-1
```

Output

```
{
    "Location": {
        "LocationName": "custom-location-1",
        "LocationArn": "arn:aws:gamelift:us-east-1:111122223333:location/custom-location-1"
    }
}
```

------

## 创建 Anywhere 实例集
<a name="fleet-anywhere-create"></a>

为您拥有的一组计算资源创建一个 Anywhere 实例集。新的 Anywhere 实例集一开始是空的；您可以通过注册计算向实例集添加计算。

创建后，新 Anywhere 实例集的状态会从 `NEW` 快速切换到 `ACTIVE`。您可以在实例集进入 `ACTIVE` 状态后向其添加计算。

**创建 Anywhere 实例集**

使用 Amazon GameLift Servers 控制台或 AWS Command Line Interface（AWS CLI）创建 Anywhere 实例集。

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

在 [Amazon GameLift Servers 控制台](https://console.aws.amazon.com/gamelift/)中，使用导航窗格打开**实例集**页面。选择**创建实例集**以启动实例集创建工作流程。

**步骤 1 选择计算类型**  
选择 **Anywhere** 选项，然后选择**下一步**。

**步骤 2 定义实例集详细信息**  
在此步骤中，指定一些关键的实例集范围的设置。  

1. 填写**实例集详细信息**部分：

   1. 输入实例集**名称**。我们建议使用实例集命名模式，以便于在查看实例集列表时识别实例集类型。

   1. 提供对实例集的简短**描述**。

1. 根据需要设置这些可选的**其他详细信息**。您可以稍后更新这些实例集设置。

   1. 创建用于生产或生产前测试的实例集时，可使用此设置指定实例集计算资源的每小时**成本**值。Amazon GameLift Servers 可以在游戏会话放置过程中使用此信息，以根据成本选择托管资源。

   1. 如果要合并此实例集和其他实例集的指标数据，请指定**指标组**名称。对要合并在一起的所有实例集使用相同的指标组名称。查看指标组的指标以查看聚合数据。

1. 向自定义位置添加可选标签。每个标签都包含定义的一个键和一个可选值。为您希望以有用的方式（如按用途、所有者或环境）分类的 AWS 资源分配标签。为每个要添加的标签选择**添加新标签**。

1. 选择**下一步**以继续工作流程。

**步骤 3 选择自定义位置**  
在此步骤中，确定您计划添加到此实例集的计算的物理位置。您可以现在指定一个或多个位置，也可以稍后根据需要添加或删除位置。  

1. 在**自定义位置**中，为实例集的计算选择一个或多个位置。该列表包含在您当前选择的 AWS 区域中已定义的所有自定义位置。要定义希望添加到实例集的新自定义位置，请选择**创建位置**。

1. 选择**下一步**以继续工作流程。

**步骤 4 审核并创建**  
在创建实例集之前，请审查您的设置。  
当您准备好部署新实例集时，请选择**创建**。Amazon GameLift Servers 会立即开始实例集激活流程，分配一个唯一 ID 并将实例集状态设为 `NEW`。您可以在**实例集**页面上跟踪实例集的进度。

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

使用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/create-fleet.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/create-fleet.html) 命令创建计算类型 `ANYWHERE` 的实例集。提供一个名称和至少一个自定义位置。Amazon GameLift Servers 会在当前的默认 AWS 区域中创建 Anywhere 实例集资源（您也可以添加 --region 标签来指定其他 AWS 区域）。

以下示例请求创建了一个具有最少必要设置的新实例集。将 `FleetName` 和 `custom-location` 替换为您自己的信息。

```
aws gamelift create-fleet \
--name FleetName \
--compute-type ANYWHERE \
--locations "Location=custom-location"
```

响应示例

```
{
    "FleetAttributes": {
        "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa",
        "FleetArn": "arn:aws:gamelift:us-west-2:111122223333:fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa",
        "Name": "HardwareAnywhere",
        "CreationTime": "2023-02-23T17:57:42.293000+00:00",
        "Status": "ACTIVE",
        "MetricGroups": [
            "default"
        ],
        "CertificateConfiguration": {
            "CertificateType": "DISABLED"
        },
        "ComputeType": "ANYWHERE"
    }
}
```

创建后，新 Anywhere 实例集的状态会快速切换到 `ACTIVE`。您可以在实例集进入 `ACTIVE` 状态后向其添加计算。

请注意，响应不包含实例集位置。您可以通过调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-attributes.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-attributes.html) 和 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-location-attributes.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-location-attributes.html) 来检索完整的实例集详细信息。

------

## 向实例集添加计算
<a name="fleet-anywhere-compute"></a>

要向一个实例集添加计算资源并让该实例集做好托管游戏会话的准备，请执行以下任务：
+ 将计算注册到实例集。注册会告知 Amazon GameLift Servers 哪些物理托管资源是实例集的一部分。
+ 为计算请求身份验证令牌。在计算资源上运行的每台游戏服务器都需要此令牌才能连接到 Amazon GameLift Servers 服务。身份验证令牌是临时的，必须定期刷新。

**注意**  
如果您使用 Amazon GameLift Servers 代理来部署游戏服务器软件，则可跳过此步骤。代理会自动注册每个计算并为计算保持有效的身份验证令牌。请参阅[使用 Amazon GameLift Servers 代理](integration-dev-iteration-agent.md)。

您可以通过使用 AWS CLI 或以编程方式调用适用于 Amazon GameLift Servers 的 AWS SDK 来注册计算资源和请求身份验证令牌。这些操作无法通过 Amazon GameLift Servers 控制台进行。

作为最佳实践，建议通过向每个计算添加启动脚本来自动执行这两项任务。启动脚本会自动调用 `register-compute` 和 `get-compute-auth-token` 命令。您还可以自动执行任务，以便在计算的整个生命周期内定期刷新身份验证令牌，并在关机时取消注册计算。

每个启动操作都会返回特定于计算的值，您需要将这些值存储在计算上。当游戏服务器进程在计算上启动时，它必须在初始化与 Amazon GameLift Servers 服务的连接时将这些值作为服务器参数传递（请参阅服务器 SDK 参考中的 [ServerParameters](integration-server-sdk5-cpp-datatypes.md#integration-server-sdk5-cpp-dataypes-serverparameters)）。我们建议您将这些特定于计算的值（或其存储位置）设置为环境变量。如果您使用的是 Amazon GameLift Servers 代理，它将为您处理此任务。特定于计算的值如下：
+ `register-compute` 会为 `GameLiftServiceSdkEndpoint` 返回一个值。请将此值设置为 `webSocketUrl` 服务器参数。
+ `compute-auth-token` 会返回身份验证令牌。请将此值设置为 `authToken` 服务器参数。

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

以下说明介绍了如何使用 AWS CLI 手动提交每个请求。

**注册计算** 

调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/register-compute.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/register-compute.html) 以注册计算。确定要向其添加计算的实例集的 ID。提供以下计算信息：有意义的名称、IP 地址和位置。计算的位置必须是已与实例集关联的自定义位置。如果要使用其他自定义位置，请使用 Amazon GameLift Servers 控制台更新实例集，或调用 AWS CLI 命令 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/create-fleet-locations.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/create-fleet-locations.html) 向实例集添加自定义位置。

在以下示例中，替换计算和实例集的占位符值。`fleet-id` 值将在您创建 Anywhere 实例集时返回。您可以通过调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-attributes.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-attributes.html) 和 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-location-attributes.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-location-attributes.html) 来检索完整的实例集详细信息。

```
aws gamelift register-compute \
    --compute-name HardwareAnywhere \
    --fleet-id arn:aws:gamelift:us-east-1:111122223333:fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \
    --ip-address 10.1.2.3 \
    --location custom-location-1
```

示例输出

```
{
    "Compute": {
        "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa",
        "FleetArn": "arn:aws:gamelift:us-west-2:111122223333:fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa",
        "ComputeName": "HardwareAnywhere",
        "ComputeArn": "arn:aws:gamelift:us-west-2:111122223333:compute/HardwareAnywhere",
        "IpAddress": "10.1.2.3",
        "ComputeStatus": "Active",
        "Location": "custom-location-1",
        "CreationTime": "2023-02-23T18:09:26.727000+00:00",
        "GameLiftServiceSdkEndpoint": "wss://us-west-2.api.amazongamelift.com"
    }
}
```

**请求身份验证令牌**

调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/get-compute-auth-token.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/get-compute-auth-token.html) 以请求有效的身份验证令牌。注册计算。确定实例集 ID 和计算名称。

在以下示例中，替换计算和实例集的占位符值。`fleet-id` 值将在您创建 Anywhere 实例集时返回。您可以通过调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-attributes.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/describe-fleet-attributes.html) 来检索完整的实例集详细信息。要查找计算信息，请使用实例集 ID 调用 [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/list-compute.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/list-compute.html)，以查看注册到实例集的所有计算。

```
aws gamelift get-compute-auth-token \
    --fleet-id arn:aws:gamelift:us-east-1:111122223333:fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa \
    --compute-name HardwareAnywhere
```

示例输出

```
{
    "FleetId": "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa",
    "FleetArn": "arn:aws:gamelift:us-east-1:111122223333:fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa",
    "ComputeName": "HardwareAnywhere",
    "ComputeArn": "arn:aws:gamelift:us-east-1:111122223333:compute/HardwareAnywhere",
    "AuthToken": "0c728041-3e84-4aaa-b927-a0fb202684c0",
    "ExpirationTimestamp": "2023-02-23T18:47:54+00:00"
}
```

------

## 启动游戏服务器
<a name="fleet-anywhere-process"></a>

创建 Anywhere 实例集并向该实例集添加一个或多个计算后，就可以开始运行游戏服务器了。

**步骤 1 安装游戏服务器软件**  
将游戏服务器生成包和所有相关软件安装到 Anywhere 实例集中的每个计算。游戏服务器生成包必须与 Amazon GameLift Servers 服务器 SDK 版本 5.x（或更高版本）集成，并具备与 Amazon GameLift Servers 服务通信所需的最低功能。

**步骤 2 让计算做好运行游戏服务器的准备**  
确保每个计算都已注册并具有有效的身份验证令牌。如果您要使用脚本来管理这些任务，请确保在启动任何游戏服务器进程之前，脚本已在每个计算上运行。  
如果您已将 Amazon GameLift Servers 代理与游戏服务器软件一起部署，请确保代理可执行文件已启动。

**步骤 3 启动游戏服务器进程**  
在计算上运行游戏服务器可执行文件的实例。如果游戏服务器生成包已正确集成，游戏服务器进程会调用服务器 SDK 操作 `InitSDK()`，其中包含一组有效的服务器参数。当服务器进程准备好托管游戏会话后，它会调用 `ProcessReady()`。  
如果您已使用 Amazon GameLift Servers 代理部署游戏服务器软件，则可跳过此步骤。代理会根据您提供的运行时说明自动启动游戏服务器进程。
您可以通过查看激活中和已激活的服务器进程的服务器进程指标来监控进度。请参阅[Amazon GameLift Servers 队组指标](monitoring-cloudwatch.md#gamelift-metrics-fleet)。如果游戏服务器进程初始化失败，请验证该进程是否正在为运行它的计算检索正确的服务器参数值。