Excluir uma instância do Compute Engine


Este documento explica como excluir uma instância do Compute Engine. Para saber mais sobre o ciclo de vida de uma instância, consulte Ciclo de vida da instância do Compute Engine .

Se você não precisar mais de uma instância, exclua-a para não incorrer em cobranças pela instância e pelos recursos anexados.

Antes de começar

Funções obrigatórias

Para obter as permissões necessárias para excluir uma instância de computação, peça ao administrador para conceder a você a função do IAM Compute Instance Admin (v1) ( roles/compute.instanceAdmin.v1 ) no projeto. Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Esta função predefinida contém as permissões necessárias para excluir uma instância de computação. Para ver as permissões exatas necessárias, expanda a seção Permissões necessárias :

Permissões necessárias

As seguintes permissões são necessárias para excluir uma instância de computação:

  • compute.instances.delete na instância
  • Para forçar a exclusão de um disco anexado: compute.disks.delete no disco

Você também poderá obter essas permissões com funções personalizadas ou outras funções predefinidas .

Implicações de faturamento

Depois de excluir uma instância de computação, você não será mais cobrado pela instância e pelos recursos anexados, a menos que qualquer uma das seguintes situações se aplique:

  • Se você excluir uma instância hospedada em um nó de locatário individual , continuará pagando pelo próprio nó de locatário individual, em vez de pelas instâncias individuais hospedadas no nó.

  • Se você tiver um desconto por uso contínuo , continuará pagando pelos recursos com os quais se comprometeu, independentemente de usar esses recursos ou não.

  • Se você preservar quaisquer recursos que foram anexados à instância, continuará incorrendo em cobranças por esses recursos até excluí-los. Por exemplo, se você excluir uma instância, mas preservar os discos anexados a ela, você continuará incorrendo em cobranças pelos discos.

Para obter mais informações, consulte Preços de instâncias de VM .

Preservar recursos anexados

Em alguns casos, antes de excluir uma instância de computação, talvez você queira preservar um de seus recursos anexados. Você pode preservar os recursos anexados fazendo o seguinte:

Excluir instâncias

Quando você exclui uma instância de computação, o Compute Engine interrompe a instância antes de excluí-la.

Se você excluir uma ou mais instâncias simultaneamente, deverá decidir o que acontecerá com os discos anexados:

Exclua instâncias e todos os recursos anexados

Dependendo do que você deseja fazer ao excluir uma instância de computação, use as seguintes opções:

  • Se você configurou um disco anexado para ser preservado após a exclusão da instância, será possível substituir essa configuração e forçar sua exclusão usando a CLI do Google Cloud.

  • Se você tiver ativado o encerramento normal na instância, poderá excluí-la sem encerrá-la normalmente ou encerrar um encerramento normal em andamento usando o console do Google Cloud, a CLI gcloud ou a API REST.

  • Para excluir várias instâncias simultaneamente, use o console do Google Cloud ou, para instâncias localizadas na mesma zona, a CLI gcloud.

Para excluir uma ou mais instâncias e todos os recursos anexados, selecione uma das seguintes opções:

Console

  1. No console do Google Cloud, acesse a página de instâncias de VM .

    Acesse as instâncias de VM

  2. Selecione as instâncias que você deseja excluir.

  3. Clique em Excluir .

  4. Na caixa de diálogo, faça o seguinte:

    1. Opcional: para excluir as instâncias sem encerrá-las normalmente ou encerrar um encerramento normal em andamento, marque a caixa de seleção Ignorar encerramento normal (se aplicável) .

    2. Para confirmar, clique em Excluir .

gcloud

Para excluir uma ou mais instâncias na mesma zona, use o comando gcloud compute instances delete :

gcloud compute instances delete INSTANCE_NAMES \
    --zone=ZONE

Substitua o seguinte:

  • INSTANCE_NAMES : uma lista de nomes de instâncias separados por espaços — por exemplo, instance-01 instance-02 instance-03 .

  • ZONE : a zona onde as instâncias estão localizadas.

Opcionalmente, você pode fazer um ou ambos os seguintes procedimentos:

  • Para forçar a exclusão dos discos anexados a uma ou mais instâncias, inclua o sinalizador --delete-disks :

    gcloud compute instances delete INSTANCE_NAMES \
        --delete-disks=DELETE_DISK_TYPE \
        --zone=ZONE
    

    Substitua DELETE_DISK_TYPE por um dos seguintes valores:

    • Para excluir o armazenamento persistente de inicialização e não-inicialização anexado: all

    • Para excluir apenas o armazenamento persistente de inicialização anexado: boot

    • Para excluir apenas o armazenamento persistente que não é de inicialização: data

  • Se você tiver habilitado o desligamento normal em uma ou mais instâncias, poderá excluir as instâncias sem desligá-las normalmente ou encerrar manualmente um desligamento normal em andamento. Para fazer isso, use o comando gcloud beta compute instances delete com a sinalização --no-graceful-shutdown :

    gcloud beta compute instances delete INSTANCE_NAMES \
        --no-graceful-shutdown \
        --zone=ZONE
    

