Utiliser des réservations


Ce document explique comment utiliser des réservations dans Compute Engine. Pour savoir comment utiliser des réservations dans d'autres produits Google Cloud , consultez la documentation suivante :

Une fois que vous avez créé une réservation ou que Compute Engine en a créé une automatiquement pour répondre à une réservation future, Compute Engine conserve les ressources réservées pour vous. Vous pouvez ensuite utiliser ces ressources réservées pour créer des instances Compute Engine correspondant aux propriétés de la réservation. Cette action est appelée consommation d'une réservation. Vous pouvez utiliser votre capacité réservée pour créer des instances jusqu'à ce que la réservation soit entièrement consommée.

Limites

Vous ne pouvez pas utiliser une réservation pour créer les ressources Compute Engine suivantes :

  • VM Spot ou instances préemptives

  • Nœuds à locataire unique

Avant de commencer

  • Si ce n'est pas déjà fait, configurez l'authentification. L'authentification est le processus permettant de valider votre identité pour accéder aux services et aux API Google Cloud . Pour exécuter du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de Compute Engine en sélectionnant l'une des options suivantes :

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

      1. After installing the Google Cloud CLI, initialize it by running the following command:

        gcloud init

        If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

      2. Set a default region and zone.
      3. Go

        Pour utiliser les exemples Go de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

        1. Install the Google Cloud CLI.

        2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        3. To initialize the gcloud CLI, run the following command:

          gcloud init
        4. If you're using a local shell, then create local authentication credentials for your user account:

          gcloud auth application-default login

          You don't need to do this if you're using Cloud Shell.

          If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

        Pour en savoir plus, consultez Set up authentication for a local development environment.

        Java

        Pour utiliser les exemples Java de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

        1. Install the Google Cloud CLI.

        2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        3. To initialize the gcloud CLI, run the following command:

          gcloud init
        4. If you're using a local shell, then create local authentication credentials for your user account:

          gcloud auth application-default login

          You don't need to do this if you're using Cloud Shell.

          If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

        Pour en savoir plus, consultez Set up authentication for a local development environment.

        Node.js

        Pour utiliser les exemples Node.js de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

        1. Install the Google Cloud CLI.

        2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        3. To initialize the gcloud CLI, run the following command:

          gcloud init
        4. If you're using a local shell, then create local authentication credentials for your user account:

          gcloud auth application-default login

          You don't need to do this if you're using Cloud Shell.

          If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

        Pour en savoir plus, consultez Set up authentication for a local development environment.

        Python

        Pour utiliser les exemples Python de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

        1. Install the Google Cloud CLI.

        2. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        3. To initialize the gcloud CLI, run the following command:

          gcloud init
        4. If you're using a local shell, then create local authentication credentials for your user account:

          gcloud auth application-default login

          You don't need to do this if you're using Cloud Shell.

          If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

        Pour en savoir plus, consultez Set up authentication for a local development environment.

        REST

        Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

          After installing the Google Cloud CLI, initialize it by running the following command:

          gcloud init

          If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

        Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud .

Rôles requis

Pour obtenir les autorisations nécessaires à l'utilisation de réservations, demandez à votre administrateur de vous attribuer le rôle IAM Administrateur d'instances Compute (v1) (roles/compute.instanceAdmin.v1) sur le projet. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour utiliser des réservations. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour utiliser des réservations :

  • Pour créer des réservations : compute.reservations.create sur le projet
  • Pour créer des instances :
    • compute.instances.create sur le projet
    • Pour créer la VM à l'aide d'une image personnalisée : compute.images.useReadOnly sur l'image
    • Pour créer la VM à l'aide d'un instantané : compute.snapshots.useReadOnly sur l'instantané
    • Pour créer la VM à l'aide d'un modèle d'instance : compute.instanceTemplates.useReadOnly sur le modèle d'instance
    • Pour attribuer un ancien réseau à la VM : compute.networks.use sur le projet
    • Pour spécifier une adresse IP statique pour la VM : compute.addresses.use sur le projet
    • Pour attribuer une adresse IP externe à la VM, en cas d'utilisation d'un ancien réseau : compute.networks.useExternalIp sur le projet
    • Pour spécifier un sous-réseau pour la VM : compute.subnetworks.use sur le projet ou sur le sous-réseau choisi
    • Pour attribuer une adresse IP externe à la VM, en cas d'utilisation d'un réseau VPC : compute.subnetworks.useExternalIp sur le projet ou sur le sous-réseau choisi
    • Pour définir les métadonnées d'instance de VM pour la VM : compute.instances.setMetadata sur le projet
    • Pour définir des tags pour la VM : compute.instances.setTags sur la VM
    • Pour définir des libellés pour la VM : compute.instances.setLabels sur la VM
    • Pour définir un compte de service à utiliser avec la VM : compute.instances.setServiceAccount sur la VM
    • Pour créer un disque pour la VM : compute.disks.create sur le projet
    • Pour associer un disque existant en mode lecture seule ou en mode lecture-écriture : compute.disks.use sur le disque
    • Pour associer un disque existant en mode lecture seule : compute.disks.useReadOnly sur le disque
  • Pour créer des modèles d'instance : compute.instanceTemplates.create sur le projet

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Utiliser une réservation

Les exemples des sections suivantes montrent comment utiliser une réservation en créant une seule instance de calcul. Vous pouvez également utiliser des réservations en créant des instances qui correspondent aux propriétés des réservations à l'aide d'une autre option de déploiement, ou en mettant à jour les propriétés des instances existantes pour qu'elles correspondent aux réservations consommées automatiquement.

Pour consommer une réservation, utilisez l'une des méthodes suivantes :

Utiliser une réservation consommée automatiquement

Lorsque vous créez une réservation consommée automatiquement, les instances de calcul qui correspondent aux propriétés de la réservation la consomment automatiquement. Ce comportement de consommation s'applique aux instances en cours d'exécution, qu'elles soient nouvelles ou existantes. Lorsque vous créez des réservations ou que Compute Engine crée automatiquement une réservation pour répondre à une réservation future, ce type de réservation est le paramètre par défaut.

Si les propriétés d'une réservation automatique à projet unique et d'une réservation automatique partagée correspondent, les instances de votre projet utilisent d'abord la réservation à projet unique, puis la réservation partagée. Pour en savoir plus, consultez la section Ordre d'utilisation des réservations.

Pour créer et consommer un exemple de réservation automatique, sélectionnez l'une des options suivantes :

Console

L'exemple suivant montre comment créer une réservation automatique dans la zone us-central1-a pour trois instances N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale. Il montre également comment créer une instance unique pour consommer la réservation.

Pour créer l'exemple de réservation automatique et l'utiliser, procédez comme suit :

  1. Pour créer un exemple de réservation, procédez comme suit :

    1. Dans la console Google Cloud , accédez à la page Réservations.

      Accéder à la page "Réservations"

      Les étapes restantes s'affichent automatiquement dans la consoleGoogle Cloud .

    2. Dans l'onglet Réservation à la demande (par défaut), cliquez sur Créer une réservation. La page Créer une réservation s'affiche.

    3. Dans le champ Nom, saisissez un nom pour la réservation. Par exemple, saisissez reservation-01.

    4. Sélectionnez la région et la zone dans lesquelles vous souhaitez réserver des ressources. Par exemple, sélectionnez respectivement us-central1 et us-central1-a.

    5. Dans la section Type de partage, effectuez l'une des opérations suivantes :

      • Pour créer une réservation à un seul projet, sélectionnez Local.

      • Pour créer une réservation partagée, sélectionnez Partagé, puis spécifiez les projets avec lesquels vous souhaitez partager la réservation.

    6. Dans la section Utiliser avec une instance de VM, sélectionnez Utiliser automatiquement une réservation si ce n'est pas déjà fait.

    7. Dans le champ Nombre d'instances de VM, saisissez 3.

    8. Dans l'onglet Usage général, sélectionnez N2.

    9. Dans la section Type de machine, dans l'onglet Prédéfini (par défaut), sélectionnez n2-standard-32.

    10. Développez Plate-forme du processeur et GPU, puis, dans le champ Plate-forme du processeur, sélectionnez Intel Cascade Lake ou version ultérieure.

    11. Cliquez sur Créer.

  2. Pour créer une instance qui utilise l'exemple de réservation, procédez comme suit :

    1. Dans la console Google Cloud , accédez à la page Créer une instance.

      Accéder à la page Créer une instance

      La page Créer une instance s'affiche et le volet Configuration de la machine s'ouvre.

    2. Dans le volet "Configuration de la machine", procédez comme suit :

      1. Dans le champ Nom, saisissez un nom pour l'instance. Pour cet exemple, saisissez instance-01.

      2. Spécifiez la région et la zone dans lesquelles réserver des ressources. Pour cet exemple, sélectionnez respectivement us-central1 et us-central1-a.

      3. Dans l'onglet Usage général, sélectionnez N2.

      4. Dans la section Type de machine, dans l'onglet Prédéfini (par défaut), sélectionnez n2-standard-32.

      5. Développez la section Options avancées, puis, dans le champ Plate-forme du processeur, sélectionnez Intel Cascade Lake ou version ultérieure.

    3. Facultatif : L'utilisation automatique d'une réservation correspondante est le paramètre par défaut. Toutefois, si vous souhaitez spécifier ce paramètre, procédez comme suit :

      1. Dans le menu de navigation, cliquez sur Avancé. Le volet Avancé s'affiche.

      2. Dans la section Réservations, sélectionnez Utiliser la sélection automatique.

    4. Cliquez sur Créer.

