Crea un dominio

En esta página, se explica cómo crear, enumerar y describir dominios de servidores de videojuegos. Un dominio es una agrupación definida por el usuario de clústeres de servidores de videojuegos según los requisitos de latencia del juego para las poblaciones de jugadores.

Antes de comenzar

Antes de comenzar, te recomendamos que te familiarices con los conceptos clave en la Descripción general de servidores para juegos. Asegúrate de haber realizado las siguientes tareas:

  • Asegúrate de haber habilitado la API de los servicios de juego.
  • Habilita la API de servicios de juego
  • Elige una shell con el SDK de Cloud instalado o usa un cliente de la API:
  • Cloud Shell

    Para iniciar Cloud Shell, sigue estos pasos:

    1. Ve a Google Cloud Console

      Google Cloud Console

    2. Desde la esquina superior derecha de la consola, haz clic en el botón Activar Cloud Shell: .

    Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior en la consola. Usa esta shell para ejecutar los comandos de gcloud.

    Shell local

    Para instalar gcloud, instala el SDK de Cloud, que incluye la herramienta de línea de comandos de gcloud.

    Verifica que hayas configurado el proyecto predeterminado deseado para la herramienta de línea de comandos de gcloud (de lo contrario, deberás especificar la marca --project de forma explícita para cada comando que se encuentra más adelante):

    gcloud config list project
    

    Si no puedes ejecutar el siguiente comando para configurar un proyecto predeterminado, reemplaza PROJECT_ID por el ID del proyecto deseado:

    gcloud config set project PROJECT_ID
    

    Ejecuta el siguiente comando para verificar tu versión del SDK de Google Cloud. Game Servers requiere la versión 306.0.0 o posterior del SDK.

    gcloud version
    

    Para actualizar la instalación, ejecuta el siguiente comando:

    gcloud components update
    

    curl / PowerShell

    Para usar la API de REST con curl o Windows PowerShell, haz lo siguiente:

    1. Crea una cuenta de servicio.
    2. Descarga una clave privada como un archivo JSON.
    3. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta del archivo JSON que contiene la clave de tu cuenta de servicio. Esta variable solo se aplica a la sesión actual de shell. Por lo tanto, si abres una sesión nueva, deberás volver a configurar la variable.

    Biblioteca cliente

    Google Cloud Game Servers se puede controlar de manera programática mediante una biblioteca cliente. Consulta Descripción general de bibliotecas cliente a fin de obtener instrucciones para usar la biblioteca y la autenticación.

Crea un dominio

Los dominios pueden ser globales o regionales. Un dominio global es una buena opción si los clústeres registrados en un dominio pertenecen a regiones que abarcan varias ubicaciones geográficas, como América del Norte, América del Sur o Europa y Asia. Un dominio regional es una buena opción si los clústeres se encuentran en la misma región, como Europa Occidental. En el caso de una interrupción de red entre regiones, es posible que un dominio global no pueda administrar clústeres en todas las regiones. Para aumentar la resiliencia contra las interrupciones de red entre las regiones, asegúrate de crear dominios regionales en regiones lo más cerca posible de los clústeres del servidor para videojuegos asociados.

Por ejemplo, si creas clústeres en las regiones europe-west1, europe-west2 y europe-west3 para entregar servicios a los usuarios en el oeste de Europa, también puedes crear un dominio regional en una de estas regiones. Esta configuración garantiza que el dominio pueda continuar administrando los clústeres en caso de que no se pueda acceder a estas regiones desde otras partes del mundo debido a una interrupción en la red.

Si no sabes dónde crear tu dominio, puedes crearlo como dominio global. A medida que cambian tus requisitos, puedes crear un dominio nuevo en una región más cercana a los clústeres que necesita administrar. Luego, puedes mover los clústeres existentes al dominio regional nuevo. Para ello, primero borra y cancela el registro de los clústeres del dominio global y, luego, regístralos en el nuevo dominio regional.

Console

  1. En Cloud Console, ve a la página Dominios y clústeres.

    Ir a Game Servers

  2. Haz clic en Create Realm.

  3. En el cuadro Realm name, ingresa un identificador único para este dominio.

  4. En el cuadro Timezone, selecciona una zona horaria para este dominio. Cuando programas eventos basados en el tiempo, como las políticas de escalamiento, es para esta zona horaria.

  5. Haga clic en Crear.

gcloud

Puedes crear dominios con la herramienta de línea de comandos de gcloud. Para crear un dominio global, ejecuta el siguiente comando y reemplaza los valores del marcador de posición, como realmID, con los valores apropiados:

gcloud game servers realms create realmID --time-zone tz

Para crear un dominio regional, ejecuta el siguiente comando y reemplaza los valores del marcador de posición, como realmID, por los valores apropiados:

gcloud game servers realms create realmID --time-zone tz --location=region