C#


using Google.Cloud.Compute.V1;
using System.Threading.Tasks;

public class DeleteInstanceAsyncSample
{
    public async Task DeleteInstanceAsync(
        // TODO(developer): Set your own default values for these parameters or pass different values when calling this method.
        string projectId = "your-project-id",
        string zone = "us-central1-a",
        string machineName = "test-machine")
    {

        // Initialize client that will be used to send requests. This client only needs to be created
        // once, and can be reused for multiple requests.
        InstancesClient client = await InstancesClient.CreateAsync();

        // Make the request to delete a VM instance.
        var instanceDeletion = await client.DeleteAsync(projectId, zone, machineName);

        // Wait for the operation to complete using client-side polling.
        await instanceDeletion.PollUntilCompletedAsync();
    }
}

Ir

import (
	"context"
	"fmt"
	"io"

	compute "cloud.google.com/go/compute/apiv1"
	computepb "cloud.google.com/go/compute/apiv1/computepb"
)

// deleteInstance sends a delete request to the Compute Engine API and waits for it to complete.
func deleteInstance(w io.Writer, projectID, zone, instanceName string) error {
	// projectID := "your_project_id"
	// zone := "europe-central2-b"
	// instanceName := "your_instance_name"
	ctx := context.Background()
	instancesClient, err := compute.NewInstancesRESTClient(ctx)
	if err != nil {
		return fmt.Errorf("NewInstancesRESTClient: %w", err)
	}
	defer instancesClient.Close()

	req := &computepb.DeleteInstanceRequest{
		Project:  projectID,
		Zone:     zone,
		Instance: instanceName,
	}

	op, err := instancesClient.Delete(ctx, req)
	if err != nil {
		return fmt.Errorf("unable to delete 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 deleted\n")

	return nil
}

Java


import com.google.api.gax.longrunning.OperationFuture;
import com.google.cloud.compute.v1.DeleteInstanceRequest;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.Operation;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class DeleteInstance {

  public static void main(String[] args)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    // TODO(developer): Replace these variables before running the sample.
    String project = "your-project-id";
    String zone = "zone-name";
    String instanceName = "instance-name";
    deleteInstance(project, zone, instanceName);
  }

  // Delete the instance specified by `instanceName`
  // if it's present in the given project and zone.
  public static void deleteInstance(String project, String zone, String instanceName)
      throws IOException, InterruptedException, ExecutionException, TimeoutException {
    // 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 `instancesClient.close()` method on the client to safely
    // clean up any remaining background resources.
    try (InstancesClient instancesClient = InstancesClient.create()) {

      System.out.printf("Deleting instance: %s ", instanceName);

      // Describe which instance is to be deleted.
      DeleteInstanceRequest deleteInstanceRequest = DeleteInstanceRequest.newBuilder()
          .setProject(project)
          .setZone(zone)
          .setInstance(instanceName).build();

      OperationFuture<Operation, Operation> operation = instancesClient.deleteAsync(
          deleteInstanceRequest);
      // Wait for the operation to complete.
      Operation response = operation.get(3, TimeUnit.MINUTES);

      if (response.hasError()) {
        System.out.println("Instance deletion failed ! ! " + response);
        return;
      }
      System.out.println("Operation Status: " + response.getStatus());
    }
  }
}

Node.js

/**
 * TODO(developer): Uncomment these variables before running the sample.
 */
// const projectId = 'YOUR_PROJECT_ID';
// const zone = 'europe-central2-b'
// const instanceName = 'YOUR_INSTANCE_NAME';

const compute = require('@google-cloud/compute');

// Delete the instance specified by `instanceName` if it's present in the given project and zone.
async function deleteInstance() {
  const instancesClient = new compute.InstancesClient();

  console.log(`Deleting ${instanceName} from ${zone}...`);

  const [response] = await instancesClient.delete({
    project: projectId,
    zone,
    instance: instanceName,
  });
  let operation = response.latestResponse;
  const operationsClient = new compute.ZoneOperationsClient();

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

  console.log('Instance deleted.');
}

deleteInstance();

PHP

use Google\Cloud\Compute\V1\Client\InstancesClient;
use Google\Cloud\Compute\V1\DeleteInstanceRequest;

/**
 * Delete an instance.
 *
 * @param string $projectId Your Google Cloud project ID.
 * @param string $zone Zone where the instance you want to delete is (like "us-central1-a").
 * @param string $instanceName Unique name for the Compute instance to delete.
 *
 * @throws \Google\ApiCore\ApiException if the remote call fails.
 * @throws \Google\ApiCore\ValidationException if local error occurs before remote call.
 */