gcloud

L'exemple suivant montre comment créer une réservation automatique dans la zone us-central1-a pour trois instances N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale. Il montre également comment créer une instance unique pour consommer la réservation.

Pour créer l'exemple de réservation automatique et l'utiliser, procédez comme suit :

  1. Pour créer l'exemple de réservation, utilisez la commande gcloud compute reservations create :

    gcloud compute reservations create reservation-01 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform="Intel Cascade Lake" \
        --vm-count=3 \
        --zone=us-central1-a
    
  2. Pour créer une instance qui utilise l'exemple de réservation, exécutez la commande gcloud compute instances create avec l'option --reservation-affinity définie sur any. Étant donné que any est la configuration par défaut, vous pouvez également omettre cet indicateur.

    gcloud compute instances create instance-01 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform="Intel Cascade Lake" \
        --reservation-affinity=any \
        --zone=us-central1-a
    

Go

Pour créer l'exemple de réservation automatique à l'aide d'un modèle d'instance et créer une instance pour utiliser la réservation à l'aide du même modèle, utilisez l'exemple de code suivant :

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
	"google.golang.org/protobuf/proto"
)

// consumeAnyReservation creates instance, consuming any available reservation
func consumeAnyReservation(w io.Writer, projectID, zone, instanceName, sourceTemplate string) error {
	// projectID := "your_project_id"
	// zone := "us-west3-a"
	// instanceName := "your_instance_name"
	// sourceTemplate: existing template path. Following formats are allowed:
	//  	- projects/{project_id}/global/instanceTemplates/{template_name}
	//  	- projects/{project_id}/regions/{region}/instanceTemplates/{template_name}
	//  	- https://www.googleapis.com/compute/v1/projects/{project_id}/global/instanceTemplates/instanceTemplate
	//  	- https://www.googleapis.com/compute/v1/projects/{project_id}/regions/{region}/instanceTemplates/instanceTemplate

	ctx := context.Background()

	instancesClient, err := compute.NewInstancesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstancesRESTClient: %w", err)
	}
	defer instancesClient.Close()

	req := &computepb.InsertInstanceRequest{
		Project:                projectID,
		Zone:                   zone,
		SourceInstanceTemplate: proto.String(sourceTemplate),
		InstanceResource: &computepb.Instance{
			Name: proto.String(instanceName),
			// specifies that any matching reservation should be consumed
			ReservationAffinity: &computepb.ReservationAffinity{
				ConsumeReservationType: proto.String("ANY_RESERVATION"),
			},
		},
	}

	op, err := instancesClient.Insert(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to create instance: %w", err)
	}

	if err = op.Wait(ctx); err != nil {
		return fmt.Errorf("unable to wait for the operation: %w", err)
	}
	fmt.Fprintf(w, "Instance created from reservation\n")

	return nil
}

Java

L'exemple suivant montre comment créer une instance N1 avec quatre processeurs virtuels et Intel Skylake comme plate-forme de processeur minimale dans la zone us-central1-a. L'instance consomme automatiquement une réservation correspondante.

Pour créer l'exemple d'instance, utilisez l'exemple de code suivant :

import static com.google.cloud.compute.v1.ReservationAffinity.ConsumeReservationType.ANY_RESERVATION;

import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.compute.v1.AttachedDisk;
import com.google.cloud.compute.v1.AttachedDiskInitializeParams;
import com.google.cloud.compute.v1.InsertInstanceRequest;
import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.NetworkInterface;
import com.google.cloud.compute.v1.Operation;
import com.google.cloud.compute.v1.ReservationAffinity;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ConsumeAnyMatchingReservation {

  public static void main(String[] args)
      throws IOException, ExecutionException, InterruptedException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Cloud project you want to use.
    String projectId = "YOUR_PROJECT_ID";
    // Zone where the VM instance will be created.
    String zone = "us-central1-a";
    // Name of the VM instance you want to query.
    String instanceName = "YOUR_INSTANCE_NAME";
    // machineType: machine type of the VM being created.
    // *   For a list of machine types, see https://cloud.google.com/compute/docs/machine-types
    String machineTypeName = "n1-standard-4";
    // sourceImage: path to the operating system image to mount.
    // *   For details about images you can mount, see https://cloud.google.com/compute/docs/images
    String sourceImage = "projects/debian-cloud/global/images/family/debian-11";
    // diskSizeGb: storage size of the boot disk to attach to the instance.
    long diskSizeGb = 10L;
    // networkName: network interface to associate with the instance.
    String networkName = "default";
    // Minimum CPU platform of the instances.
    String minCpuPlatform = "Intel Skylake";

    createInstanceAsync(projectId, zone, instanceName, machineTypeName, sourceImage,
        diskSizeGb, networkName, minCpuPlatform);
  }

  // Create a virtual machine targeted with the reserveAffinity field.
  // In this consumption model, existing and new VMs automatically consume a reservation
  // if their properties match the VM properties specified in the reservation.
  public static Instance createInstanceAsync(String projectId, String zone,
      String instanceName, String machineTypeName, String sourceImage,
      long diskSizeGb, String networkName, String minCpuPlatform)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    String machineType = String.format("zones/%s/machineTypes/%s", zone, machineTypeName);
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (InstancesClient instancesClient = InstancesClient.create()) {
      AttachedDisk disk =
          AttachedDisk.newBuilder()
              .setBoot(true)
              .setAutoDelete(true)
              .setType(AttachedDisk.Type.PERSISTENT.toString())
              .setDeviceName("disk-1")
              .setInitializeParams(
                  AttachedDiskInitializeParams.newBuilder()
                      .setSourceImage(sourceImage)
                      .setDiskSizeGb(diskSizeGb)
                      .build())
              .build();

      NetworkInterface networkInterface = NetworkInterface.newBuilder()
          .setName(networkName)
          .build();

      ReservationAffinity reservationAffinity =
          ReservationAffinity.newBuilder()
              .setConsumeReservationType(ANY_RESERVATION.toString())
              .build();

      Instance instanceResource =
          Instance.newBuilder()
              .setName(instanceName)
              .setMachineType(machineType)
              .addDisks(disk)
              .addNetworkInterfaces(networkInterface)
              .setMinCpuPlatform(minCpuPlatform)
              .setReservationAffinity(reservationAffinity)
              .build();

      InsertInstanceRequest insertInstanceRequest = InsertInstanceRequest.newBuilder()
          .setProject(projectId)
          .setZone(zone)
          .setInstanceResource(instanceResource)
          .build();

      OperationFuture<Operation, Operation> operation = instancesClient.insertAsync(
          insertInstanceRequest);

      Operation response = operation.get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        return null;
      }
      return instancesClient.get(projectId, zone, instanceName);
    }
  }
}

Node.js

L'exemple suivant montre comment créer une instance N1 avec quatre processeurs virtuels et Intel Skylake comme plate-forme de processeur minimale dans la zone us-central1-a. L'instance consomme automatiquement une réservation correspondante.

Pour créer l'exemple d'instance, utilisez l'exemple de code suivant :

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a reservationsClient
const instancesClient = new computeLib.InstancesClient();
// Instantiate a zoneOperationsClient
const zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// The ID of the project where you want to create instance.
const projectId = await instancesClient.getProjectId();
// The zone in which to create instance.
const zone = 'us-central1-a';
// The name of the instance to create.
// const instanceName = 'instance-01';
// Machine type to use for VM.
const machineType = 'n1-standard-4';

// Create instance to consume reservation if their properties match the VM properties
async function callCreateInstanceToConsumeAnyReservation() {
  // Describe the size and source image of the boot disk to attach to the instance.
  const disk = new compute.Disk({
    boot: true,
    autoDelete: true,
    type: 'PERSISTENT',
    initializeParams: {
      diskSizeGb: '10',
      sourceImage: 'projects/debian-cloud/global/images/family/debian-12',
    },
  });

  //  Define networkInterface
  const networkInterface = new compute.NetworkInterface({
    name: 'global/networks/default',
  });

  // Define reservationAffinity
  const reservationAffinity = new compute.ReservationAffinity({
    consumeReservationType: 'ANY_RESERVATION',
  });

  // Create an instance
  const instance = new compute.Instance({
    name: instanceName,
    machineType: `zones/${zone}/machineTypes/${machineType}`,
    minCpuPlatform: 'Intel Skylake',
    disks: [disk],
    networkInterfaces: [networkInterface],
    reservationAffinity,
  });

  const [response] = await instancesClient.insert({
    project: projectId,
    instanceResource: instance,
    zone,
  });

  let operation = response.latestResponse;

  // Wait for the create instance operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log(`Instance ${instanceName} created.`);
}