Los marcadores de posición de variables corresponden a las siguientes descripciones:

  • realmID es un identificador único que puedes especificar para este dominio.
  • tz es la zona horaria para este dominio. Cuando programas eventos basados en el tiempo, como las políticas de escalamiento, es para esta zona horaria.
  • region es la región del dominio. Si quieres controlar los dominios con fallas, especifica una región. Te recomendamos crear un dominio global y omitir esta opción.

LÍNEA DE REST Y CMD

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud que aparece en la Configuración de IAM.
  • LOCATION: Es la región para el dominio. Si quieres controlar los dominios con fallas, especifica una región en la lista de ubicaciones compatibles. Te recomendamos que especifiques un dominio global.
  • REALM_ID: Es un identificador definido por el usuario para el dominio nuevo.
  • TIME_ZONE: La zona horaria de este dominio (por ejemplo, US/Eastern) Debes programar eventos basados en el tiempo, como políticas de escalamiento, para esta zona horaria.

Cuerpo JSON de la solicitud:

{
  "timeZone": "TIME_ZONE"
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.gaming.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_ID/locations/LOCATION/realms/REALM_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Comienza a usarlo

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.


import (
	"context"
	"fmt"
	"io"

	gaming "cloud.google.com/go/gaming/apiv1"
	gamingpb "google.golang.org/genproto/googleapis/cloud/gaming/v1"
)

// createRealm creates a game server realm.
func createRealm(w io.Writer, projectID, location, realmID string) error {
	// projectID := "my-project"
	// location := "global"
	// realmID := "myrealm"
	ctx := context.Background()
	client, err := gaming.NewRealmsClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRealmsClient: %v", err)
	}
	defer client.Close()

	req := &gamingpb.CreateRealmRequest{
		Parent:  fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		RealmId: realmID,
		Realm: &gamingpb.Realm{
			TimeZone:    "US/Pacific",
			Description: "My Game Server Realm",
		},
	}

	op, err := client.CreateRealm(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateRealm: %v", err)
	}
	resp, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("Wait: %v", err)
	}

	fmt.Fprintf(w, "Realm created: %v", resp.Name)
	return nil
}

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.


import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.gaming.v1.CreateRealmRequest;
import com.google.cloud.gaming.v1.OperationMetadata;
import com.google.cloud.gaming.v1.Realm;
import com.google.cloud.gaming.v1.RealmsServiceClient;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class CreateRealm {
  public static void createRealm(String projectId, String regionId, String realmId)
      throws InterruptedException, ExecutionException, TimeoutException, IOException {
    // String projectId = "your-project-id";
    // String regionId = "us-central1-f";
    // String realmId = "your-realm-id";
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (RealmsServiceClient client = RealmsServiceClient.create()) {
      String parent = String.format("projects/%s/locations/%s", projectId, regionId);
      String realmName = String.format("%s/realms/%s", parent, realmId);

      Realm realm =
          Realm.newBuilder().setName(realmName).setTimeZone("America/Los_Angeles").build();

      CreateRealmRequest request =
          CreateRealmRequest.newBuilder()
              .setParent(parent)
              .setRealmId(realmId)
              .setRealm(realm)
              .build();

      OperationFuture<Realm, OperationMetadata> call = client.createRealmAsync(request);
      Realm result = call.get(1, TimeUnit.MINUTES);

      System.out.println("Realm created: " + result.getName());
    }
  }
}

Node.js

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.

const {RealmsServiceClient} = require('@google-cloud/game-servers');

const client = new RealmsServiceClient();

async function createRealm() {
  /**
   * TODO(developer): Uncomment these variables before running the sample.
   */
  // const projectId = 'Your Google Cloud Project ID';
  // const location = 'A Compute Engine region, e.g. "us-central1"';
  // const realmId = 'A unique identifier for the realm';
  const request = {
    parent: `projects/${projectId}/locations/${location}`,
    realmId: realmId,
    realm: {
      // Must use a supported time zone name.
      // See https://cloud.google.com/dataprep/docs/html/Supported-Time-Zone-Values_66194188
      timeZone: 'US/Pacific',
      description: 'My Game Server realm',
    },
  };

  const [operation] = await client.createRealm(request);
  const results = await operation.promise();
  const [realm] = results;

  console.log('Realm created:');

  console.log(`\tRealm name: ${realm.name}`);
  console.log(`\tRealm description: ${realm.description}`);
  console.log(`\tRealm time zone: ${realm.timeZone}`);
}

createRealm();

Python

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.

def create_realm(project_id, location, realm_id):
    """Creates a realm."""

    client = gaming.RealmsServiceClient()

    request = realms.CreateRealmRequest(
        parent=f"projects/{project_id}/locations/{location}",
        realm_id=realm_id,
        realm=realms.Realm(
            description="My Realm",
            time_zone="US/Pacific",
        ),
    )

    operation = client.create_realm(request)
    print(f"Create realm operation: {operation.operation.name}")
    operation.result(timeout=120)