function delete_instance(
    string $projectId,
    string $zone,
    string $instanceName
) {
    // Delete the Compute Engine instance using InstancesClient.
    $instancesClient = new InstancesClient();
    $request = (new DeleteInstanceRequest())
        ->setInstance($instanceName)
        ->setProject($projectId)
        ->setZone($zone);
    $operation = $instancesClient->delete($request);

    // Wait for the operation to complete.
    $operation->pollUntilComplete();
    if ($operation->operationSucceeded()) {
        printf('Deleted instance %s' . PHP_EOL, $instanceName);
    } else {
        $error = $operation->getError();
        printf('Failed to delete instance: %s' . PHP_EOL, $error?->getMessage());
    }
}

Pitão

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 delete_instance(project_id: str, zone: str, machine_name: str) -> None:
    """
    Send an instance deletion request to the Compute Engine API and wait for it to complete.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone you want to use. For example: “us-west3-b”
        machine_name: name of the machine you want to delete.
    """
    instance_client = compute_v1.InstancesClient()

    print(f"Deleting {machine_name} from {zone}...")
    operation = instance_client.delete(
        project=project_id, zone=zone, instance=machine_name
    )
    wait_for_extended_operation(operation, "instance deletion")
    print(f"Instance {machine_name} deleted.")

Rubi


require "google/cloud/compute/v1"

# Sends an instance deletion request to the Compute Engine API and waits for it to complete.
#
# @param [String] project project ID or project number of the Cloud project you want to use.
# @param [String] zone name of the zone you want to use. For example: "us-west3-b"
# @param [String] instance_name name of the instance you want to delete.
def delete_instance project:, zone:, instance_name:
  # Initialize client that will be used to send requests. This client only needs to be created
  # once, and can be reused for multiple requests.
  client = ::Google::Cloud::Compute::V1::Instances::Rest::Client.new

  puts "Deleting #{instance_name} from #{zone}..."
  begin
    # Make the request to delete a VM instance.
    operation = client.delete project: project, zone: zone, instance: instance_name
    # Wait for the delete operation to complete.
    operation = wait_until_done operation: operation

    if operation.error?
      warn "Error during deletion:", operation.error
    else
      compute_operation = operation.operation
      warn "Warning during creation:", compute_operation.warnings unless compute_operation.warnings.empty?
      puts "Instance #{instance_name} deleted."
    end
  rescue ::Google::Cloud::Error => e
    warn "Exception during deletion:", e
  end
end

DESCANSAR

Para excluir uma instância, faça uma solicitação DELETE para o método instances delete :

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME

Substitua o seguinte:

  • PROJECT_ID : o ID do projeto onde a instância está localizada.

  • ZONE : a zona da instância.

  • INSTANCE_NAME : o nome da instância.

Opcionalmente, se você tiver habilitado o encerramento normal na instância, poderá excluir as instâncias sem encerrá-las normalmente ou encerrar manualmente um encerramento normal em andamento. Para fazer isso, faça uma solicitação DELETE para o método beta instances.delete . No URL da solicitação, inclua o parâmetro de consulta noGracefulShutdown definido como true :

DELETE https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME?noGracefulShutdown=true

Exclua instâncias e preserve discos

Por padrão, excluir uma instância de computação exclui a instância e seus recursos anexados. No entanto, ao excluir uma instância usando a CLI gcloud, você pode especificar a preservação dos discos anexados, independentemente das configurações de exclusão automática .

Para excluir uma ou mais instâncias na mesma zona enquanto preserva seus discos anexados, use o comando gcloud compute instances delete com a sinalização --keep-disks :

gcloud compute instances delete INSTANCE_NAMES \
    --keep-disks=KEEP_DISK_TYPE \
    --zone=ZONE

Substitua o seguinte:

  • INSTANCE_NAMES : uma lista de nomes de instâncias separados por espaços — por exemplo, instance-01 instance-02 instance-03 .

  • KEEP_DISK_TYPE : especifique um dos seguintes valores:

    • Para preservar o armazenamento persistente de inicialização e não-inicialização anexado: all

    • Para preservar apenas o armazenamento persistente de inicialização anexado: boot

    • Para preservar apenas o armazenamento persistente não inicializável anexado: data

  • ZONE : a zona onde as instâncias estão localizadas.

Opcionalmente, se você tiver habilitado o encerramento normal em uma ou mais instâncias, poderá excluir as instâncias sem desligá-las normalmente ou encerrar manualmente um encerramento normal em andamento. Para fazer isso, use o comando gcloud beta compute instances delete com a sinalização --no-graceful-shutdown :

gcloud beta compute instances delete VM_NAMES \
    --keep-disks=KEEP_DISK_TYPE \
    --no-graceful-shutdown \
    --zone=ZONE

O que vem a seguir