Amazon GameLift
开发人员指南 (版本 )
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Amazon GameLift 的 VPC 对等连接

本主题提供有关如何在 GameLift 托管游戏服务器与其他非 GameLift 资源之间建立 VPC 对等连接的指导。使用 Amazon Virtual Private Cloud (VPC) 对等连接支持您的游戏服务器与其他 AWS 资源 (例如 Web 服务或存储库) 直接私下通信。

注意

VPC 对等连接是一项高级功能。请参阅,了解使您的游戏服务器能够与您的其他 AWS 资源建立直接私密通信的替代选项。

如果您已熟悉 Amazon VPC 和 VPC 对等连接,请注意,设置与 GameLift 游戏服务器对等的方式略有不同。您不具备游戏服务器的 VPC 的访问权限(该权限由 GameLift 服务控制),因此您无法直接为其请求 VPC 对等连接。而应首先对非 GameLift 资源预授权 VPC,以接受来自 GameLift 服务的对等连接请求。然后,您触发 GameLift 以请求刚刚授权的 VPC 对等连接。GameLift 会创建对等连接、设置路由表并配置连接。

为现有队组设置 VPC 对等连接

要设置 VPC 对等连接,请按以下步骤操作:

  1. 获取 AWS 账户 ID 和凭证。

    您需要以下 AWS 账户的 ID 和登录凭证。您可以通过登录 AWS 管理控制台并查看您的账户设置来找到 AWS 账户 ID。要获取凭证,请转到 IAM 控制台。

    • 您用于管理 GameLift 游戏服务器的 AWS 账户。

    • 您用于管理非 GameLift 资源的 AWS 账户。

    如果您对 GameLift 和非 GameLift 资源使用相同账户,则仅需要该账户的 ID 和凭证。

  2. 为每个 VPC 获取标识符。

    为要对等的两个 VPC 获取以下信息:

    • 您 GameLift 游戏服务器的 VPC – 这是您的 GameLift 队组 ID。您的游戏服务器部署在 EC2 实例的队组上的 GameLift 中。队组都自动放置在自己的 VPC 中,后者由 GameLift 服务进行管理。您没有 VPC 的直接访问权限,因此使用队组 ID 标识。

    • 您的非 GameLift AWS 资源的 VPC – 您可以使用在 AWS 上运行且由您有权访问的 AWS 账户管理的任何资源建立 VPC 对等连接。如果您还没有为这些资源创建 VPC,请参阅 Amazon VPC 入门。创建 VPC 后,您可以通过登录 Amazon VPC 的 AWS 管理控制台并查看您的 VPC 来找到 VPC ID。

    注意

    在设置对等连接时,两个 VPC 必须位于相同区域中。您的 GameLift 队组游戏服务器的 VPC 与队组在相同区域中。

  3. 使用非 GameLift 资源授权 VPC 对等连接。

    在此步骤中,您预授权将来从 GameLift 与非 GameLift 资源的 VPC 进行对等连接的请求。

    要授权 VPC 对等连接,请调用 GameLift 服务 API CreateVpcPeeringAuthorization() 或使用 AWS CLI 命令 create-vpc-peering-authorization。使用管理您的非 GameLift 资源的账户发出此调用。确定以下信息:

    • 对等 VPC ID – 这是针对非 GameLift 资源的 VPC。

    • GameLift AWS 账户 ID – 这是针对您用于管理 GameLift 队组的账户。

    授权 VPC 对等连接后,授权将在 24 小时内保持有效,除非您将其撤销。您可以使用以下操作管理您的 VPC 对等连接授权:

  4. 在 GameLift 队组的 VPC 和非 GameLift 资源的 VPC 之间请求对等连接。

    借助有效的授权,您可以触发 GameLift 以请求对等连接。

    要请求 VPC 对等连接,请调用 GameLift 服务 API CreateVpcPeeringConnection() 或使用 AWS CLI 命令 create-vpc-peering-connection。使用管理您的 GameLift 游戏服务器的账户发出此调用。确定以下用于标识要对等的两个 VPC 的信息:

    • 对等 VPC ID 和 AWS 账户 ID – 这是针对您的非 GameLift 资源和您用于管理这些资源的账户的 VPC。使用的 VPC ID 必须与有效授权上的一个 ID 匹配。

    • 队组 ID – 此信息标识您的 GameLift 游戏服务器的 VPC。

    您可以使用以下操作管理您的 VPC 对等连接:

  5. 跟踪 VPC 对等连接。

    请求 VPC 对等连接是一个异步操作。要跟踪对等请求的状态并处理成功或失败的案例,请使用以下选项之一:

    • 使用 DescribeVpcPeeringConnections() 持续轮询。此操作将检索 VPC 对等连接记录,包括请求的状态。如果已成功创建对等连接,则连接记录也包含分配给 VPC 的私有 IP 地址的 CIDR 块。

    • 使用 DescribeFleetEvents() 处理与 VPC 对等连接关联的队组事件,包括成功事件和失败事件。

    连接请求失败的常见原因包括:

    • 未找到请求的连接的授权。这可能意味着现有授权不再有效。此问题的常见原因是区域混合。验证您的授权和请求是否使用了相同区域。

    • 重叠 CIDR 块 (请参阅无效的 VPC 对等连接配置)。分配给对等的 VPC 的 IPv4 CIDR 块无法重叠。您的 GameLift 队组的 VPC 的 CIDR 块是自动分配的,无法更改。您可以调用 DescribeVpcPeeringConnections() 来查找此 CIDR 块。要解决此问题,您需要将您的非 GameLift 资源的 VPC 的 CIDR 块更改为非重叠的范围。

    • 队组未激活。如果您在 CreateFleet() 请求中请求 VPC 对等连接,则新的队组可能无法进入已激活状态。在这种情况下,对等连接不会成功。