Genera listas de dominios

Console

  1. En Cloud Console, ve a la página Dominios y clústeres.

    Ir a Game Servers

  2. Puedes usar el cuadro de filtro para filtrar la lista de dominios directos por diferentes propiedades.

LÍNEA DE REST Y CMD

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud que aparece en la Configuración de IAM.
  • LOCATION: La región para los dominios o global

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "realms": [
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/realms/realm1",
      "createTime": CREATE_TIME,
      "updateTime": UPDATE_TIME,
      "timeZone": "US/Eastern",
      "etag": "PlXtLrUJ5pHQoZk0Lz-pWkPFN_dt3PXhIpRrJ5HHWu8"
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/realms/realm2",
      "createTime": CREATE_TIME,
      "updateTime": UPDATE_TIME,
      "timeZone": "America/Eirunepe",
      "etag": "ay1tXqeujLSsSd93n6uhlZwlxdNTOfG7El992Tsiz98"
    },
    {
      "name": "projects/PROJECT_ID/locations/LOCATION/realms/realm3",
      "createTime": CREATE_TIME,
      "updateTime": UPDATE_TIME,
      "timeZone": "Asia/Anadyr",
      "etag": "cBxzV2AWK_zgijSmYA-oXPWv3giwhUzssoWcqjPZFuk"
    }
  ]
}

gcloud

Puedes enumerar dominios globales o regionales con la herramienta de línea de comandos de gcloud.

Para enumerar los dominios globales y regionales, ejecuta el siguiente comando:

gcloud game servers realms list

Para enumerar los dominios en una ubicación específica, ejecuta el siguiente comando y reemplaza region por global o una región de Google Cloud:

gcloud game servers realms list --location=region

Comienza a usarlo

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.


import (
	"context"
	"fmt"
	"io"

	gaming "cloud.google.com/go/gaming/apiv1"
	"google.golang.org/api/iterator"
	gamingpb "google.golang.org/genproto/googleapis/cloud/gaming/v1"
)

// listRealms lists the realms in a location.
func listRealms(w io.Writer, projectID, location string) error {
	// projectID := "my-project"
	// location := "global"
	ctx := context.Background()
	client, err := gaming.NewRealmsClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRealmsClient: %v", err)
	}
	defer client.Close()

	req := &gamingpb.ListRealmsRequest{
		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
	}

	it := client.ListRealms(ctx, req)
	for {
		resp, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}

		fmt.Fprintf(w, "Realm listed: %v\n", resp.Name)
	}

	return nil
}

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.


import com.google.cloud.gaming.v1.ListRealmsRequest;
import com.google.cloud.gaming.v1.Realm;
import com.google.cloud.gaming.v1.RealmsServiceClient;
import com.google.cloud.gaming.v1.RealmsServiceClient.ListRealmsPagedResponse;
import com.google.common.base.Strings;
import java.io.IOException;

public class ListRealms {
  public static void listRealms(String projectId, String regionId) throws IOException {
    // String projectId = "your-project-id";
    // String regionId = "us-central1-f";
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (RealmsServiceClient client = RealmsServiceClient.create()) {
      String parent = String.format("projects/%s/locations/%s", projectId, regionId);

      ListRealmsPagedResponse response = client.listRealms(parent);
      for (Realm realm : response.iterateAll()) {
        System.out.println("Realm found: " + realm.getName());
      }

      while (!Strings.isNullOrEmpty(response.getNextPageToken())) {
        ListRealmsRequest request =
            ListRealmsRequest.newBuilder()
                .setParent(parent)
                .setPageToken(response.getNextPageToken())
                .build();
        response = client.listRealms(request);
        for (Realm realm : response.iterateAll()) {
          System.out.println("Realm found: " + realm.getName());
        }
      }
    }
  }
}

Node.js

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.

const {RealmsServiceClient} = require('@google-cloud/game-servers');

const client = new RealmsServiceClient();

async function listRealms() {
  /**
   * TODO(developer): Uncomment these variables before running the sample.
   */
  // const projectId = 'Your Google Cloud Project ID';
  // const location = 'A Compute Engine region, e.g. "us-central1"';
  const request = {
    parent: `projects/${projectId}/locations/${location}`,
  };

  const [results] = await client.listRealms(request);
  for (const realm of results) {
    console.log(`Realm name: ${realm.name}`);
    console.log(`Realm description: ${realm.description}`);
    console.log(`Realm time zone: ${realm.timeZone}`);

    const createTime = realm.createTime;
    const createDate = new Date(createTime.seconds * 1000);
    console.log(`Realm created on: ${createDate.toLocaleDateString()}\n`);
  }
}

listRealms();

Python

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.