await callCreateInstanceToConsumeAnyReservation();

Python

L'exemple suivant montre comment créer une réservation automatique dans la zone us-central1-a pour trois instances N1 avec un processeur virtuel et Intel Ivy comme plate-forme de processeur minimale. Il montre également comment créer une instance unique pour consommer la réservation.

Pour créer l'exemple de réservation automatique et l'utiliser, procédez comme suit :

from __future__ import annotations

import sys
from typing import Any

from google.api_core.extended_operation import ExtendedOperation
from google.cloud import compute_v1


def wait_for_extended_operation(
    operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
) -> Any:
    """
    Waits for the extended (long-running) operation to complete.

    If the operation is successful, it will return its result.
    If the operation ends with an error, an exception will be raised.
    If there were any warnings during the execution of the operation
    they will be printed to sys.stderr.

    Args:
        operation: a long-running operation you want to wait on.
        verbose_name: (optional) a more verbose name of the operation,
            used only during error and warning reporting.
        timeout: how long (in seconds) to wait for operation to finish.
            If None, wait indefinitely.

    Returns:
        Whatever the operation.result() returns.

    Raises:
        This method will raise the exception received from `operation.exception()`
        or RuntimeError if there is no exception set, but there is an `error_code`
        set for the `operation`.

        In case of an operation taking longer than `timeout` seconds to complete,
        a `concurrent.futures.TimeoutError` will be raised.
    """
    result = operation.result(timeout=timeout)

    if operation.error_code:
        print(
            f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
            file=sys.stderr,
            flush=True,
        )
        print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
        raise operation.exception() or RuntimeError(operation.error_message)

    if operation.warnings:
        print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
        for warning in operation.warnings:
            print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)

    return result


def consume_any_project_reservation(
    project_id: str,
    zone: str,
    reservation_name: str,
    instance_name: str,
    machine_type: str = "n1-standard-1",
    min_cpu_platform: str = "Intel Ivy Bridge",
) -> compute_v1.Instance:
    """
    Creates a specific reservation in a single project and launches a VM
    that consumes the newly created reservation.
    Args:
        project_id (str): The ID of the Google Cloud project.
        zone (str): The zone to create the reservation.
        reservation_name (str): The name of the reservation to create.
        instance_name (str): The name of the instance to create.
        machine_type (str): The machine type for the instance.
        min_cpu_platform (str): The minimum CPU platform for the instance.
    """
    instance_properties = (
        compute_v1.AllocationSpecificSKUAllocationReservedInstanceProperties(
            machine_type=machine_type,
            min_cpu_platform=min_cpu_platform,
        )
    )

    reservation = compute_v1.Reservation(
        name=reservation_name,
        specific_reservation=compute_v1.AllocationSpecificSKUReservation(
            count=3,
            instance_properties=instance_properties,
        ),
    )

    # Create a reservation client
    client = compute_v1.ReservationsClient()
    operation = client.insert(
        project=project_id,
        zone=zone,
        reservation_resource=reservation,
    )
    wait_for_extended_operation(operation, "Reservation creation")

    instance = compute_v1.Instance()
    instance.name = instance_name
    instance.machine_type = f"zones/{zone}/machineTypes/{machine_type}"
    instance.min_cpu_platform = min_cpu_platform
    instance.zone = zone

    # Set the reservation affinity to target any matching reservation
    instance.reservation_affinity = compute_v1.ReservationAffinity(
        consume_reservation_type="ANY_RESERVATION",  # Type of reservation to consume
    )
    # Define the disks for the instance
    instance.disks = [
        compute_v1.AttachedDisk(
            boot=True,  # Indicates that this is a boot disk
            auto_delete=True,  # The disk will be deleted when the instance is deleted
            initialize_params=compute_v1.AttachedDiskInitializeParams(
                source_image="projects/debian-cloud/global/images/family/debian-11",
                disk_size_gb=10,
            ),
        )
    ]
    instance.network_interfaces = [
        compute_v1.NetworkInterface(
            network="global/networks/default",  # The network to use
            access_configs=[
                compute_v1.AccessConfig(
                    name="External NAT",  # Name of the access configuration
                    type="ONE_TO_ONE_NAT",  # Type of access configuration
                )
            ],
        )
    ]
    # Create a request to insert the instance
    request = compute_v1.InsertInstanceRequest()
    request.zone = zone
    request.project = project_id
    request.instance_resource = instance

    vm_client = compute_v1.InstancesClient()
    operation = vm_client.insert(request)
    wait_for_extended_operation(operation, "instance creation")
    print(f"Instance {instance_name} that targets any open reservation created.")

    return vm_client.get(project=project_id, zone=zone, instance=instance_name)

REST

L'exemple suivant montre comment créer une réservation automatique dans la zone us-central1-a pour trois instances N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale. Il montre également comment créer une instance unique pour consommer la réservation.

Pour créer l'exemple de réservation automatique et l'utiliser, procédez comme suit :

  1. Pour créer l'exemple de réservation, envoyez une requête POST à la méthode reservations.insert :

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations
    
    {
      "name": "reservation-01",
      "specificReservation": {
        "count": "3",
        "instanceProperties": {
          "machineType": "n2-standard-32",
          "minCpuPlatform": "Intel Cascade Lake",
        }
      }
    }
    
  2. Pour créer une instance qui utilise l'exemple de réservation, envoyez une requête POST à la méthode instances.insert. Dans le corps de la requête, incluez le champ consumeReservationType défini sur ANY_RESERVATION. Toutefois, comme ANY_RESERVATION est la configuration par défaut, vous pouvez également omettre le champ.

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances
    
    {
      "name": "instance-01",
      "machineType": "zones/us-central1-a/machineTypes/n2-standard-32",
      "minCpuPlatform": "Intel Cascade Lake",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/debian-cloud/global/images/family/debian-12"
          }
        }
      ],
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ],
      "reservationAffinity": {
        "consumeReservationType": "ANY_RESERVATION"
      }
    }
    

Utiliser une réservation spécifiquement ciblée

Les réservations spécifiquement ciblées permettent aux nouvelles instances de calcul d'utiliser une réservation correspondante uniquement si les instances ciblent la réservation. Les instances ne sont créées que si leurs propriétés correspondent à celles de la réservation. Sinon, vous rencontrerez des erreurs.

En fonction de la méthode de création que vous souhaitez utiliser, créez des réservations spécifiques et des instances qui les ciblent comme suit :

Méthode de création Lorsque vous créez une réservation Lorsque vous créez des instances
ConsoleGoogle Cloud Dans la section Utiliser avec une instance de VM, sélectionnez Sélectionner une réservation spécifique. Dans le volet Avancé, dans la section Réservations, sélectionnez Choisir une réservation.
Google Cloud CLI Spécifiez l'option --require-specific-reservation. Incluez les indicateurs suivants :
  • L'indicateur --reservation-affinity est défini sur specific.
  • L'option --reservation est définie sur l'URL de la réservation.
Go Incluez le champ SpecificReservationRequired défini sur true. Dans le champ ReservationAffinity, incluez les champs suivants :
  • Le champ ConsumeReservationType est défini sur SPECIFIC_RESERVATION.
  • Le champ Key est défini sur compute.googleapis.com/reservation-name.
  • Le champ Values défini sur l'URL de la réservation.
Java Incluez le champ setSpecificReservationRequired défini sur true. Dans le champ ReservationAffinity, incluez les champs suivants :
  • Le champ setConsumeReservationType est défini sur SPECIFIC_RESERVATION.
  • Le champ setKey est défini sur compute.googleapis.com/reservation-name.
  • Le champ addValues défini sur l'URL de la réservation.
Node.js et API REST Incluez le champ specificReservationRequired défini sur true. Dans le champ reservationAffinity, incluez les champs suivants :
  • Le champ consumeReservationType est défini sur SPECIFIC_RESERVATION.
  • Le champ key est défini sur compute.googleapis.com/reservation-name.
  • Le champ values défini sur l'URL de la réservation.
Python et Terraform Incluez le champ specific_reservation_required défini sur true. Dans le champ reservation_affinity, incluez les champs suivants :
  • Le champ consume_reservation_type est défini sur SPECIFIC_RESERVATION.
  • Le champ key est défini sur compute.googleapis.com/reservation-name.
  • Le champ values défini sur l'URL de la réservation.

Pour créer un exemple de réservation spécifique et une instance permettant de l'utiliser, sélectionnez l'une des options suivantes :

Console

L'exemple suivant montre comment créer une réservation spécifique dans la zone us-central1-a pour trois instances N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale. Il montre également comment créer une instance unique pour consommer la réservation.

