在 VM 创建期间运行自定义脚本 - VmStartupScript(预览)
简介
此功能处于预览阶段。欢迎您今天开始使用它并向我们提供反馈。有关如何与我们联系的说明将在文章末尾提供。请注意,预览期间技术支持有限。
这是一个高级功能,应极其谨慎地使用。运行的脚本在虚拟机 (VM) 级别以管理员(root)权限执行。如果使用不当,可能会破坏正在运行的游戏服务器的常规流程,甚至完全阻止它们运行。最终用户对脚本的内容负责。
如何使用 VmStartupScript
要使用 VmStartupScript 功能,您必须提供自定义脚本以及您计划安装的所有相关软件(可选)。脚本在虚拟机初始化时开始执行。此操作发生在游戏服务器在每个 VM 上启动之前。脚本成功完成执行后,MPS 服务将继续完成初始化游戏服务器,并将它们交付到 StandingBy 状态。要了解有关不同游戏服务器状态的更多信息,请参见多人游戏服务器的生命周期。 要在实际生产环境中使用此功能,请在开始之前参见推荐的开发者工作流。创建脚本
- 为 Linux VM 创建一个名为 PF_StartupScript.sh 的文件,或为 Windows VM 创建一个名为 PF_StartupScript.ps1 的文件。
- 在文件中添加设置/执行命令。如果需要,这里有一些常用的环境变量,您可以在脚本中使用。某些操作不受支持或会导致 VM 无法成功启动,从而产生不必要的费用。有关详细信息,请参见不支持的内容部分。
创建并上传压缩文件
- 在您的脚本计划使用或调用的文件夹中收集所有相关软件。如果您的脚本安装第三方软件,您的脚本可以在执行期间下载它,或者可以将其与压缩文件捆绑在一起。如果您不安装任何内容,请跳过此步骤。
- 使用您在前面部分创建的脚本 (.sh 或 .ps1) 和您在前面步骤中收集的软件(如果需要),创建一个压缩文件 (.zip)。脚本文件应位于压缩文件的根目录,而不是在目录内。此外,如果您的脚本文件未命名为 PF_StartupScript.sh (Linux) 或 PF_StartupScript.ps1 (Windows),它将不会被执行,并且游戏服务器将无法启动。
- 使用以下方法之一上传压缩文件:
- 使用 PlayFab Game Manager
- 使用标头 {“x-ms-blob-type”: “BlockBlob”} 在 GetAssetUploadUrl API 调用返回的 URL 上发出 PUT 请求。
- 使用 PowerShell cmdlet。
我们建议在压缩文件中包含脚本所需的所有二进制文件和资产,因为这将导致更快的执行速度和 MPS 交付游戏服务器所需的更短时间。请确保包含适用于您游戏服务器将运行的相关平台的资产。例如,如果您使用 Linux 服务器,则应包含 “amd64” Debian/Ubuntu 包。
将自定义脚本应用于新构建
上传 .zip 文件后,在配置 VmStartupScriptAssetReference 属性后,使用 MPS API 创建新构建。有关说明,请参见如何使用 MPS API 创建构建。- 添加 VmStartupScriptConfiguration.VmStartupScriptAssetReference 属性,其中包含对上传的资产文件的引用。此属性是所有 “CreateBuild” 相关 API 的一部分,例如 CreateBuildWithCustomContainer、CreateBuildWithManagedContainer 和 CreateBuildWithProcessBasedServer。
- 为 VmStartupScriptAssetReference.FileName 属性添加有效值。此值必须与您的资产文件的名称相同,例如 vmstartupscriptassets.zip。
- VmStartupScriptAssetReference.MountPath 属性必须为空,因为 VmStartupScript 功能不支持它。
如果您为 MountPath 属性设置值,则创建构建操作将失败。
特殊注意事项
在 Linux 上,我是否需要将 PF_StartupScript.sh 文件标记为可执行?
在 MPS 运行脚本文件之前,它将其标记为可执行,然后将任何 Windows 行结尾 (“\r\n”) 转换为 Linux 行结尾 (“\n”)。因此,您无需担心这两件事。环境变量
以下是您可以在启动脚本中使用的环境变量。不支持的内容
您不应从脚本中执行这些操作,因为它们很可能会破坏 VM 和游戏服务器的生命周期:- 不要在启动脚本执行期间阻塞。脚本必须成功结束,游戏服务器才能被创建。如果您需要某些内容在后台运行,可以将其作为 Linux 上的 systemd 服务或 Windows 服务安装。
- 不要使用从 30000 开始的端口,因为它们用于游戏服务器,也不要使用 56001 端口,因为它由 VmAgent 进程(MPS 游戏服务器编排器可执行文件)使用。
- 不要修改 D:(Windows)或 /mnt(Linux)路径中的任何文件,因为这些文件对于 VmAgent 操作是必需的(除了包含可编辑内容的文件夹,如
PF_SHARED_CONTENT_FOLDER_VM)。 - 您不应从 VmStartupScript 或由它启动的应用程序中使用 GSDK。GSDK 应仅从 GameServer 使用。
- 您不应手动重启虚拟机,因为此操作将在与 MPS Control Plane 的通信中产生挑战。
端口
当您使用 VmStartupScript 功能时,可以请求在每个 VM 上公开一些端口。这些端口可由您的脚本启动的任何程序使用,并且不同于 MPS 为您的游戏服务器打开的端口。用法
您可以为每个 VM 请求最多五个端口。对于每个端口,您必须指定协议(TCP 或 UDP)和名称。以下是请求两个端口的示例:
例如,对于上面示例脚本中请求的两个端口,您应该期望在您的 VmStartupScript 中找到这些环境变量:
与我们为游戏服务器打开的端口类似,由您来验证连接到您端口的客户端。MPS 不为这些端口提供任何身份验证机制。
客户会发现分配的端口从编号 20000 开始向上。但是,我们建议您不要在脚本中硬编码此值,因为它将来可能会更改,并始终使用环境变量以获取正确的端口信息。