def list_realms(project_id, location):
    """Lists the existing realms."""

    client = gaming.RealmsServiceClient()

    response = client.list_realms(
        parent=f"projects/{project_id}/locations/{location}"
    )

    for realm in response.realms:
        print(f"Name: {realm.name}")

    return response.realms

Describe los dominios

Console

  1. En Cloud Console, ve a la página Dominios y clústeres.

    Ir a Game Servers

  2. Puedes usar el cuadro de filtro para filtrar la lista de dominios directos por diferentes propiedades.

  3. En la última columna de la tabla, haz clic en las elipsis y selecciona View details.

gcloud

Puedes obtener detalles sobre un dominio, como la hora de creación o la zona horaria, mediante la herramienta de línea de comandos de gcloud.

Para describir un dominio global, ejecuta el siguiente comando y reemplaza realmID por el identificador para un dominio que creaste antes:

gcloud game servers realms describe realmID

Si creaste uno o más dominios que no eran globales, puedes describir los detalles de un dominio en una región específica. Para describir un dominio en una región, reemplaza realmID por el identificador de un dominio que creaste antes y region por la región en la que está el dominio:

gcloud game servers realms describe realmID --location=region

LÍNEA DE REST Y CMD

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto de Google Cloud que aparece en la Configuración de IAM.
  • LOCATION: La región para el dominio o global
  • REALM_ID: Un identificador definido por el usuario para el dominio

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/realms/REALM_ID",
  "createTime": CREATE_TIME,
  "updateTime": UPDATE_TIME,
  "timeZone": "Asia/Anadyr",
  "etag": "cBxzV2AWK_zgijSmYA-oXPWv3giwhUzssoWcqjPZFuk"
}

Comienza a usarlo

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.


import (
	"context"
	"fmt"
	"io"

	gaming "cloud.google.com/go/gaming/apiv1"
	gamingpb "google.golang.org/genproto/googleapis/cloud/gaming/v1"
)

// getRealm retrieves info on a realm.
func getRealm(w io.Writer, projectID, location, realmID string) error {
	// projectID := "my-project"
	// location := "global"
	// realmID := "myrealm"
	ctx := context.Background()
	client, err := gaming.NewRealmsClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRealmsClient: %v", err)
	}
	defer client.Close()

	req := &gamingpb.GetRealmRequest{
		Name: fmt.Sprintf("projects/%s/locations/%s/realms/%s", projectID, location, realmID),
	}

	resp, err := client.GetRealm(ctx, req)
	if err != nil {
		return fmt.Errorf("GetRealm: %v", err)
	}

	fmt.Fprintf(w, "Realm retrieved: %v", resp.Name)
	return nil
}

Java

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.


import com.google.cloud.gaming.v1.Realm;
import com.google.cloud.gaming.v1.RealmsServiceClient;
import java.io.IOException;

public class GetRealm {
  public static void getRealm(String projectId, String regionId, String realmId)
      throws IOException {
    // String projectId = "your-project-id";
    // String regionId = "us-central1-f";
    // String realmId = "your-realm-id";
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (RealmsServiceClient client = RealmsServiceClient.create()) {
      String realmName =
          String.format("projects/%s/locations/%s/realms/%s", projectId, regionId, realmId);

      Realm allocationPolicy = client.getRealm(realmName);

      System.out.println("Realm found: " + allocationPolicy.getName());
    }
  }
}

Node.js

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.

const {RealmsServiceClient} = require('@google-cloud/game-servers');

const client = new RealmsServiceClient();

async function getRealm() {
  /**
   * TODO(developer): Uncomment these variables before running the sample.
   */
  // const projectId = 'Your Google Cloud Project ID';
  // const location = 'A Compute Engine region, e.g. "us-central1"';
  // const realmId = 'Unique identifier of the realm';
  const request = {
    // Realm name is the full resource name including project ID and location
    name: client.realmPath(projectId, location, realmId),
  };

  const [realm] = await client.getRealm(request);
  console.log(`Realm name: ${realm.name}`);
  console.log(`Realm description: ${realm.description}`);
  console.log(`Realm time zone: ${realm.timeZone}`);

  const createTime = realm.createTime;
  const createDate = new Date(createTime.seconds * 1000);

  console.log(`Realm created on: ${createDate.toLocaleDateString()}`);
}

getRealm();

Python

Para obtener información sobre cómo instalar y usar la biblioteca cliente de Game Servers, consulta Bibliotecas cliente de Game Servers.

def get_realm(project_id, location, realm_id):
    """Gets a realm."""

    client = gaming.RealmsServiceClient()

    request = realms.GetRealmRequest(
        name=f"projects/{project_id}/locations/{location}/realms/{realm_id}",
    )

    response = client.get_realm(request)
    print(f"Get realm response:\n{response}")
    return response

¿Qué sigue?