Pour créer l'exemple de réservation spécifique et l'utiliser, procédez comme suit :

  1. Pour créer un exemple de réservation, procédez comme suit :

    1. Dans la console Google Cloud , accédez à la page Réservations.

      Accéder à la page "Réservations"

      Les étapes restantes s'affichent automatiquement dans la consoleGoogle Cloud .

    2. Dans l'onglet Réservation à la demande (par défaut), cliquez sur Créer une réservation. La page Créer une réservation s'affiche.

    3. Dans le champ Nom, saisissez un nom pour la réservation. Par exemple, saisissez reservation-02.

    4. Spécifiez la région et la zone dans lesquelles réserver des ressources. Pour cet exemple, sélectionnez respectivement us-central1 et us-central1-a.

    5. Dans la section Type de partage, effectuez l'une des opérations suivantes :

      • Pour créer une réservation à un seul projet, sélectionnez Local.

      • Pour créer une réservation partagée, sélectionnez Partagé, puis spécifiez les projets avec lesquels vous souhaitez partager la réservation.

    6. Dans la section Utiliser avec une instance de VM, sélectionnez Sélectionner une réservation spécifique.

    7. Dans le champ Nombre d'instances de VM, saisissez 3.

    8. Dans l'onglet Usage général, sélectionnez N2.

    9. Dans la section Type de machine, dans l'onglet Prédéfini (par défaut), sélectionnez n2-standard-32.

    10. Développez Plate-forme du processeur et GPU, puis, dans le champ Plate-forme du processeur, sélectionnez Intel Cascade Lake ou version ultérieure.

    11. Cliquez sur Créer.

  2. Pour créer une instance qui utilise l'exemple de réservation, procédez comme suit :

    1. Dans la console Google Cloud , accédez à la page Créer une instance.

      Accéder à la page Créer une instance

      La page Créer une instance s'affiche et le volet Configuration de la machine s'ouvre.

    2. Dans le volet "Configuration de la machine", procédez comme suit :

      1. Dans le champ Nom, saisissez un nom pour l'instance. Pour cet exemple, saisissez instance-02.

      2. Spécifiez la région et la zone dans lesquelles réserver des ressources. Pour cet exemple, sélectionnez respectivement us-central1 et us-central1-a.

      3. Dans l'onglet Usage général, sélectionnez N2.

      4. Dans la section Type de machine, dans l'onglet Prédéfini (par défaut), sélectionnez n2-standard-32.

      5. Développez la section Options avancées, puis, dans le champ Plate-forme du processeur, sélectionnez Intel Cascade Lake ou version ultérieure.

    3. Dans le menu de navigation, cliquez sur Avancé. Le volet Avancé s'affiche.

    4. Dans la section Réservations, sélectionnez Choisir une réservation, puis cliquez sur Choisir une réservation.

    5. Dans le volet Choisir une réservation qui s'affiche, procédez comme suit :

      1. Sélectionnez la réservation spécifique que vous avez créée lors des étapes précédentes. Si vous souhaitez utiliser une réservation partagée qui existe dans un autre projet, sélectionnez le projet dans lequel se trouve la réservation dans la liste Projet.

      2. Cliquez sur Choisir.

    6. Cliquez sur Créer.

gcloud

L'exemple suivant montre comment créer une réservation spécifique dans la zone us-central1-a pour trois instances N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale. Il montre également comment créer une instance unique pour consommer la réservation.

Pour créer l'exemple de réservation spécifique et l'utiliser, procédez comme suit :

  1. Pour créer l'exemple de réservation, utilisez la commande gcloud compute reservations create avec l'option --require-specific-reservation :

    gcloud compute reservations create reservation-02 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform="Intel Cascade Lake" \
        --require-specific-reservation \
        --vm-count=3 \
        --zone=us-central1-a
    
  2. Pour créer une instance qui utilise l'exemple de réservation, exécutez la commande gcloud compute instances create avec les options --reservation et --reservation-affinity=specific :

    gcloud compute instances create instance-02 \
        --machine-type=n2-standard-32 \
        --min-cpu-platform="Intel Cascade Lake" \
        --reservation-affinity=specific \
        --reservation=RESERVATION_URL \
        --zone=us-central1-a
    

    Remplacez RESERVATION_URL par l'URL de la réservation. Spécifiez une des valeurs suivantes :

    • Si vous avez créé la réservation dans le même projet : reservation-02

    • Si la réservation se trouve dans un autre projet : projects/PROJECT_ID/reservations/reservation-02

Go

Les exemples suivants montrent comment créer une instance N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale, dans la zone us-central1-a, pour consommer une réservation spécifique correspondante :

  • Pour créer l'instance exemple afin de consommer une réservation spécifique à un projet unique, utilisez l'exemple de code suivant :

    import (
    	"context"
    	"fmt"
    	"io"
    
    	compute "cloud.google.com/go/compute/apiv1"
    	computepb "cloud.google.com/go/compute/apiv1/computepb"
    	"google.golang.org/protobuf/proto"
    )
    
    // consumeSpecificReservation creates instance, consuming specific reservation
    // Note: respective reservation should have SpecificReservationRequired: true
    func consumeSpecificReservation(w io.Writer, projectID, zone, instanceName, reservationName string) error {
    	// projectID := "your_project_id"
    	// zone := "us-west3-a"
    	// reservationName := "your_reservation_name"
    	// instanceName := "your_instance_name"
    
    	ctx := context.Background()
    	machineType := fmt.Sprintf("zones/%s/machineTypes/%s", zone, "n2-standard-32")
    	sourceImage := "projects/debian-cloud/global/images/family/debian-12"
    
    	instancesClient, err := compute.NewInstancesRESTClient(ctx)
    	if err != nil {
    		return fmt.Errorf("NewInstancesRESTClient: %w", err)
    	}
    	defer instancesClient.Close()
    
    	req := &computepb.InsertInstanceRequest{
    		Project: projectID,
    		Zone:    zone,
    		InstanceResource: &computepb.Instance{
    			Disks: []*computepb.AttachedDisk{
    				{
    					InitializeParams: &computepb.AttachedDiskInitializeParams{
    						DiskSizeGb:  proto.Int64(10),
    						SourceImage: proto.String(sourceImage),
    					},
    					AutoDelete: proto.Bool(true),
    					Boot:       proto.Bool(true),
    					Type:       proto.String(computepb.AttachedDisk_PERSISTENT.String()),
    				},
    			},
    			MachineType:    proto.String(machineType),
    			MinCpuPlatform: proto.String("Intel Cascade Lake"),
    			Name:           proto.String(instanceName),
    			NetworkInterfaces: []*computepb.NetworkInterface{
    				{
    					Name: proto.String("global/networks/default"),
    				},
    			},
    			// specifies particular reservation, which should be consumed
    			ReservationAffinity: &computepb.ReservationAffinity{
    				ConsumeReservationType: proto.String("SPECIFIC_RESERVATION"),
    				Key:                    proto.String("compute.googleapis.com/reservation-name"),
    				Values:                 []string{reservationName},
    			},
    		},
    	}
    
    	op, err := instancesClient.Insert(ctx, req)
    	if err != nil {
    		return fmt.Errorf("unable to create instance: %w", err)
    	}
    
    	if err = op.Wait(ctx); err != nil {
    		return fmt.Errorf("unable to wait for the operation: %w", err)
    	}
    	fmt.Fprintf(w, "Instance created from reservation\n")
    
    	return nil
    }
    
  • Pour créer l'instance exemple afin d'utiliser une réservation partagée spécifique, utilisez l'exemple de code suivant :

    import (
    	"context"
    	"fmt"
    	"io"
    
    	computepb "cloud.google.com/go/compute/apiv1/computepb"
    	"google.golang.org/protobuf/proto"
    )
    
    // consumeSpecificSharedReservation consumes specific shared reservation in particular zone
    func consumeSpecificSharedReservation(w io.Writer, client InstanceClientInterface, projectID, baseProjectId, zone, instanceName, reservationName string) error {
    	// client, err := compute.NewInstancesRESTClient(ctx)
    	// projectID := "your_project_id". Project where reservation is created.
    	// baseProjectId := "shared_project_id". Project where instance will be consumed and created.
    	// zone := "us-west3-a"
    	// reservationName := "your_reservation_name"
    	// instanceName := "your_instance_name"
    
    	ctx := context.Background()
    	machineType := fmt.Sprintf("zones/%s/machineTypes/%s", zone, "n2-standard-32")
    	sourceImage := "projects/debian-cloud/global/images/family/debian-12"
    	sharedReservation := fmt.Sprintf("projects/%s/reservations/%s", baseProjectId, reservationName)
    
    	req := &computepb.InsertInstanceRequest{
    		Project: projectID,
    		Zone:    zone,
    		InstanceResource: &computepb.Instance{
    			Disks: []*computepb.AttachedDisk{
    				{
    					InitializeParams: &computepb.AttachedDiskInitializeParams{
    						DiskSizeGb:  proto.Int64(10),
    						SourceImage: proto.String(sourceImage),
    					},
    					AutoDelete: proto.Bool(true),
    					Boot:       proto.Bool(true),
    					Type:       proto.String(computepb.AttachedDisk_PERSISTENT.String()),
    				},
    			},
    			MachineType:    proto.String(machineType),
    			MinCpuPlatform: proto.String("Intel Cascade Lake"),
    			Name:           proto.String(instanceName),
    			NetworkInterfaces: []*computepb.NetworkInterface{
    				{
    					Name: proto.String("global/networks/default"),
    				},
    			},
    			// specifies particular reservation, which should be consumed
    			ReservationAffinity: &computepb.ReservationAffinity{
    				ConsumeReservationType: proto.String("SPECIFIC_RESERVATION"),
    				Key:                    proto.String("compute.googleapis.com/reservation-name"),
    				Values:                 []string{sharedReservation},
    			},
    		},
    	}
    
    	op, err := client.Insert(ctx, req)
    	if err != nil {
    		return fmt.Errorf("unable to create instance: %w", err)
    	}
    
    	if op != nil {
    		if err = op.Wait(ctx); err != nil {
    			return fmt.Errorf("unable to wait for the operation: %w", err)
    		}
    	}
    	fmt.Fprintf(w, "Instance created from shared reservation\n")
    
    	return nil
    }
    

