将自定义服务器构建上传到 Amazon GameLift - Amazon GameLift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将自定义服务器构建上传到 Amazon GameLift

将游戏服务器与 Amazon GameLift 集成后,将构建文件上传到 Amazon GameLift。本主题介绍如何使用 Amazon Command Line Interface (Amazon CLI) 或 Amazon 软件开发工具包打包游戏构建文件,创建可选的构建安装脚本,然后上传文件。

打包游戏构建文件

在将您配置的游戏服务器上传到 Amazon GameLift 之前,请将游戏构建文件打包到构建目录中。此目录必须包含运行您的游戏服务器和托管游戏会话所需的所有组件,如下所示:

  • 游戏服务器二进制文件 – 运行游戏服务器所需的二进制文件。构建可以包括多个为相同平台构建的游戏服务器的二进制文件。有关受支持平台的列表,请参阅Amazon 为开发提供支持 GameLift

  • 依赖项 – 运行游戏服务器可执行文件所需的任何相关文件。示例包括资产、配置文件和相关库。

    注意

    对于使用适用于 C++ 的 Amazon GameLift 服务器软件开发工具包创建的游戏构建(包括使用 Unreal 插件创建的构建),请包含与您构建服务器软件开发工具包时使用的相同 OpenSSL 版本的 OpenSSL DLL。有关更多详细信息,请参阅服务器软件开发工具包自述文件。

  • 安装脚本(可选)– 用于处理在 Amazon GameLift 托管服务器上安装游戏构建的任务的脚本文件。将此文件放置到构建目录的根目录中。Amazon GameLift 在创建实例集时运行安装脚本。

您可以在构建中设置任何应用程序,包括您的安装脚本,以确保安全访问您在其他 Amazon 服务上的资源。有关如何执行此操作的信息,请参阅与您的实例集中的其他 Amazon 资源进行通信

在您打包构建文件后,请确保您的游戏服务器运行在目标操作系统的干净安装上。这有助于验证您在程序包内包含了所有必需的依赖项,并且您的安装脚本准确。

创建 Amazon GameLift 构建

创建构建和上传文件时,有几个选项可供选择:

通过这两种方法,Amazon GameLift 使用唯一的构建 ID 和其他元数据创建新的构建资源。生成以已初始化状态开始。Amazon GameLift 获取游戏服务器文件后,构建将变为就绪状态。

构建准备就绪后,您可以将其部署到新的 Amazon GameLift 实例集中。有关更多信息,请参阅创建 Amazon GameLift 托管实例集。当 Amazon GameLift 设置新实例集时,它会将构建文件下载到每个实例集实例并安装构建文件。

从文件目录创建构建

要创建存储在任意位置(包括本地目录)的游戏构建,请使用 upload-build Amazon CLI 命令。此命令在 Amazon GameLift 中创建一个新的构建记录并从您指定的位置上传文件。

发送上传请求。在命令行窗口中,键入以下 upload-build 命令和参数。

aws gamelift upload-build \ --name user-defined name of build \ --operating-system supported OS \ --server-sdk-version Amazon GameLift server SDK version \ --build-root build path \ --build-version user-defined build number \ --region region name
  • operating-system – 游戏服务器构建的运行时环境。您必须指定操作系统值。您稍后无法更新。

  • server-sdk-version – 您的游戏服务器与之集成的 Amazon GameLift 服务器软件开发工具包版本。如果您没有提供值,则 Amazon GameLift 会使用默认值 4.0.2。如果您指定的服务器软件开发工具包版本不正确,则在调用 InitSdk 建立与 Amazon GameLift 服务的连接时,游戏服务器构建可能会失败。

  • build-root – 您的构建文件的目录路径。

  • name – 新构建的描述性名称。

  • build-version – 构建文件的版本详细信息。

  • region – 要创建构建的 Amazon 区域。在要部署实例集的区域中创建构建。如果您在多个区域中部署游戏,则需在每个区域中创建一个构建。

    注意

    使用 aws configure get region 查看您当前的默认区域。要更改默认区域,请使用 aws configure set region region name 命令。

示例

aws gamelift upload-build \ --operating-system AMAZON_LINUX_2 \ --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_2016 \ --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 会提供上传进度。成功上传后,Amazon GameLift 会返回新的构建记录 ID。上传时间取决于游戏文件的大小和连接速度。

使用 Amazon S3 中的文件创建构建

您可以将构建文件存储在 Amazon S3 中,然后从那里将其上传到 Amazon GameLift。在创建构建时,指定 S3 存储桶的位置,然后 Amazon GameLift 会从 Amazon S3 直接检索构建文件。

创建构建资源
  1. 将构建文件存储在 Amazon S3 中。创建一个 .zip 文件,其中包含打包的构建文件,并将其上传到您 Amazon Web Services 账户中的 S3 存储桶。记下存储桶标签和文件名;您在创建 Amazon GameLift 构建时需要这些内容。

  2. 向 Amazon GameLift 提供对您构建文件的访问权限。按照在 Amazon S3 中访问游戏构建文件中的说明创建 IAM 角色。创建角色后,记录新角色的 Amazon 资源名称 (ARN),您在创建构建时需要该名称。

  3. 创建构建 使用 Amazon GameLift 控制台或 Amazon CLI 创建新的构建记录。您必须拥有 PassRole 权限,如Amazon GameLift 的 IAM 权限示例中所述。