创建具有 VPC 对等连接的新队组

您可以创建一个新 Amazon GameLift 队组,同时请求 VPC 对等连接。您可以使用在 AWS 上运行且由您有权访问的 AWS 账户管理的任何资源建立 VPC 对等连接。

如果您还没有为您的非GameLift 资源设置 VPC,

  • 调用 GameLift 命令 create-vpc-peering-authorization 来预授权对等请求。您需要与 GameLift 一起使用的账户的 ID。此授权将在 24 小时内保持有效,除非您将其撤销。

创建与新队组的 VPC 对等连:

  1. 获取 AWS 账户 ID 和凭证。

    您需要以下两个 AWS 账户的 ID 和登录凭证。您可以通过登录 AWS 管理控制台并查看您的账户设置来找到 AWS 账户 ID。要获取凭证,请转到 IAM 控制台。

    • 您用于管理 GameLift 游戏服务器的 AWS 账户。

    • 您用于管理非 GameLift 资源的 AWS 账户。

    如果您对 GameLift 和非 GameLift 资源使用相同账户,则仅需要该账户的 ID 和凭证。

  2. 为您的非 GameLift AWS 资源获取 VPC ID。

    如果您还没有为这些资源创建 VPC,请现在创建(请参阅 Amazon VPC 入门)。请确保 VPC 与您计划创建的新队组位于相同区域。创建 VPC 时,使用管理您的非 GameLift 资源的帐户的凭证。

    创建 VPC 后,您可以通过登录 Amazon VPC 的 AWS 管理控制台并查看您的 VPC 来找到 VPC ID。

  3. 使用非 GameLift 资源授权 VPC 对等连接。

    GameLift 创建新队组和 VPC 时,它还会发送请求,以便与您的非 GameLift 资源的 VPC 建立对等连接。您需要预先对该请求进行授权。

    使用管理您的非 GameLift 资源的账户,调用 GameLift 服务 API CreateVpcPeeringAuthorization(),或者使用 AWS CLI 命令 create-vpc-peering-authorization。确定以下信息:

    • 对等 VPC ID – 您的非 GameLift 资源的 VPC 的 ID。

    • GameLift AWS 账户 ID – 您用于管理 GameLift 队组的账户的 ID。

    授权 VPC 对等连接后,授权将在 24 小时内保持有效,除非您将其撤销。您可以使用以下操作管理您的 VPC 对等连接授权:

  4. 按照使用 AWS CLI 创建新队组的说明操作。包括以下其他参数:

    • peer-vpc-aws-account-id – 您用于管理非 GameLift 资源的 VPC 的账户 ID。

    • peer-vpc-id – 您的非 GameLift 账户的 VPC 的 ID。

使用 VPC 对等参数成功调用 create-fleet 后将会生成一个新队组和一个新 VPC 对等请求。该队组的状态设置为 New,并且将启动队组激活过程。对等请求的状态设置为 initiating-request。通过调用 describe-vpc-peering-connections,您可以跟踪对等请求的成功或失败。

在请求与新队组的 VPC 对等连接时,两个操作要么成功,要么失败。如果某个队组在创建过程中失败,则不会建立 VPC 对等连接。同样,如果 VPC 对等连接由于任何原因失败,则新队组将无法从 Activating 状态变为 Active 状态。

注意

新的 VPC 对等连接直到队组准备好变为活动状态才能完成。因此,它在新的队组实例上安装游戏服务器生成包期间不可用。

以下示例显示了创建新队组以及预先建立的 VPC 和为新队组创建的 VPC 之间的对等连接的请求。预先建立的 VPC 由您的非 GameLift AWS 账户 ID 和 VPC ID 组合唯一标识。

$ aws gamelift create-fleet --name "My_Fleet_1" --description "The sample test fleet" --ec2-instance-type "c4.large" --fleet-type "ON_DEMAND" --build-id "build-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --runtime-configuration "GameSessionActivationTimeoutSeconds=300, MaxConcurrentGameSessionActivations=2, ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe, Parameters=+sv_port 33435 +start_lobby, ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3, PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP" --MetricGroups "EMEAfleets" --peer-vpc-aws-account-id "111122223333" --peer-vpc-id "vpc-a11a11a"

可复制版本:

aws gamelift create-fleet --name "My_Fleet_1" --description "The sample test fleet" --fleet-type "ON_DEMAND" --MetricGroups "EMEAfleets" --build-id "build-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --ec2-instance-type "c4.large" --runtime-configuration "GameSessionActivationTimeoutSeconds=300,MaxConcurrentGameSessionActivations=2,ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe,Parameters=+sv_port 33435 +start_lobby,ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3,PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP" --peer-vpc-aws-account-id "111122223333" --peer-vpc-id "vpc-a11a11a"