Java

Les exemples suivants montrent comment créer une instance N1 avec quatre processeurs virtuels et Intel Skylake comme plate-forme de processeur minimale, dans la zone us-central1-a, pour utiliser une réservation spécifique correspondante :

  • Pour créer un exemple de réservation en tant que réservation à projet unique et créer une instance pour l'utiliser, utilisez l'exemple de code suivant :

    import static com.google.cloud.compute.v1.ReservationAffinity.ConsumeReservationType.SPECIFIC_RESERVATION;
    
    import com.google.api.gax.longrunning.OperationFuture;
    import com.google.cloud.compute.v1.AttachedDisk;
    import com.google.cloud.compute.v1.AttachedDiskInitializeParams;
    import com.google.cloud.compute.v1.InsertInstanceRequest;
    import com.google.cloud.compute.v1.Instance;
    import com.google.cloud.compute.v1.InstancesClient;
    import com.google.cloud.compute.v1.NetworkInterface;
    import com.google.cloud.compute.v1.Operation;
    import com.google.cloud.compute.v1.ReservationAffinity;
    import java.io.IOException;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.TimeoutException;
    
    public class ConsumeSingleProjectReservation {
      public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
        // TODO(developer): Replace these variables before running the sample.
        // Project ID or project number of the Cloud project you want to use.
        String projectId = "YOUR_PROJECT_ID";
        // Name of the zone where the reservation is located.
        String zone = "us-central1-a";
        // Name of the reservation you want to query.
        String reservationName = "YOUR_RESERVATION_NAME";
        // Name of the VM instance you want to query.
        String instanceName = "YOUR_INSTANCE_NAME";
        // machineType: machine type of the VM being created.
        // *   For a list of machine types, see https://cloud.google.com/compute/docs/machine-types
        String machineTypeName = "n1-standard-4";
        // sourceImage: path to the operating system image to mount.
        // *   For details about images you can mount, see https://cloud.google.com/compute/docs/images
        String sourceImage = "projects/debian-cloud/global/images/family/debian-11";
        // diskSizeGb: storage size of the boot disk to attach to the instance.
        long diskSizeGb = 10L;
        // networkName: network interface to associate with the instance.
        String networkName = "default";
        // Minimum CPU platform of the instances.
        String minCpuPlatform = "Intel Skylake";
    
        createInstanceAsync(projectId, zone, instanceName, reservationName, machineTypeName,
            sourceImage, diskSizeGb, networkName, minCpuPlatform);
      }
    
      // Create a virtual machine targeted with the reserveAffinity field.
      // Ensure that the VM's properties match the reservation's VM properties.
      public static Instance createInstanceAsync(String projectId, String zone, String instanceName,
          String reservationName, String machineTypeName, String sourceImage, long diskSizeGb,
          String networkName, String minCpuPlatform)
          throws IOException, InterruptedException, ExecutionException, TimeoutException {
        String machineType = String.format("zones/%s/machineTypes/%s", zone, machineTypeName);
        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (InstancesClient instancesClient = InstancesClient.create()) {
          AttachedDisk disk =
              AttachedDisk.newBuilder()
                  .setBoot(true)
                  .setAutoDelete(true)
                  .setType(AttachedDisk.Type.PERSISTENT.toString())
                  .setDeviceName("disk-1")
                  .setInitializeParams(
                      AttachedDiskInitializeParams.newBuilder()
                          .setSourceImage(sourceImage)
                          .setDiskSizeGb(diskSizeGb)
                          .build())
                  .build();
    
          NetworkInterface networkInterface = NetworkInterface.newBuilder()
              .setName(networkName)
              .build();
    
          ReservationAffinity reservationAffinity =
              ReservationAffinity.newBuilder()
                  .setConsumeReservationType(SPECIFIC_RESERVATION.toString())
                  .setKey("compute.googleapis.com/reservation-name")
                  // Set specific reservation
                  .addValues(reservationName)
                  .build();
    
          Instance instanceResource =
              Instance.newBuilder()
                  .setName(instanceName)
                  .setMachineType(machineType)
                  .addDisks(disk)
                  .addNetworkInterfaces(networkInterface)
                  .setMinCpuPlatform(minCpuPlatform)
                  .setReservationAffinity(reservationAffinity)
                  .build();
    
          InsertInstanceRequest insertInstanceRequest = InsertInstanceRequest.newBuilder()
              .setProject(projectId)
              .setZone(zone)
              .setInstanceResource(instanceResource)
              .build();
    
          OperationFuture<Operation, Operation> operation = instancesClient.insertAsync(
              insertInstanceRequest);
          Operation response = operation.get(3, TimeUnit.MINUTES);
    
          if (response.hasError()) {
            return null;
          }
          return instancesClient.get(projectId, zone, instanceName);
        }
      }
    }
  • Pour créer un exemple de réservation en tant que réservation partagée et créer une instance pour l'utiliser, utilisez l'exemple de code suivant :

    import static com.google.cloud.compute.v1.ReservationAffinity.ConsumeReservationType.SPECIFIC_RESERVATION;
    
    import com.google.api.gax.longrunning.OperationFuture;
    import com.google.cloud.compute.v1.AttachedDisk;
    import com.google.cloud.compute.v1.AttachedDiskInitializeParams;
    import com.google.cloud.compute.v1.InsertInstanceRequest;
    import com.google.cloud.compute.v1.Instance;
    import com.google.cloud.compute.v1.InstancesClient;
    import com.google.cloud.compute.v1.NetworkInterface;
    import com.google.cloud.compute.v1.Operation;
    import com.google.cloud.compute.v1.ReservationAffinity;
    import java.io.IOException;
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.TimeUnit;
    import java.util.concurrent.TimeoutException;
    
    public class ConsumeSpecificSharedReservation {
      public static void main(String[] args)
          throws IOException, ExecutionException, InterruptedException, TimeoutException {
        // TODO(developer): Replace these variables before running the sample.
        // Project ID or project number of the Cloud project you want to use.
        String projectId = "YOUR_PROJECT_ID";
        // Name of the zone the reservation is located.
        String zone = "us-central1-a";
        // Name of the reservation you want to query.
        String reservationName = "YOUR_RESERVATION_NAME";
        // Name of the VM instance you want to query.
        String instanceName = "YOUR_INSTANCE_NAME";
        // machineType: machine type of the VM being created.
        // *   For a list of machine types, see https://cloud.google.com/compute/docs/machine-types
        String machineTypeName = "n1-standard-4";
        // sourceImage: path to the operating system image to mount.
        // *   For details about images you can mount, see https://cloud.google.com/compute/docs/images
        String sourceImage = "projects/debian-cloud/global/images/family/debian-11";
        // diskSizeGb: storage size of the boot disk to attach to the instance.
        long diskSizeGb = 10L;
        // networkName: network interface to associate with the instance.
        String networkName = "default";
        // Minimum CPU platform of the instances.
        String minCpuPlatform = "Intel Skylake";
    
        createInstanceAsync(projectId, zone, instanceName, reservationName, machineTypeName,
            sourceImage, diskSizeGb, networkName, minCpuPlatform);
      }
    
      // Create a virtual machine targeted with the reserveAffinity field.
      // Ensure that the VM's properties match the reservation's VM properties.
      public static Instance createInstanceAsync(String projectId, String zone, String instanceName,
          String reservationName, String machineTypeName, String sourceImage, long diskSizeGb,
          String networkName, String minCpuPlatform)
          throws IOException, InterruptedException, ExecutionException, TimeoutException {
        String machineType = String.format("zones/%s/machineTypes/%s", zone, machineTypeName);
        // To consume this reservation from any consumer projects that this reservation is shared with,
        // you must also specify the owner project of the reservation - the path to the reservation.
        String reservationPath =
            String.format("projects/%s/reservations/%s", projectId, reservationName);
        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        try (InstancesClient instancesClient = InstancesClient.create()) {
          AttachedDisk disk =
              AttachedDisk.newBuilder()
                  .setBoot(true)
                  .setAutoDelete(true)
                  .setType(AttachedDisk.Type.PERSISTENT.toString())
                  .setDeviceName("disk-1")
                  .setInitializeParams(
                      AttachedDiskInitializeParams.newBuilder()
                          .setSourceImage(sourceImage)
                          .setDiskSizeGb(diskSizeGb)
                          .build())
                  .build();
    
          NetworkInterface networkInterface = NetworkInterface.newBuilder()
              .setName(networkName)
              .build();
    
          ReservationAffinity reservationAffinity =
              ReservationAffinity.newBuilder()
                  .setConsumeReservationType(SPECIFIC_RESERVATION.toString())
                  .setKey("compute.googleapis.com/reservation-name")
                  // Set specific reservation
                  .addValues(reservationPath)
                  .build();
    
          Instance instanceResource =
              Instance.newBuilder()
                  .setName(instanceName)
                  .setMachineType(machineType)
                  .addDisks(disk)
                  .addNetworkInterfaces(networkInterface)
                  .setMinCpuPlatform(minCpuPlatform)
                  .setReservationAffinity(reservationAffinity)
                  .build();
    
          InsertInstanceRequest insertInstanceRequest = InsertInstanceRequest.newBuilder()
              .setProject(projectId)
              .setZone(zone)
              .setInstanceResource(instanceResource)
              .build();
    
          OperationFuture<Operation, Operation> operation = instancesClient.insertAsync(
              insertInstanceRequest);
          Operation response = operation.get(3, TimeUnit.MINUTES);
    
          if (response.hasError()) {
            return null;
          }
          return instancesClient.get(projectId, zone, instanceName);
        }
      }
    }