Console
  1. Amazon GameLift 控制台的导航窗格中,选择托管构建

  2. 构建页面上,选择创建构建

  3. 创建构建页面的构建设置下,执行以下操作:

    1. 对于名称,输入脚本名称。

    2. 对于版本,输入版本。由于构建内容可以更新,版本数据则有助于跟踪更新。

    3. 对于操作系统 (OS),选择您的游戏服务器构建的操作系统。您稍后无法更新此值。

    4. 对于游戏服务器构建,输入您上传到 Amazon S3 的构建目标的 S3 URI,然后选择目标版本。如果您忘记了 Amazon S3 URI 和对象版本,选择浏览 S3,然后搜索构建对象。

    5. 对于 IAM 角色,选择您创建的允许 Amazon GameLift 访问您的 S3 存储桶和构建对象的角色。

  4. (可选)在标签下,通过输入对向构建添加标签。

  5. 选择创建

Amazon GameLift 为新构建分配一个 ID 并上传指定的.zip 文件。您可以在构建页面上查看新构建,包括状态。

Amazon CLI

使用 create-build 命令定义新构建并上传您的服务器构建文件。

  1. 打开命令行窗口,然后切换到您可以使用 Amazon CLI 的目录。

  2. 输入以下 create-build 命令:

    aws gamelift create-build \ --name user-defined name of build \ --server-sdk-version Amazon GameLift server SDK 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 的 Amazon GameLift 服务器软件开发工具包版本。如果您没有提供值,则 Amazon GameLift 会使用默认值 4.0.2

    • operating-system – 游戏服务器构建的运行时环境。您必须指定操作系统值。您稍后无法更新。

    • build-version – 构建文件的版本详细信息。这些信息可能很有用,因为游戏服务器的每个新版本都需要新的构建资源。

    • storage-location

      • Bucket – 包含您的构建的 S3 存储桶的名称。示例:“my_build_files”。

      • Key – 包含您的构建文件的 .zip 文件的名称。示例:“my_game_build_7.0.1, 7.0.2”。

      • RoleARN – 分配给您创建的 IAM 角色的 ARN。示例:“arn:aws:iam::111122223333:role/GameLiftAccess”。有关策略示例,请参阅在 Amazon S3 中访问游戏构建文件

    • region – 您必须在要部署实例集的 Amazon 区域中创建构建。如果您在多个区域中部署游戏,则需在每个区域中创建一个构建。

      注意

      我们建议使用 configure get 命令命令检查当前的默认区域。要更改默认区域,请使用 configure set 命令。

    示例

    aws gamelift create-build \ --operating-system WINDOWS_2016 \ --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
  3. 要查看新构建,请使用 describe-build 命令。

更新您的构建文件

您可以使用 Amazon GameLift 控制台或 update-build Amazon CLI 命令更新构建资源的元数据。

创建 Amazon GameLift 构建后,您将无法更新与之关联的构建文件。对于每组新文件,都要创建一个新的 Amazon GameLift 构建。使用 upload-build 命令,Amazon GameLift 会自动为每个请求创建新的构建记录。如果您使用 create-build 命令提供构建文件,则使用其他名称上传新构建 .zip 文件到 Amazon S3 并通过引用新的文件名创建构建。

对于部署更新的构建,请尝试这些提示:

添加构建安装脚本

创建适用于您的游戏构建操作系统 (OS) 的安装脚本:

  • Windows:创建名为 install.bat 的批处理文件。

  • Linux:创建名为 install.sh 的 Shell 脚本文件。

在创建安装脚本时,请注意以下事项:

  • 该脚本不接受任何用户输入。

  • Amazon GameLift 在托管服务器上的以下位置安装构建并重新创建构建包中的文件目录:

    • Windows 实例集:C:\game

    • Linux 实例集:/local/game

  • 在 Linux 实例集安装过程中,run-as 用户具有对实例文件结构的有限访问权限。此用户对安装您的构建文件的目录拥有全部权限。如果您的安装脚本执行的操作需要管理员权限,请使用 sudo 指定管理员访问权限。默认情况下,Windows 实例集的 run-as 用户具有管理员权限。与安装脚本相关的权限失败会生成一条事件消息,此消息指示脚本出现问题。

  • 在 Linux 上,Amazon GameLift 支持常用的 Shell 解释器语言,例如 bash。在安装脚本的顶部添加 shebang (例如 #!/bin/bash)。要验证对您的首选 Shell 命令的支持,可以远程访问活动的 Linux 实例并打开 Shell 提示符。有关更多信息,请参阅远程连接到 Amazon GameLift 舰队实例

  • 安装脚本不能依赖于 VPC 对等连接。直到 Amazon GameLift 在实例集实例上安装构建后,VPC 对等连接才可用。

例 Windows 安装 bash 文件

此示例 install.bat 文件安装游戏服务器所需的 Visual C++ 运行时组件,然后将结果写入日志文件。脚本包含根目录下构建包中的组件文件。

vcredist_x64.exe /install /quiet /norestart /log c:\game\vcredist_2013_x64.log
例 Linux 安装 Shell 脚本

此示例 install.sh 文件在安装脚本中使用 bash 并将结果写入日志文件。

#!/bin/bash echo 'Hello World' > install.log

此示例 install.sh 文件展示了如何使用 Amazon CloudWatch 代理收集系统级和自定义指标以及处理日志轮换。由于 Amazon GameLift 在服务 VPC 中运行,因此您必须向 Amazon GameLift 授予代表您担任 Amazon Identity and Access Management (IAM) 角色的权限。要允许 Amazon GameLift 担任角色,请创建一个包含 Amazon 托管策略 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. } } } 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