Crea un dominio

En esta página, se explica cómo crear, enumerar y describir dominios de Game Servers. Un real 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 de juegos. Asegúrate de haber realizado las siguientes tareas:

  • Asegúrate de haber habilitado la API de servicios de juego.
  • Habilitar la API de servicios de juego
  • Elige una shell con el SDK de Cloud instalado o usa un cliente de 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 este 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, debes especificar la marca --project de forma explícita para cada comando 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
    

    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 y América 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 de juegos asociados.

Por ejemplo, si creas clústeres en las regiones europe-west1, europe-west2 y europe-west3 para brindar 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 transferir los clústeres existentes al dominio nuevo nuevo. Para ello, primero borra y anula el registro de los clústeres del dominio global y, luego, registra. en el nuevo ámbito regional.

Comando de 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, con 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.

Go


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
}

Node.js

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

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

Comando de gcloud

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

Para ver una lista de 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

Go


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
}

Node.js

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



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

Comando de gcloud

Puedes obtener detalles sobre un dominio, como la hora o la zona horaria de creación, con 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 que representa el dominio. está en:

gcloud game servers realms describe realmID --location=region

Go


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
}

Node.js

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

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?