Node.js

Les exemples suivants montrent comment créer une instance N1 avec quatre processeurs virtuels et Intel Skylake comme plate-forme de processeur minimale, dans la zone us-central1-a, pour utiliser une réservation spécifique correspondante :

// Import the Compute library
const computeLib = require('@google-cloud/compute');
const compute = computeLib.protos.google.cloud.compute.v1;

// Instantiate a reservationsClient
const instancesClient = new computeLib.InstancesClient();
// Instantiate a zoneOperationsClient
const zoneOperationsClient = new computeLib.ZoneOperationsClient();

/**
 * TODO(developer): Update/uncomment these variables before running the sample.
 */
// The ID of the project where you want to create instance.
const projectId = await instancesClient.getProjectId();
// The zone in which to create instance.
const zone = 'us-central1-a';
// The name of the instance to create.
// const instanceName = 'instance-01';
// The name of the reservation to consume.
// Ensure that the specificReservationRequired field in reservation properties is set to true.
// const reservationName = 'reservation-01';
// Machine type to use for VM.
const machineType = 'n1-standard-4';

// Create instance to consume a specific single-project reservation
async function callCreateInstanceToConsumeSingleProjectReservation() {
  // Describe the size and source image of the boot disk to attach to the instance.
  // Ensure that the VM's properties match the reservation's VM properties,
  // including the zone, machine type (machine family, vCPUs, and memory),
  // minimum CPU platform, GPU amount and type, and local SSD interface and size
  const disk = new compute.Disk({
    boot: true,
    autoDelete: true,
    type: 'PERSISTENT',
    initializeParams: {
      diskSizeGb: '10',
      sourceImage: 'projects/debian-cloud/global/images/family/debian-12',
    },
  });

  //  Define networkInterface
  const networkInterface = new compute.NetworkInterface({
    name: 'global/networks/default',
  });

  // Define reservationAffinity
  const reservationAffinity = new compute.ReservationAffinity({
    consumeReservationType: 'SPECIFIC_RESERVATION',
    key: 'compute.googleapis.com/reservation-name',
    values: [reservationName],
  });

  // Create an instance
  const instance = new compute.Instance({
    name: instanceName,
    machineType: `zones/${zone}/machineTypes/${machineType}`,
    minCpuPlatform: 'Intel Skylake',
    disks: [disk],
    networkInterfaces: [networkInterface],
    reservationAffinity,
  });

  const [response] = await instancesClient.insert({
    project: projectId,
    instanceResource: instance,
    zone,
  });

  let operation = response.latestResponse;

  // Wait for the create instance operation to complete.
  while (operation.status !== 'DONE') {
    [operation] = await zoneOperationsClient.wait({
      operation: operation.name,
      project: projectId,
      zone: operation.zone.split('/').pop(),
    });
  }

  console.log(`Instance ${instanceName} created.`);
}

await callCreateInstanceToConsumeSingleProjectReservation();

Python

Les exemples suivants montrent comment créer une instance N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale, dans la zone us-central1-a, pour consommer une réservation spécifique correspondante :

