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 de 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 les 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
    

    curl / PowerShell

    Pour utiliser l'API REST avec curl ou Windows PowerShell, procédez comme suit:

    1. Créer un compte de service
    2. Téléchargez une clé privée en tant que fichier JSON.
    3. Définissez la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS pour qu'elle pointe vers le chemin du fichier JSON contenant la clé de votre compte de service. Cette variable ne s'applique qu'à la session de shell actuelle. Par conséquent, si vous ouvrez une nouvelle session, vous devez de nouveau la définir.

    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 Europe West. 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 augmenter la résilience des 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 enregistrez-les dans le nouveau domaine régional.

Console

  1. Dans Cloud Console, accédez à la page Domaines et clusters.

    Accéder à Game Servers

  2. Cliquez sur Create Realm (Créer un domaine).

  3. Dans le champ Nom du domaine, saisissez un identifiant unique pour ce domaine.

  4. Dans la zone Fuseau horaire, sélectionnez un fuseau horaire pour ce domaine. Les événements basés sur l'heure, tels que les règles de scaling, s'appliquent à ce fuseau horaire.

  5. Cliquez sur Create (Créer).

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 d'espace réservé 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 stratégies 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.

API REST et ligne de commande

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID: ID de votre projet Google Cloud, répertorié dans les paramètres IAM.
  • LOCATION: région du domaine. Si vous souhaitez contrôler les domaines de défaillance, spécifiez une région dans la liste des emplacements acceptés. Nous vous recommandons de spécifier un domaine global.
  • REALM_ID: identifiant défini par l'utilisateur pour le nouveau domaine
  • TIME_ZONE: fuseau horaire de ce domaine (par exemple, US/Eastern). Vous planifiez des événements basés sur l'heure, tels que des règles de scaling, pour ce fuseau horaire.

Corps JSON de la requête :

{
  "timeZone": "TIME_ZONE"
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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
}

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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)

Répertorier les domaines

Console

  1. Dans Cloud Console, accédez à la page Domaines et clusters.

    Accéder à Game Servers

  2. Vous pouvez utiliser la zone de filtre pour filtrer la liste des domaines en fonction des différentes propriétés.

API REST et ligne de commande

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID: ID de votre projet Google Cloud, répertorié dans les paramètres IAM.
  • LOCATION: région des domaines ou global

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "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

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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Décrire les domaines

Console

  1. Dans Cloud Console, accédez à la page Domaines et clusters.

    Accéder à Game Servers

  2. Vous pouvez utiliser la zone de filtre pour filtrer la liste des domaines en fonction des différentes propriétés.

  3. Dans la dernière colonne du tableau, cliquez sur les points de suspension , puis sélectionnez Afficher les détails.

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 globaux, vous pouvez fournir des informations sur un domaine dans une région spécifique. Pour décrire un domaine d'une région, remplacez realmID par l'identifiant d'un domaine que vous avez précédemment créé et region par la région où se trouve le domaine :

gcloud game servers realms describe realmID --location=region

API REST et ligne de commande

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • PROJECT_ID: ID de votre projet Google Cloud, répertorié dans les paramètres IAM.
  • LOCATION: région du domaine ou global
  • REALM_ID: identifiant défini par l'utilisateur pour le domaine

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

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

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Pour savoir comment installer et utiliser la bibliothèque cliente pour Game Servers, consultez la section Bibliothèques clientes 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

Étape suivante