Créer un domaine

Cette page explique comment créer, répertorier et décrire des domaines Game Servers. Un domaine est un regroupement défini par l'utilisateur de clusters de serveurs de jeu en fonction des exigences de latence du jeu pour le remplissage des joueurs.

Avant de commencer

Avant de commencer, nous vous recommandons de vous familiariser avec les concepts clés de la page Présentation des Game Servers. Assurez-vous également que vous avez également effectué les tâches suivantes :

  • Assurez-vous d'avoir activé l'API des services de jeux.
  • Activer l'API des services de jeux
  • Choisissez une interface système sur laquelle le SDK Cloud est installé, ou utilisez un client API :
  • Cloud Shell

    Pour lancer Cloud Shell, procédez comme suit :

    1. Accédez à Google Cloud Console.

      Google Cloud Console

    2. Dans l'angle supérieur droit de la console, cliquez sur le bouton Activer Cloud Shell :

    Une session Cloud Shell s'ouvre dans un cadre situé en bas de la console. Cette interface système vous permet d'exécuter des commandes gcloud.

    Interface système locale

    Pour installer gcloud, installez le SDK Cloud, qui inclut l'outil de ligne de commande gcloud.

    Vérifiez que vous avez défini le projet par défaut souhaité pour l'outil de ligne de commande gcloud. Sinon, vous devrez spécifier explicitement l'option --project pour chaque commande ultérieurement :

    gcloud config list project
    

    Si non, vous pouvez exécuter la commande suivante pour définir un projet par défaut, en remplaçant project-id par l'ID de projet souhaité :

    gcloud config set project project-id
    

    Exécutez la commande suivante pour vérifier votre version du SDK Google Cloud. Game Servers nécessite la version 306.0.0 ou une version ultérieure du SDK.

    gcloud version
    

    Pour mettre à jour votre installation, exécutez la commande suivante :

    gcloud components update
    

    Bibliothèque cliente

    Google Cloud Game Servers peut être contrôlé par programmation à l'aide d'une bibliothèque cliente. Pour obtenir des instructions sur l'utilisation de la bibliothèque et l'authentification, consultez la page Présentation des bibliothèques clientes.

Créer un domaine

Les domaines peuvent être globaux ou régionaux. Un domaine global est une bonne option si les clusters enregistrés auprès d'un domaine proviennent de régions qui couvrent différentes zones géographiques, telles que l'Amérique du Nord, l'Amérique du Sud ou l'Europe et l'Asie. Un domaine régional est une bonne option si les clusters se trouvent dans la même région, par exemple l'Europe de l'Ouest. En cas de panne de réseau entre les régions, un domaine global risque de ne pas pouvoir gérer les clusters dans toutes les régions. Pour améliorer la résilience en cas de pannes réseau entre les régions, veillez à créer des domaines régionaux dans des régions aussi proches que possible des clusters de serveurs de jeu associés.

Par exemple, si vous créez des clusters dans les régions europe-west1, europe-west2 et europe-west3 pour servir des utilisateurs à l'ouest de l'Europe, vous pouvez également créer un domaine régional dans l'une de ces régions. Cette configuration garantit que le domaine peut continuer à gérer les clusters si ces régions ne sont pas accessibles à partir des régions d'autres parties du monde en raison d'une panne du réseau.

Si vous ne savez pas où créer votre domaine, vous pouvez le créer en tant que domaine global. À mesure que vos exigences évoluent, vous pouvez créer un domaine dans une région plus proche des clusters qu'il doit gérer. Pour déplacer des clusters existants vers le nouveau domaine régional, commencez par supprimer et annuler l'enregistrement des clusters du domaine global, puis les enregistrer. dans le nouveau domaine régional.

Commande gcloud

Vous pouvez créer des domaines à l'aide de l'outil de ligne de commande gcloud. Pour créer un domaine global, exécutez la commande suivante et remplacez les valeurs des espaces réservés tels que realmID par les valeurs appropriées :

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

Pour créer un domaine régional, exécutez la commande suivante et remplacez les valeurs des espaces réservés tels que realmID par les valeurs appropriées :

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

Les espaces réservés de variables correspondent aux descriptions suivantes :

  • realmID est un identifiant unique que vous pouvez spécifier pour ce domaine.
  • tz est le fuseau horaire de ce domaine. Lorsque vous planifiez des événements basés sur l'heure, tels que des règles de scaling, il est défini pour ce fuseau horaire.
  • region est la région du domaine. Si vous souhaitez contrôler les domaines de défaillance, spécifiez une région. Nous vous recommandons de créer un domaine global et d'omettre cette option.

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)

Répertorier les domaines

Commande gcloud

Vous pouvez répertorier les domaines globaux ou régionaux à l'aide de l'outil de ligne de commande gcloud.

Pour répertorier les domaines globaux et régionaux, exécutez la commande suivante :

gcloud game servers realms list

Pour répertorier les domaines d'un emplacement spécifique, exécutez la commande suivante et remplacez region par global ou une région 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

Décrire des domaines

Commande gcloud

Vous pouvez obtenir des informations sur un domaine, comme l'heure de création ou le fuseau horaire, à l'aide de l'outil de ligne de commande gcloud.

Pour décrire un domaine global, exécutez la commande suivante et remplacez realmID par l'identifiant d'un domaine que vous avez précédemment créé :

gcloud game servers realms describe realmID

Si vous avez créé un ou plusieurs domaines qui ne sont pas mondiaux, vous pouvez décrire les informations de domaine dans une région spécifique. Pour décrire un domaine dans une région, remplacez realmID par l'identifiant d'un domaine que vous avez précédemment créé et region par la région que le domaine a été créée. est dans :

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

Étape suivante