Pour créer l'exemple de réservation spécifique et l'utiliser, procédez comme suit :

  • Pour créer et consommer l'exemple de réservation en tant que réservation à projet unique, utilisez l'exemple de code suivant :

    from __future__ import annotations
    
    import sys
    from typing import Any
    
    from google.api_core.extended_operation import ExtendedOperation
    from google.cloud import compute_v1
    
    
    def wait_for_extended_operation(
        operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
    ) -> Any:
        """
        Waits for the extended (long-running) operation to complete.
    
        If the operation is successful, it will return its result.
        If the operation ends with an error, an exception will be raised.
        If there were any warnings during the execution of the operation
        they will be printed to sys.stderr.
    
        Args:
            operation: a long-running operation you want to wait on.
            verbose_name: (optional) a more verbose name of the operation,
                used only during error and warning reporting.
            timeout: how long (in seconds) to wait for operation to finish.
                If None, wait indefinitely.
    
        Returns:
            Whatever the operation.result() returns.
    
        Raises:
            This method will raise the exception received from `operation.exception()`
            or RuntimeError if there is no exception set, but there is an `error_code`
            set for the `operation`.
    
            In case of an operation taking longer than `timeout` seconds to complete,
            a `concurrent.futures.TimeoutError` will be raised.
        """
        result = operation.result(timeout=timeout)
    
        if operation.error_code:
            print(
                f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
                file=sys.stderr,
                flush=True,
            )
            print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
            raise operation.exception() or RuntimeError(operation.error_message)
    
        if operation.warnings:
            print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
            for warning in operation.warnings:
                print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)
    
        return result
    
    
    def consume_specific_single_project_reservation(
        project_id: str,
        zone: str,
        reservation_name: str,
        instance_name: str,
        machine_type: str = "n1-standard-1",
        min_cpu_platform: str = "Intel Ivy Bridge",
    ) -> compute_v1.Instance:
        """
        Creates a specific reservation in a single project and launches a VM
        that consumes the newly created reservation.
        Args:
            project_id (str): The ID of the Google Cloud project.
            zone (str): The zone to create the reservation.
            reservation_name (str): The name of the reservation to create.
            instance_name (str): The name of the instance to create.
            machine_type (str): The machine type for the instance.
            min_cpu_platform (str): The minimum CPU platform for the instance.
        """
        instance_properties = (
            compute_v1.AllocationSpecificSKUAllocationReservedInstanceProperties(
                machine_type=machine_type,
                min_cpu_platform=min_cpu_platform,
            )
        )
    
        reservation = compute_v1.Reservation(
            name=reservation_name,
            specific_reservation=compute_v1.AllocationSpecificSKUReservation(
                count=3,
                instance_properties=instance_properties,
            ),
            # Only VMs that target the reservation by name can consume from this reservation
            specific_reservation_required=True,
        )
    
        # Create a reservation client
        client = compute_v1.ReservationsClient()
        operation = client.insert(
            project=project_id,
            zone=zone,
            reservation_resource=reservation,
        )
        wait_for_extended_operation(operation, "Reservation creation")
    
        instance = compute_v1.Instance()
        instance.name = instance_name
        instance.machine_type = f"zones/{zone}/machineTypes/{machine_type}"
        instance.min_cpu_platform = min_cpu_platform
        instance.zone = zone
    
        # Set the reservation affinity to target the specific reservation
        instance.reservation_affinity = compute_v1.ReservationAffinity(
            consume_reservation_type="SPECIFIC_RESERVATION",  # Type of reservation to consume
            key="compute.googleapis.com/reservation-name",  # Key for the reservation
            values=[reservation_name],  # Reservation name to consume
        )
        # Define the disks for the instance
        instance.disks = [
            compute_v1.AttachedDisk(
                boot=True,  # Indicates that this is a boot disk
                auto_delete=True,  # The disk will be deleted when the instance is deleted
                initialize_params=compute_v1.AttachedDiskInitializeParams(
                    source_image="projects/debian-cloud/global/images/family/debian-11",
                    disk_size_gb=10,
                ),
            )
        ]
        instance.network_interfaces = [
            compute_v1.NetworkInterface(
                network="global/networks/default",  # The network to use
                access_configs=[
                    compute_v1.AccessConfig(
                        name="External NAT",  # Name of the access configuration
                        type="ONE_TO_ONE_NAT",  # Type of access configuration
                    )
                ],
            )
        ]
        # Create a request to insert the instance
        request = compute_v1.InsertInstanceRequest()
        request.zone = zone
        request.project = project_id
        request.instance_resource = instance
    
        vm_client = compute_v1.InstancesClient()
        operation = vm_client.insert(request)
        wait_for_extended_operation(operation, "instance creation")
        print(f"Instance {instance_name} with specific reservation created successfully.")
    
        return vm_client.get(project=project_id, zone=zone, instance=instance_name)
    
    
  • Pour créer et utiliser l'exemple de réservation en tant que réservation partagée, utilisez l'exemple de code suivant :

    from __future__ import annotations
    
    import sys
    from typing import Any
    
    from google.api_core.extended_operation import ExtendedOperation
    from google.cloud import compute_v1
    
    
    def wait_for_extended_operation(
        operation: ExtendedOperation, verbose_name: str = "operation", timeout: int = 300
    ) -> Any:
        """
        Waits for the extended (long-running) operation to complete.
    
        If the operation is successful, it will return its result.
        If the operation ends with an error, an exception will be raised.
        If there were any warnings during the execution of the operation
        they will be printed to sys.stderr.
    
        Args:
            operation: a long-running operation you want to wait on.
            verbose_name: (optional) a more verbose name of the operation,
                used only during error and warning reporting.
            timeout: how long (in seconds) to wait for operation to finish.
                If None, wait indefinitely.
    
        Returns:
            Whatever the operation.result() returns.
    
        Raises:
            This method will raise the exception received from `operation.exception()`
            or RuntimeError if there is no exception set, but there is an `error_code`
            set for the `operation`.
    
            In case of an operation taking longer than `timeout` seconds to complete,
            a `concurrent.futures.TimeoutError` will be raised.
        """
        result = operation.result(timeout=timeout)
    
        if operation.error_code:
            print(
                f"Error during {verbose_name}: [Code: {operation.error_code}]: {operation.error_message}",
                file=sys.stderr,
                flush=True,
            )
            print(f"Operation ID: {operation.name}", file=sys.stderr, flush=True)
            raise operation.exception() or RuntimeError(operation.error_message)
    
        if operation.warnings:
            print(f"Warnings during {verbose_name}:\n", file=sys.stderr, flush=True)
            for warning in operation.warnings:
                print(f" - {warning.code}: {warning.message}", file=sys.stderr, flush=True)
    
        return result
    
    
    def consume_specific_shared_project_reservation(
        owner_project_id: str,
        shared_project_id: str,
        zone: str,
        reservation_name: str,
        instance_name: str,
        machine_type: str = "n1-standard-1",
        min_cpu_platform: str = "Intel Ivy Bridge",
    ) -> compute_v1.Instance:
        """
        Creates a specific reservation in a single project and launches a VM
        that consumes the newly created reservation.
        Args:
            owner_project_id (str): The ID of the Google Cloud project.
            shared_project_id: The ID of the owner project of the reservation in the same zone.
            zone (str): The zone to create the reservation.
            reservation_name (str): The name of the reservation to create.
            instance_name (str): The name of the instance to create.
            machine_type (str): The machine type for the instance.
            min_cpu_platform (str): The minimum CPU platform for the instance.
        """
        instance_properties = (
            compute_v1.AllocationSpecificSKUAllocationReservedInstanceProperties(
                machine_type=machine_type,
                min_cpu_platform=min_cpu_platform,
            )
        )
    
        reservation = compute_v1.Reservation(
            name=reservation_name,
            specific_reservation=compute_v1.AllocationSpecificSKUReservation(
                count=3,
                instance_properties=instance_properties,
            ),
            # Only VMs that target the reservation by name can consume from this reservation
            specific_reservation_required=True,
            share_settings=compute_v1.ShareSettings(
                share_type="SPECIFIC_PROJECTS",
                project_map={
                    shared_project_id: compute_v1.ShareSettingsProjectConfig(
                        project_id=shared_project_id
                    )
                },
            ),
        )
    
        # Create a reservation client
        client = compute_v1.ReservationsClient()
        operation = client.insert(
            project=owner_project_id,
            zone=zone,
            reservation_resource=reservation,
        )
        wait_for_extended_operation(operation, "Reservation creation")
    
        instance = compute_v1.Instance()
        instance.name = instance_name
        instance.machine_type = f"zones/{zone}/machineTypes/{machine_type}"
        instance.min_cpu_platform = min_cpu_platform
        instance.zone = zone
    
        # Set the reservation affinity to target the specific reservation
        instance.reservation_affinity = compute_v1.ReservationAffinity(
            consume_reservation_type="SPECIFIC_RESERVATION",  # Type of reservation to consume
            key="compute.googleapis.com/reservation-name",
            # To consume this reservation from any consumer projects, specify the owner project of the reservation
            values=[f"projects/{owner_project_id}/reservations/{reservation_name}"],
        )
        # Define the disks for the instance
        instance.disks = [
            compute_v1.AttachedDisk(
                boot=True,  # Indicates that this is a boot disk
                auto_delete=True,  # The disk will be deleted when the instance is deleted
                initialize_params=compute_v1.AttachedDiskInitializeParams(
                    source_image="projects/debian-cloud/global/images/family/debian-11",
                    disk_size_gb=10,
                ),
            )
        ]
        instance.network_interfaces = [
            compute_v1.NetworkInterface(
                network="global/networks/default",  # The network to use
                access_configs=[
                    compute_v1.AccessConfig(
                        name="External NAT",  # Name of the access configuration
                        type="ONE_TO_ONE_NAT",  # Type of access configuration
                    )
                ],
            )
        ]
        # Create a request to insert the instance
        request = compute_v1.InsertInstanceRequest()
        request.zone = zone
        # The instance will be created in the shared project
        request.project = shared_project_id
        request.instance_resource = instance
    
        vm_client = compute_v1.InstancesClient()
        operation = vm_client.insert(request)
        wait_for_extended_operation(operation, "instance creation")
        print(f"Instance {instance_name} from project {owner_project_id} created.")
        # The instance is created in the shared project, so we return it from there.
        return vm_client.get(project=shared_project_id, zone=zone, instance=instance_name)
    
    

REST

L'exemple suivant montre comment créer une réservation spécifique dans la zone us-central1-a pour trois instances N2 avec 32 processeurs virtuels et Intel Cascade Lake comme plate-forme de processeur minimale. Il montre également comment créer une instance unique pour consommer la réservation.

Pour créer l'exemple de réservation spécifique et l'utiliser, procédez comme suit :

  1. Pour créer l'exemple de réservation, envoyez une requête POST à la méthode instances.insert. Dans le corps de la requête, incluez le champ specificReservationRequired défini sur true :

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/reservations
    
    {
      "name": "reservation-02",
      "specificReservation": {
        "count": "3",
        "instanceProperties": {
          "machineType": "n2-standard-32",
          "minCpuPlatform": "Intel Cascade Lake",
        }
      },
      "specificReservationRequired": true
    }
    
  2. Pour créer une instance qui utilise l'exemple de réservation, envoyez une requête POST à la méthode instances.insert. Dans le corps de la requête, dans le champ reservationAffinity, incluez les éléments suivants :

    • Le champ consumeReservationType défini sur SPECIFIC_RESERVATION.

    • Le champ key défini sur compute.googleapis.com/reservation-name.

    • Le champ values défini sur l'URL de la réservation.

    La requête se présente comme suit :

    POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances
    
    {
      "name": "instance-02",
      "machineType": "zones/us-central1-a/machineTypes/n2-standard-32",
      "minCpuPlatform": "Intel Cascade Lake",
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "projects/debian-cloud/global/images/family/debian-12"
          }
        }
      ],
      "networkInterfaces": [
        {
          "network": "global/networks/default"
        }
      ],
      "reservationAffinity": {
        "consumeReservationType": "SPECIFIC_RESERVATION",
        "key": "compute.googleapis.com/reservation-name",
        "values": [
          "RESERVATION_URL"
        ]
      }
    }
    

    Remplacez RESERVATION_URL par l'URL de la réservation. Spécifiez une des valeurs suivantes :

    • Si vous avez créé la réservation dans le même projet : reservation-02

    • Si la réservation se trouve dans un autre projet : projects/PROJECT_ID/reservations/reservation-02

Utiliser une réservation créée automatiquement pour une requête en mode Agenda

Ce type de réservation permet aux nouvelles instances de calcul de consommer une réservation que Compute Engine crée automatiquement pour répondre à une réservation future en mode agenda.

Pour utiliser ce type de réservation, vous devez créer une instance comme suit :

L'exemple suivant crée une demande de réservation future en mode calendrier pour les instances A3 Ultra. L'exemple montre également les champs à spécifier lorsque vous créez une instance A3 Ultra autonome pour utiliser la réservation créée automatiquement pour la requête.

Pour utiliser l'exemple de réservation créée automatiquement, sélectionnez l'une des options suivantes :

Console

  1. Créez un exemple de demande pour cinq instances A3 Ultra et envoyez-le pour examen :

    1. Dans la console Google Cloud , accédez à la page Réservations.

      Accéder à la page "Réservations"

    2. Cliquez sur l'onglet Réservations futures.

    3. Cliquez sur Créer une réservation future. La page Créer une réservation future s'affiche.

    4. Dans la section Configuration matérielle, sélectionnez Spécifier un type de machine, puis spécifiez une instance A3 Ultra.

    5. Dans la section Méthode d'accessibilité, procédez comme suit :

      1. Sélectionnez Rechercher une capacité pour une durée maximale de 90 jours.

      2. Dans les listes Région et Zone, spécifiez la région et la zone dans lesquelles réserver des ressources. Pour cet exemple, sélectionnez respectivement us-central1 et us-central1-a.

      3. Dans le champ Capacité totale nécessaire, saisissez 5.

      4. Dans la section Période de réservation, spécifiez la période de réservation.

    6. Renseignez les champs restants, puis cliquez sur Envoyer.

  2. À l'heure de début de la requête, pour créer une instance A3 Ultra afin de consommer l'exemple de réservation créée automatiquement, procédez comme suit :

    1. Dans la console Google Cloud , accédez à la page Créer une instance.

      Accéder à la page Créer une instance

    2. Dans le champ Nom, saisissez un nom pour l'instance. Pour cet exemple, saisissez example-instance.

    3. Spécifiez la région et la zone dans lesquelles vous souhaitez réserver des ressources. Pour cet exemple, sélectionnez respectivement us-central1 et us-central1-a.

    4. Cliquez sur l'onglet GPU, puis, dans la liste Type de GPU, sélectionnez NVIDIA H200 141 Go. Cette action spécifie une instance A3 Ultra et définit le modèle de provisionnement sur Lié à une réservation.

    5. Dans le menu de navigation, cliquez sur Avancé.

    6. Dans la section Réservations, sélectionnez Choisir une réservation, puis cliquez sur Choisir une réservation.

    7. Dans le volet Choisir une réservation, procédez comme suit :

      1. Sélectionnez une réservation spécifique. Si vous souhaitez utiliser une réservation partagée qui existe dans un autre projet, sélectionnez le projet dans lequel la réservation existe dans la liste Projet.

      2. Cliquez sur Choisir.

    8. Dans la section Modèle de provisionnement, développez la section Paramètres avancés du modèle de provisionnement de VM.

    9. Dans la liste À l'arrêt de la VM, sélectionnez Arrêter (par défaut) ou Supprimer.

    10. Cliquez sur Créer.

gcloud

  1. Pour créer un exemple de demande pour cinq VM A3 Ultra et l'envoyer pour examen, utilisez la commande gcloud beta compute future-reservations create :

    gcloud beta compute future-reservations create example-fr \
        --auto-delete-auto-created-reservations \
        --deployment-type=DENSE \
        --planning-status=SUBMITTED \
        --require-specific-reservation \
        --reservation-mode=CALENDAR \
        --reservation-name=example-reservation \
        --share-type=local \
        --start-time=2025-10-05T00:00:00Z \
        --end-time=2025-10-19T00:00:00Z \
        --machine-type=a3-ultragpu-8g \
        --total-count=5 \
        --zone=us-central1-a
    

    Supposons que Google Cloud approuve la demande et que Compute Engine crée automatiquement une réservation vide. À l'heure de début de la requête, le 5 octobre 2025, Compute Engine augmente le nombre de VM avec GPU réservées dans la réservation. Vous pouvez ensuite utiliser la réservation.

  2. À l'heure de début de la requête, pour créer une instance A3 Ultra afin d'utiliser l'exemple de réservation créée automatiquement, exécutez la commande gcloud compute instances create avec les options suivantes :

    • L'option --instance-termination-action

    • L'option --provisioning-model est définie sur RESERVATION_BOUND.

    • L'option --reservation

    • L'option --reservation-affinity est définie sur specific.

    La commande ressemble à ce qui suit. Pour connaître toutes les exigences requises pour créer une instance A3 Ultra, consultez Créer une instance A3 Ultra ou A4.

    gcloud compute instance create example-instance  \
        --machine-type=a3-ultragpu-8g \
        --instance-termination-action=TERMINATION_ACTION \
        --provisioning-model=RESERVATION_BOUND \
        --reservation-affinity=specific \
        --reservation=RESERVATION_URL \
        --zone=us-central1-a \
        ...
    

    La commande inclut les valeurs suivantes :

    • TERMINATION_ACTION : indique si Compute Engine arrête (STOP) ou supprime (DELETE) la VM à la fin de la période de réservation.

    • RESERVATION_URL : URL de la réservation, au format suivant :

      • Si la réservation créée automatiquement existe dans votre projet : example-reservation.

      • Si la réservation créée automatiquement existe dans un autre projet : projects/PROJECT_ID/reservations/example-reservation.

REST

  1. Pour créer un exemple de demande de cinq instances A3 Ultra et l'envoyer pour examen, envoyez une requête POST à la méthode bêta futureReservations.insert :

    POST https://compute.googleapis.com/compute/beta/projects/example-project/zones/us-central1-a/futureReservations
    
    {
      "name": "example-request-calendar-mode",
      "autoDeleteAutoCreatedReservations": true,
      "deploymentType": "DENSE",
      "planningStatus": "SUBMITTED",
      "reservationMode": "CALENDAR",
      "reservationName": "example-reservation",
      "shareSettings": {
        "shareType": "LOCAL"
      },
      "specificReservationRequired": true,
      "specificSkuProperties": {
        "machineType": "a3-ultragpu-8g",
        "totalCount": 5
      },
      "timeWindow": {
        "startTime": "2025-10-05T00:00:00Z",
        "endTime": "2025-10-19T00:00:00Z"
      }
    }
    

    Supposons que Google Cloud approuve la demande et que Compute Engine crée automatiquement une réservation vide. À l'heure de début de la requête, le 5 octobre 2025, Compute Engine augmente le nombre de VM avec GPU réservées dans la réservation. Vous pouvez ensuite utiliser la réservation.

  2. À l'heure de début de la demande, pour créer une instance A3 Ultra afin d'utiliser l'exemple de réservation créée automatiquement, envoyez une requête POST à la méthode instances.insert. Dans le corps de la requête, incluez les champs suivants :

    • Le champ reservationAffinity.consumeReservationType est défini sur SPECIFIC_RESERVATION.

    • Le champ reservationAffinity.key est défini sur compute.googleapis.com/reservation-name.

    • Le champ reservationAffinity.values défini sur l'URL de la réservation.

    • Le champ scheduling.instanceTerminationAction

    • Le champ scheduling.provisioningModel défini sur RESERVATION_BOUND.

    La requête ressemble à ce qui suit. Pour connaître toutes les exigences requises pour créer une instance A3 Ultra, consultez Créer une instance A3 Ultra ou A4.

    POST https://compute.googleapis.com/compute/beta/projects/example-project/zones/us-central1-a/
    
    {
      {
        "machineType": "projects/example-project/zones/us-central1-a/machineTypes/a3-ultragpu-8g",
        "name": "example-instance",
        "reservationAffinity": {
          "consumeReservationType": "SPECIFIC_RESERVATION",
          "key": "compute.googleapis.com/reservation-name",
          "values":[
            "RESERVATION_URL"
          ],
        },
        "scheduling": {
          "instanceTerminationAction": "TERMINATION_ACTION",
          "provisioningModel": "RESERVATION_BOUND"
        },
        ...
      }
    }
    

    Le corps de la requête inclut les valeurs suivantes :

    • RESERVATION_URL : URL de la réservation, au format suivant :

      • Si la réservation créée automatiquement existe dans votre projet : example-reservation.

      • Si la réservation créée automatiquement existe dans un autre projet : projects/PROJECT_ID/reservations/example-reservation.

    • TERMINATION_ACTION : indique si Compute Engine arrête (STOP) ou supprime (DELETE) la VM à la fin de la période de réservation.

Tester que les propriétés d'une instance correspondent à une réservation consommée automatiquement

Pour tester si les propriétés d'une instance de calcul correspondent à une réservation consommée automatiquement, procédez comme suit :

  1. Créez une copie de la réservation en tant que réservation spécifiquement ciblée pour une seule instance.

  2. Créez une instance de test pour consommer la réservation.

Si vous pouvez créer l'instance de test, cela signifie que ses propriétés correspondent à celles de la réservation de test. Sinon, vous rencontrerez des erreurs.

Une fois que vous avez vérifié que les propriétés de votre instance de test et de votre réservation de test correspondent, supprimez la réservation et l'instance de test.

Vérifier la consommation des réservations

Pour vérifier l'utilisation des réservations, vous pouvez effectuer une ou plusieurs des opérations suivantes :

  • Pour afficher le nombre actuel d'instances de calcul qui consomment vos réservations et le nombre d'instances supplémentaires qui peuvent les consommer, affichez les réservations.

  • Pour surveiller les données de consommation des réservations mises à jour toutes les 30 minutes et recevoir des alertes lorsque des réservations sont consommées ou non consommées, surveillez la consommation des réservations.

  • Pour afficher les données de consommation des réservations mises à jour toutes les 24 heures, effectuez l'une des opérations suivantes :

    • Pour afficher la consommation passée et prévue des réservations afin d'analyser les tendances de consommation et de planifier les futurs besoins en capacité, utilisez le planificateur de capacité.

Étapes suivantes